Hadoop里如何Mysql编程

  1. 云栖社区>
  2. 博客>
  3. 正文

Hadoop里如何Mysql编程

技术小哥哥 2017-11-21 16:09:00 浏览624
展开阅读全文

   mysql数据库读写

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

 

 

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

 

   Mongodb百度百科:

http://baike.baidu.com/subview/3385614/9338180.htm

 

    PostgreSQL百度百科:

http://baike.baidu.com/view/28196.htm

 

    Oracle百度百科:

 

 

 

读数据

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

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

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

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

http://baike.baidu.com/view/22424.htm?fromtitle=Oracle&fromid=301207&type=syn

 

 

 

 

下面我们来看看 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,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
技术小哥哥
+ 关注