干货总结: Hive 数据导入 HBase
业务场景
Hive离线计算好的数据, 需要同步到HBase供在线业务查询. 思路是用 Hbase 自带的 ImportTsv 工具。
Hive 跑批
建表语句, 要用文本格式, 即 Tsv 格式, 分割符可以自己定义
CREATE TABLE IF NOT EXISTS tableA( rowkey STRING, ... ) PARTITIONED BY(dt STRING) -- format: 2017-06-01 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
跑批语句, 注意设置不要compress,否则 ImportTsv 工具无法识别
SET hive.exec.compress.output=false; INSERT OVERWRITE TABLE tableA PARTITION( tx_date = \"$CALC_DATE\" ) SELECT ..
生成中间的HFile
hbase --config config_dir org.apache.hadoop.hbase.mapreduce.ImportTsv \ -Dmapreduce.job.queuename=queue \ -Dimporttsv.bulk.output=hdfs:///hfile_path \ -Dimporttsv.columns="HBASE_ROW_KEY,column_family:column_name.." \ hbase_namespace:table_name \ hdfs://hive_table_dir
- config_dir 是 hbase 的配置目录, 里面包含 hbase-site.xml
这个步骤ImportTsv 会去读取 hive_table_dir 中的文件,并分析 hbase table 的region 分布, 生成对应region的hfile, 放到 hfile_path中
bulkload
hbase --config config_dir org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \ hdfs:///hfile_path \ hbase_namespace:table_name
将上一步的hfile导入hbase table
总结
- Hive 表必须是带分隔符的文本格式,而且不能压缩(比如启用了mapreduce的output snappy压缩也不行)
- ImportTsv 可以直接一条条插入 hbase,这时 mapper 解析一条, 就插一条, 没有reduce阶段; 相比bulkload, 大批量数据性能不好
- bulkload的优点是快,生成的 hfile 直接注册到 region server, 数据对应用立即可见, 没有wal log, 没有flush;如果配置了 hbase 备集群, 需要同时 bulkload 一份过去 (hbase主备同步基于 wal log);
相关推荐
eternityzzy 2020-07-19
gengwx00 2020-05-09
archive 2020-07-30
成长之路 2020-07-28
taisenki 2020-07-05
tugangkai 2020-07-05
SignalDu 2020-07-05
zlsdmx 2020-07-05
tomson 2020-07-05
tugangkai 2020-07-04
tomson 2020-07-05
Zhangdragonfly 2020-06-28
genshengxiao 2020-06-26
成长之路 2020-06-26
tomson 2020-06-26
蜗牛之窝 2020-06-26