Hadoop DBOutputFormat的使用
来源:互联网 发布:淘宝网睡眠面膜 编辑:程序博客网 时间:2024/05/01 00:31
最近在研究数据在HDFS和关系型数据库之间的迁移,主要使用了两种方式:一是,按照数据库要求的文件格式生成文件,然后由数据库提供的导入工具进行导入;二是采用JDBC的方式进行导入。MapReduce默认提供了DBInputFormat和DBOutputFormat,分别用于数据库的读取和数据库的写入。为了使用DBOutputFormat我们需要完成以下工作。
首先,对于每一个数据库表编写对应的bean类,该类需要实现WritableComparable接口和DBWritable接口(如果是DBInputFormat,则需要实现Writable和DBWritable。之所以是这样是因为DBOutputFormat在输出的时候是将key写入到数据库而不是value。根据Hadoop的规定Key需要能够进行比较排序,所以需要实现WritableComparable)。Bean类的实现以下面的代码为例:
public void readFields(ResultSet result) throws SQLException { int index = 1; this.setTestId(result.getString(index++)); this.setTestName(result.getString(index++)); this.setAge(result.getInt(index++)); } public void write(PreparedStatement statement) throws SQLException { int index = 1; statement.setString(index++, this.getTestId()); statement.setString(index++, this.getTestName()); statement.setInt(index, this.getAge()); }
上面两个方法对应着DBWriteable接口。readFields方法负责从结果集中读取数据库数据(注意ResultSet的下标是从1开始的),一次读取查询SQL中筛选的某一列。Write方法负责将数据写入到数据库,将每一行的每一列依次写入。
完成bean的定义后,进行Mapper的编写,主要是解析数据库的每一行数据然后将每一列赋值给bean对应的属性,这里不再做详细的介绍。
最后进行Job的一些配置,具体如下面代码所示:
Configuration conf = new Configuration(); conf.set(DBConfiguration.DRIVER_CLASS_PROPERTY, "com.mysql.jdbc.Driver"); conf.set(DBConfiguration.URL_PROPERTY, "jdbc:mysql://localhost:3306/htestdb"); conf.set(DBConfiguration.USERNAME_PROPERTY, "root"); conf.set(DBConfiguration.PASSWORD_PROPERTY, ""); job.setNumReduceTasks(0); DBOutputFormat.setOutput(job, "test", "testid","testname","age"); job.setOutputFormatClass(DBOutputFormat.class);
上面的配置主要包括以下几项:
l 数据库驱动的名称:com.mysql.jdbc.Driver
l 数据库URL:jdbc:mysql://localhost:3306/htestdb
l 用户名:root
l 密码:空
l 数据库表以及每列的名称:DBOutputFormat.setOutput(job, "test", "testid","testname","age")
除此之外还有Hadoop基础设置,比如reduce的个数、输入输出方式、输入输出路径等,这里不再做详细介绍。
需要提醒的是DBOutputFormat以MapReduce的方式运行,会并行的连接数据库。在这里需要合适的设置map活着reduce的个数,以便将并行连接的数量控制在合理的范围之内。
- Hadoop DBOutputFormat的使用
- Hadoop中DBInputFormat和DBOutputFormat使用
- Hadoop中DBInputFormat和DBOutputFormat使用
- Hadoop中DBInputFormat和DBOutputFormat使用
- Hadoop中DBInputFormat和DBOutputFormat使用
- Hadoop中DBInputFormat和DBOutputFormat使用
- Hadoop中的DBOutputFormat
- hadoop 操作数据库。DBInputFormat,DBOutputFormat
- Hadoop和数据库之间剪不清理还乱的关系(DBOutputFormat)
- Hadoop MapRduce 重写DBOutputFormat更新mysql数据库
- DBInputFormat+DBOutputFormat
- MapReduce中的DBOutputFormat
- Hadoop的MultipleOutputFormat使用
- hadoop的使用
- hadoop的使用记录
- Hadoop HPROF 的使用
- hadoop的使用命令
- hadoop CombineFileInputFormat的使用
- IOS深入学习(20)之Object modeling
- java.util.*
- JAVA 继承 父类子类 内存分配
- OCP-1Z0-052-V8.02-43题
- Activity的启动模式
- Hadoop DBOutputFormat的使用
- Tomcat学习(1)
- 常用包
- linux网络编程
- 广播接收者--BroadcastReceiver
- 怎样查看Oracle的数据库名称sid
- spring mvc HelloWorld
- J2SE API软件包包名和注释
- 13 Stream