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

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

1.0引入Hbase自带的jar

由于采用CDH6.1的版本,hive直接使用Hbase方法会出现异常,hive采用hbase的方法,故需要将对应Hbase中的数据引用进来。
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-annotations-2.1.0-cdh6.3.1.jar                      ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-client-2.1.0-cdh6.3.1.jar                           ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-common-2.1.0-cdh6.3.1.jar                           ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-endpoint-2.1.0-cdh6.3.1.jar                         ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-examples-2.1.0-cdh6.3.1.jar                         ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-external-blockcache-2.1.0-cdh6.3.1.jar              ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-hadoop2-compat-2.1.0-cdh6.3.1.jar                   ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-hadoop-compat-2.1.0-cdh6.3.1.jar                    ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-http-2.1.0-cdh6.3.1.jar                             ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-it-2.1.0-cdh6.3.1.jar                               ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-mapreduce-2.1.0-cdh6.3.1.jar                        ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-metrics-2.1.0-cdh6.3.1.jar                          ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-metrics-api-2.1.0-cdh6.3.1.jar                      ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-procedure-2.1.0-cdh6.3.1.jar                        ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-protocol-2.1.0-cdh6.3.1.jar                         ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-protocol-shaded-2.1.0-cdh6.3.1.jar                  ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-replication-2.1.0-cdh6.3.1.jar                      ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-resource-bundle-2.1.0-cdh6.3.1.jar                  ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-rest-2.1.0-cdh6.3.1.jar                             ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-rsgroup-2.1.0-cdh6.3.1.jar                          ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-server-2.1.0-cdh6.3.1.jar                           ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-shaded-miscellaneous-2.2.1.jar                      ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-shaded-netty-2.2.1.jar                              ;
add jar /opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hbase/lib/hbase-shaded-protobuf-2.2.1.jar                           ;

2.0建Hfile表

  我们采用HIVE指定文件存放格式的基本方法,将数据直接插入HIVE表中。HIVE 建表语句为:
create table tmp.ODS_PRODC_CONTRACT_STATE_HFILE(
 KEY STRING COMMENT 'HBASE_ROWKEY'
,iid STRING COMMENT '主键'
,pid STRING COMMENT '本次包ID'
,fid STRING COMMENT '本次文件ID'
,upload_date STRING COMMENT '批次日期'
,create_time STRING COMMENT '记录生成时间'
......
)
STORED AS
INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.hbase.HiveHFileOutputFormat'
TBLPROPERTIES ('hfile.family.path' = '/user/hive/warehouse/ods.db/hive-hbase/ODS_PRODC_CONTRACT_STATE_HFILE2/record');

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

insert overwrite  table tmp.ODS_PRODC_CONTRACT_STATE_HFILE
SELECT key
  ,iid
  ,pid
  ,fid
  ,upload_date
  ,create_time
......
FROM tmp.ods_prodc_contract_state10w order by  key
;
 插入相关数据之后可以在对应的HDFS中查看相关文件是否存在。
 直接查询该表会发现没有相关数据。这里的第一个字段会默认为Hbase的KEY,但是这里的key的名称可以不为key,其他的也可以。还有数据中不允许存在同样的KEY,如果出现同样的KEY会报错。同时KEY的值应当具有顺序,如果顺序不同也会出错。

3.0将数据导入Hbase中

hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /user/hive/warehouse/ods.db/hive-hbase/ODS_PRODC_CONTRACT_STATE_HFILE ODS_PRODC_CONTRACT_STATE_HIVE
 注意这里的路径应当去掉列族,也就是去掉record。否则会出现无法找到有效列族,导致数据无法录入。
  录入数据:

在这里插入图片描述
查看数据量
在这里插入图片描述
注意:执行加载的指令后,原来HFILE会被转移,再次LOAD会发现没有对应文件。
在这里插入图片描述
亲测有效。
最终花费了半天的时间将77亿条HIVE数据迁移到了Hbase中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章