hbase运行jar包_HBase与mapreduce集成

本文介绍了如何在HBase与MapReduce环境中进行数据操作,包括从HBase读取和写入数据,以及数据迁移的场景。在解决运行HBase jar包时遇到的依赖问题上,提出了两种解决方案,并详细展示了使用RowCounter工具统计rowkey以及如何通过MapReduce将特定列族数据导入新表的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6e10c97bb826e9b5c7e4c01c9c5883f0.png

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

常见的模式

1、从hbase读取数据

将hbase的数据作为map的输入

2、将数据写入hbase

将hbase作为reduce输出

3、从hbase读,再写入hbase

场景:数据迁移

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

启动环境

ae9542f0f5c59a1053ba7c5220471c52.png

在HBase安装目录下找到jar包

hbase-server-1.2.1.jar

b65f534cd161f3b3dc9bc8d42d73abb8.png

运行jar包

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

出现问题

8ccba552837a1c5b8a5ea17656a5c841.png

缺少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中。

1e9f2147844744ec432afe6604cd171b.png

所需要的jar包支持

6e66d6efc8707b8c7736835ed654ebb7.png

声明环境变量可以在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`

9028998e3d8b815e16352c40e7c10951.png

配置生效

source /etc/profile

d170b0e1e1321699b09840829512cc10.png

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

这里面的一些内容

CellCounter: 统计有多少cell

completebulkload: 将hfile的文件数据加载

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

export: 将表导出到HDFS

import: Import data written by Export.

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

rowcounter: 统计rowkey

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

b0b429ad6846d57b26bd53989c5f52c2.png

这是目前的表

a2d94c33b466324a3214f2b11d10a364.png

有7行

220d37ddc9136387ba29d73f98ff98ef.png

使用下命令统计rowkey

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

6f60a9f60e89ae947b1ef65eac22d4bc.png

运行成功

733ebea82c08a9d2fd1d8e1872d79e25.png

结果显示出来了

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

ROWS=7

af1bd3049f51836de35d710074a79714.png

我们现在设定一个需求:

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

首先建表,读取的表:

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

c86767c4068987f6489c428963024551.png

写入的表:

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

ae4d98083ce75e502d0f5b0ccf286987.png

插入准备的数据

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'

71f2152560741e299c4a4eb66b9260db.png

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

4c3349220c60b55aceed5b55b3c96adb.png

创建一个类

556ad8bfe96de140d4aaad063d23bebe.png

编写代码

导入的包

4170702edaab1d5176354e04314a9ed9.png

Map方法

e2323d16365ff7edb0a1de9795442ddb.png

Run方法

57b742d4dde7581b2dd70eb1bc46a3f9.png

Main方法

4438cd21eed91239078e4a244f9908ea.png

运行代码

010e4dca944b71b2013e8427d328d8e5.png

查看数据,已经导入了

1b0f9c20b0e432d0a6812ba7a8a96997.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值