【Hbase】(三) HBase批量导入数据(bulkload)

BulkLoad将大规模数据导入HBase

有个1个T的文件,我要导入Hbase有什么方法?
Java API 用I/O读数据,用Put方式把数据导进去。
还有什么好的方法?我的表已经设计好了?
我????

一、数据准备

rowkey_1,a,12
rowkey_2,b,32
rowkey_3,c,43
rowkey_4,d,42

创建一个表空间和表

创建一个表空间
create_namespace 'mdemo'
创建表,列簇cf
create 'mdemo:bload','cf'

二、上传到HDFS上

[root@yang ~]# hdfs dfs -mkdir /bload
[root@yang ~]# hdfs dfs -put /opt/data/tests.csv /bload

三、通过MR生成Hfile文件

命令格式:

HADOOP_CLASSPATH=[HBase的bin路径]/hbase classpath hadoop jar [HBase的lib路径]/hbase-server-version.jar importtsv -Dimporttsv.bulk.output=<输出文件夹路径> -Dimporttsv.separator=<分割符> -Dimporttsv.columns=<row_key和修饰符映射> <目标表> <数据源路径>

PS:
hbase-server的jar包版本可以去hbase下的lib目录查看,我的是1.2.0CDH版在这里插入图片描述
Dimporttsv.bulk.output中的bulkload_result_1目录在hdfs上不能存在
Dimporttsv.separator是数据的分隔符
Dimporttsv.columns=HBASE_ROW_KEY表示以数据的第一列作为行键(这里行键是rowkey_1、rowkey_2、rowkey_3、rowkey_4),cf:name 表示 列簇:修饰符hdfs://192.168.56.171:8020/bload/tests.csv表示hdfs://主机名:hadoop端口号/文件在hdfs上的路径
可以使用

hdfs getconf -confKey fs.default.name

命令查看你的hdfs地址和端口号
Linux终端命令:

HADOOP_CLASSPATH=`/opt/soft/hbase120/bin/hbase classpath` 
hadoop jar /opt/soft/hbase120/lib/hbase-server-1.2.0-cdh5.14.2.jar 
importtsv -Dimporttsv.bulk.output=hdfs://192.168.56.171:9000/bload/output/bload_1_result 
-Dimporttsv.separator=',' 
-Dimporttsv.columns=HBASE_ROW_KEY,cf:name,cf:number "mdemo:bload" hdfs://192.168.56.171:9000/bload/tests.csv

生成HFile文件
在这里插入图片描述

四、加载到HBase中

HADOOP_CLASSPATH=`/opt/soft/hbase120/bin/hbase classpath` 
hadoop jar /opt/soft/hbase120/lib/hbase-server-1.2.0-cdh5.14.2.jar 
completebulkload hdfs://yang:9000/bload/output/bload_1_result "mdemo:bload"

五、查看数据HBase中数据

在这里插入图片描述

参考博客:https://blog.csdn.net/wjt199866/article/details/103158326?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-1
报错:Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Protocol message
解决:https://blog.csdn.net/a_hui_tai_lang/article/details/81676429

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值