博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop里如何Mysql编程
阅读量:6638 次
发布时间:2019-06-25

本文共 2298 字,大约阅读时间需要 7 分钟。

   mysql数据库读写

      hadoop技术推出一度曾遭到关系数据库研究者的挑衅和批评,认为MapReduce不具有关系数据库中的结构化数据存储和处理能力。为此,hadoop社区和研究人员做了多的努力,在hadoop0.19版支持MapReduce访问关系数据库,如:MySQL 、Mongodb 、PostgreSQL 、Oracle 等几个数据库系统。Hadoop 访问关系数据库主要通过DBInputFormat类实现的,包的位置在 org.apache.hadoop.mapred.lib.db以 Mysql为例来学习 MapReduce读写数据。

 

 

    MySQL是一个由瑞典MySQL AB 公司开发,目前属于  旗下公司。MySQL 最流行的,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

 

   Mongodb百度百科:

 

    PostgreSQL百度百科:

 

    Oracle百度百科:

 

 

 

读数据

       DBInputFormat 在 Hadoop 应用程序中通过数据库供应商提供的 JDBC接口来与数据库进行交互,并且可以使用标准的 SQL 来读取数据库中的记录。学习DBInputFormat首先必须知道二个条件。

        第一、在使用 DBInputFormat 之前,必须将要使用的 JDBC 驱动拷贝到分布式系统各个节点的$HADOOP_HOME/lib/目录下。

        第二、MapReduce访问关系数据库时,大量频繁的从MapReduce程序中查询和读取数据,这大大的增加了数据库的访问负载,因此,DBInputFormat接口仅仅适合读取小数据量的数据,而不适合处理数据仓库。

提示    处理数据仓库的方法有:利用数据库的 Dump 工具将大量待分析的数据输出为文本,并上传到 HDFS 中进行处理。

 

 

 

 

下面我们来看看 DBInputFormat类的内部结构,DBInputFormat 类中包含以下三个内置类。

        1、protected class DBRecordReader implements RecordReader< LongWritable, T>:用来从一张数据库表中读取一条条元组记录。

        2、public static class NullDBWritable implements DBWritable,Writable:主要用来实现 DBWritable 接口。DBWritable接口要实现二个函数,第一是write,第二是readFileds,这二个函数都不难理解,一个是写,一个是读出所有字段。原型如下:

public void write(PreparedStatement statement) throwsSQLException;

public void readFields(ResultSet result);

  3、protected static class DBInputSplit implements InputSplit:主要用来描述输入元组集合的范围,包括 start 和 end 两个属性,start 用来表示第一条记录的索引号,end 表示最后一条记录的索引号。

 

 

 

下面对怎样使用 DBInputFormat 读取数据库记录进行详细的介绍,具体步骤如下:

  步骤一 、配置 JDBC 驱动、数据源和数据库访问的用户名和密码。代码如下。

DBConfiguration.configureDB (Job job, StringdriverClass, String dbUrl, String userName, String passwd)

MySQL 数据库的 JDBC 的驱动为“com.mysql.jdbc.Driver”,

数据源为“jdbc:mysql://localhost/testDB”,

其中testDB为访问的数据库。useName一般为“root”,passwd是你数据库的密码。

  

  步骤二、使用 setInput 方法操作 MySQL 中的表,setInput 方法的参数如下。

DBInputFormat.setInput(Job job, Class< extends DBWritable> inputClass, String tableName, String conditions,String orderBy, String... fieldNames)

  这个方法的参数很容易看懂,inputClass实现DBWritable接口。string tableName表名, conditions表示查询的条件,orderby表示排序的条件,fieldNames是字段,这相当与把sql语句拆分的结果。当然也可以用sql语句进行重载,代码如下。

  setInput(Job job, Class< extends DBWritable> inputClass, String inputQuery, StringinputCountQuery)。

 

   步骤三、编写MapReduce函数,包括Mapper 类、Reducer 类、输入输出文件格式等,然后调用job.waitForCompletion(true)。

 

 

本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5659460.html,如需转载请自行联系原作者

你可能感兴趣的文章
MVC 5 App 通过 Facebook OAuth2 登陆(Sign-on)的问题
查看>>
2.7.3版本hadoop之HDFS环境搭建之浅谈
查看>>
seaweddfs配置不定时更新
查看>>
日期格式化,moment.js
查看>>
使用PowerShell批量注册DLL到GAC
查看>>
谴责盛大Bambook 的ADB.EXE流氓进程
查看>>
R语言使用马尔可夫链Markov Chain, MC来模拟抵押违约
查看>>
时间戳
查看>>
和为S的连续正数序列
查看>>
javascript 事件的两种绑定方法
查看>>
Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)
查看>>
sort
查看>>
应用HTMLTestRunner整合测试报告
查看>>
WebApi 文件上传
查看>>
C++—模板(1)模板与函数模板
查看>>
OAuth2.0认证介绍
查看>>
unity3d与web网页通信
查看>>
【转载】Secure WCF RESTful service using OAUTH
查看>>
jquery插件的写法
查看>>
Tomcat--startup.bat文件
查看>>