採用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中。

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