1
前言
如果我们离线计算好的hive数据需要同步到hbase中,大家会用什么方法呢?
如果是明细数据,上千万乃至上亿行的数据,导入到hbase中肯定是需要考虑效率问题的
如果是直接使用hbase客户端的API进行数据插入,效率是非常低的
所以我们选择了bulkloader工具进行操作(原理:利用hbase之外的计算引擎将源数据加工成hbase的底层文件格式:Hfile,然后通知hbase导入即可)
测试数据
CREATE TABLE wedw_dw.t_user_order_info( user_id string ,user_name string ,order_id string ,order_amt decimal(16,2))ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'WITH SERDEPROPERTIES ( 'field.delim'=',', 'serialization.format'=',') ;+----------+------------+-----------+------------+--+| user_id | user_name | order_id | order_amt |+----------+------------+-----------+------------+--+| 1 | 小红 | 001 | 100.32 || 2 | 小明 | 002 | 34.76 || 3 | 小花 | 003 | 39.88 || 4 | 小牛 | 004 | 22.22 || 5 | 小刘 | 005 | 98765.34 |+----------+------------+-----------+------------+--+# /data/hive/warehouse/wedw/dw/t_user_order_info/
2
利用hbasse自带程序导入
# hbase建表
hbase(main):009:0* create 'user_order_info','user_info','order_info'
# 执行hbase自带的importtsv程序(mapreduce程序),将原始文件转成hfile
/usr/local/hadoop-current/bin/yarn jar \/usr/local/hbase-current/lib/hbase-server-1.2.0-cdh5.8.2.jar \importtsv -Dimporttsv.columns=HBASE_ROW_KEY,user_info:user_name,order_info:order_id,order_info:order