分享知识,分享快乐

0%

采用hive自带的方法生成Hfile,并将上亿大数据量导入HBASE

采用hive自带的方法生成Hfile,并将上亿大数据量导入HBASE

1.引入HBASE自带的jar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@cdh85-100 ~]# sudo -u hdfs hive
hive>
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-annotations-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-client-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-common-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-endpoint-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-examples-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-external-blockcache-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-hadoop2-compat-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-hadoop-compat-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-http-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-it-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-mapreduce-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-metrics-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-metrics-api-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-procedure-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-protocol-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-protocol-shaded-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-replication-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-resource-bundle-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-rest-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-rsgroup-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-server-2.0.0-cdh6.0.1.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-shaded-miscellaneous-2.1.0.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-shaded-netty-2.1.0.jar ;
add jar /opt/cloudera/parcels/CDH/lib/hbase/lib/hbase-shaded-protobuf-2.1.0.jar ;

2.0建Hfile表

1
2
3
4
5
6
7
8
9
create table tmp.fi_pt_card_library(
KEY STRING COMMENT 'HBASE_ROWKEY' ,
sign_id STRING COMMENT 'id自增长',
....
)
STORED AS
INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.hbase.HiveHFileOutputFormat'
TBLPROPERTIES ('hfile.family.path' = '/tmp/fi_pt_card_library/info');

注意:此处的info应该与HBase中的family相同。

生成Hfile文件

1
2
3
4
hive> set mapreduce.job.queuename=bf_yarn_pool.production;

insert overwrite table tmp.fi_pt_card_library
SELECT * from tmp.fi_pt_card_library_0330 order by key

注意: fi_pt_card_library_0330表 不能有重复值, 而且要排序。

这里的第一个字段会默认为Hbase的KEY,但是这里的key的名称可以不为key,其他的也可以。还有数据中不允许存在同样的KEY,如果出现同样的KEY会报错。同时KEY的值应当具有顺序,如果顺序不同也会出错。

3. 将数据导入Hbase中

1
sudo -u hdfs hbase  org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles  -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=2048 /tmp/fi_pt_card_library BAOFOO_FI:fi_pt_card_library

亲测有效。
最终花费了14915.376 seconds 将5亿条HIVE数据迁移到了Hbase中。