码迷,mamicode.com
首页 > 数据库 > 详细

Hadoop Mysql

时间:2016-07-11 11:56:08      阅读:304      评论:0      收藏:0      [点我收藏+]

标签:

      mysql数据库读写

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


 [lz1]MySQL百度百科:

http://baike.baidu.com/link?url=ldYRLZberc-0_N3oKonQJRo0mSUd8fKlIo_-5ZDmopwnBpPYYry37JVM3MJ5UmINLJS4Gj7NYFZod0-mt1ecwxdDOdmAq6bTAxiuDiU5CaC

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

 [lz3]PostgreSQL百度百科:

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

 [lz4]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)。

 

 

 

Hadoop Mysql

标签:

原文地址:http://www.cnblogs.com/zlslch/p/5659460.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!