ITPub博客

首页 > 大数据 > > HBase与mapreduce集成

HBase与mapreduce集成

作者:浪花小雨滴 时间:2020-05-12 15:41:16 0 删除 编辑

在公司中,大多数都是hbase和mapreduce共同进行业务操作,hbase多数都是读写操作,hbase和hadoop在内部已经封装好了,我们要做的就是调用。

常见的模式

1、从hbase读取数据

将hbase的数据作为map的输入

2、将数据写入hbase

将hbase作为reduce输出

3、从hbase读,再写入hbase

场景:数据迁移

比如有张表,有20列table01(20col),我需要将其中的10列给 table02(table01.10col)

启动环境



在HBase安装目录下找到jar包

hbase-server-1.2.1.jar



运行jar包

/opt/bigdata/hadoop-2.7.3/bin/yarn jar hbase-server-1.2.1.jar

出现问题



缺少hbase相关的jar包,因为命令是hadoop命令去运行hbase的jar包。

解决方案有两个

  1. 将所有的hbase的jar包放到Hadoop运行环境变量中,

配置环境变量

HBASE_HOME、HADOOOP_HOME、HADOOP_CLASSPATH

其中HADOOP_CLASSPATH默认加载的是share/hadoop下的所有jar包的依赖,这种方式,可能会产生jar包冲突的情况

2、将Hadoop需要的hbase的jar包放到Hadoop运行环境变量中

运行bin/hbase mapredcp查看jar包,cp不是copy的意思,是classpath的意思,包含了hbase的jar包地址,需要将这些添加到classpath中。



所需要的jar包支持



声明环境变量可以在hadoop-env.sh中(需要重启),也可以永久生成到/etc/profile

我们选择/etc/profile

添加以下内容

export HBASE_HOME=/opt/bigdata/hbase-1.2.1

export

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:`$HBASE_HOME/bin/hbase mapredcp`



配置生效

source /etc/profile



再执行之前的命令,就不会报错了

这里面的一些内容

CellCounter: 统计有多少cell

completebulkload: 将hfile的文件数据加载

copytable: 从一个集群中拷贝到另一个集群中

export: 将表导出到HDFS

import: Import data written by Export.

importtsv: 导入一个tsv的文件数据

rowcounter: 统计rowkey

verifyrep:比较两个不同集群中的表的数据



这是目前的表



有7行



使用下命令统计rowkey

/opt/bigdata/hadoop-2.7.3/bin/yarn jar hbase-server-1.2.1.jar rowcounter tt



运行成功



结果显示出来了

org.apache.hadoop.hbase.mapreduce.RowCounter$RowCounterMapper$Counters

ROWS=7



我们现在设定一个需求:

将所有info列簇中的所有name这列导入到另一张表中去

首先建表,读取的表:

create 'stu_info','info','degree','work'



写入的表:

create 'stu_info_out',{NAME =>'info'}



插入准备的数据

put 'stu_info','10001','degree:xueli','benke'

put 'stu_info','10001','info:age','18'

put 'stu_info','10001','info:sex','male'

put 'stu_info','10001','info:name','tom'

put 'stu_info','10001','work:job','bigdata'

put 'stu_info','10002','degree:xueli','gaozhong'

put 'stu_info','10002','info:age','22'

put 'stu_info','10002','info:sex','female'

put 'stu_info','10002','info:name','jack'

put 'stu_info','10003','info:age','22'

put 'stu_info','10003','info:name','leo'

put 'stu_info','10004','info:age','18'

put 'stu_info','10004','info:name','peter'

put 'stu_info','10005','info:age','19'

put 'stu_info','10005','info:name','jim'

put 'stu_info','10006','info:age','20'

put 'stu_info','10006','info:name','zhangsan'



查看下数据是不是插入成功了



创建一个类



编写代码

导入的包



Map方法



Run方法



Main方法



运行代码



查看数据,已经导入了


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3144544/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39941