您好,欢迎访问一九零五行业门户网

Hbase通过 Mapreduce 写入数据到Mysql

我们可能会有一个疑问,hadoop是一种分布式存储和分布式计算的一个开源项目,而mapreduce 也是基于此的一个分布式计算的模型,而基于分布式存储的列存储数据库hbase应该是我们要讨论的话题,为什么会说到mysql 其实hbase 存储的数据时一些量大简单而有规则的
我们可能会有一个疑问,hadoop是一种分布式存储和分布式计算的一个开源项目,而mapreduce 也是基于此的一个分布式计算的模型,而基于分布式存储的列存储数据库hbase应该是我们要讨论的话题,为什么会说到mysql
          其实hbase 存储的数据时一些量大简单而有规则的数据,但关系型数据库也有他的优势,那就是提供了友好的方面我们操作的用户接口,我们可以实现简单的查询。并且数据本身并不大,而我们又需要对此数据进行各种复杂的分析和查询,那关系型数据库则帮我们实现。
          从hbase map出数据如何写入mysql 从网上查估计也能查询到,但是可能不太友好,我做了一个简单的例子,贴出来供大家参考,希望对大家有些帮助。
习惯从main 方法谈起 看代码:
public static void main(string[] args) throws exception {
   configuration conf = hbaseconfiguration.create();
//在此我用到了 旧的api ,因为我从资料上找不出新的api中有支持dboutputformat 的接口或者方法
//希望大家 如果了解这方面的 给我提出意见 我也了解一下新的api中如何实现此功能
  jobconf job = new jobconf(conf,copyhbasedata2mysql.class);
//设定job 输入类型为 tableinputformat.class
job.setinputformat(tableinputformat.class);
//旧的api 没有 设置输入表的地方,如果看过hadoop tableinputformat 的源码 就可以看到下面两个参数 可以设定 输入表 和查询hbase 的columns
  job.set(mapred.input.dir, hbase_table);
  job.set(hbase.mapred.tablecolumns, info:column);//查询column
//下面两个方法是map 的输入的key 和value 类型
  job.setmapoutputkeyclass(immutablebyteswritable.class);
  job.setmapoutputvalueclass(immutablebyteswritable.class);
  //设定 输入类型为 dboutputformat.class
job.setoutputformat(dboutputformat.class);
// 下面是配置 mysql  驱动以及 用户名密码
//此时一定要注意不论是编译还是 打包,都必须把mysql的驱动加入的环境变量中
//此处还要注意的是 192.168.10.10 如果是在本机跑,一定要注意你的mysql 用户是否支持远程访问,不然 会拒绝连接
  dbconfiguration.configuredb(job, com.mysql.jdbc.driver, jdbc:mysql://192.168.10.10/test, username, password);
//下面是 输入表以及相应字段的设定
  string[] fields = {id,username};
  dboutputformat.setoutput(job, user_info, fields);
//设定map和reduce
    job.setmapperclass(mymapper.class);
  job.setreducerclass(myreducer.class);
//run
  jobclient.runjob(job);
 }
其实写到这基本上就把具体的流程全部写出来了,候选的map 和reduce 根据大家相关的业务大家自己组织,但是还有一个重要的概念,此处的
我们的输入 为 :dbwritable 为此类为一个接口,并没有实现,所以我们要使用的时候必须 实现这个接口,去实现自己的 writable类
先不做介绍了。
后续我会把实现dbwritable 的类也贴出来,如果认为有需要的话
贴出来 欢迎大家板砖,本人也是学习没多久,希望大家踊跃提意见,也好提高自己
其它类似信息

推荐信息