利用MR程序将数据从hbase中导入mysql

转载请注明出处。

这里先理一下思路,要将数据从hbase中导入mysql,要实现5个类,分别是负责读取hbase数据的mapper类,负责写入mysql的reducer类,combine类,数据库信息读写的接口类,以及最后让程序跑起来的主类。

先来看下连接mysql需要给出的信息:

有3点:分别是配置参数configuration
,输入输出格式dbout/input, job的初始化。

先看第一点,配置信息:

Configuration conf = new Configuration() ;
        DBConfiguration.configureDB(
                conf, "com.mysql.jdbc.Driver",
                "jdbc:mysql://localhost:3306/test",
                "root","admin");
接下来是第二点,输入输出格式,这里要实现一个接口类,具体步骤参考http://blog.csdn.net/u014595019/article/details/53204081,下面给出自己测试用的代码:

public class DBStatic {
	public static class ReStatic implements Writable, DBWritable {
		
	    private String court;
		

		public ReStatic(){}
	 
	     @Override
	     public void write(PreparedStatement statement) throws SQLException {
	         statement.setBytes(1, Bytes.toBytes(this.getCourt()));
	     }
	 
	     @Override
	     public void readFields(ResultSet resultSet) throws SQLException {
	         this.court = resultSet.getString(1);	      
	     }
	     
	     public String getCourt() {
				return court;
			}

		 public void setCourt(String court) {
				this.court = court;
			}
			
	     @Override
	     public void write(DataOutput out) throws IOException {
	         out.writeUTF(this.court);
	     }
	 
	     @Override
	     public void readFields(DataInput in) throws IOException {
	         this.court = in.readUTF();
	     }
 

	 }

}
第三点就是job的初始化

job设置最后给出,看接下来的代码,这里需要注意的是一定要在有连接hbase和mysql的信息之后再初始化job,否则会报错。还有就是只需要初始化一次job信息就好,当初自己就是粗心犯了这么个小错误,调试了好久才把错误找到,切记切记。

接下来连接hbase的信息:

Configuration conf = HBaseConfiguration.create();

其实有上面一句连接hbase就够了,后面在写job时还要再加上一句:

TableMapReduceUtil.initTableMapperJob(Bytes.toBytes(tableName), scan, HbaseTestMapper.class, Text.class,  
                    IntWritable.class, job); 

测试结果

代码放到GitHub上了,见https://github.com/dreamQAQ/hbasetosql

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值