通过Hive自带的jar包生成Hbase的Hfile

1. hive建表

set hive.execution.engine=mr;
set hfile.compression=gz;
add jar hive-hbase-handler-version.jar;
 
create table my_hbase_table(key string, cf_0_c0 string, cf_0_c1 string, ...)
stored as
INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.hbase.HiveHFileOutputFormat'
TBLPROPERTIES ('hfile.family.path' = '/tmp/my_hbase_table/cf_0');

cf_0_c0 是hbase表里修饰符(qualifier), 也就是在hbase里会是 cf_0:cf_0_c0

貌似只能指定一个列族

2. 生成数据

add jar 所有hivelib里的hbasejar;
insert overwrite table my_hbase_table select ... # 直接insert就可以了

生成的文件位于 hdfs:///tmp/my_hbase_table/cf_0

3. 加载数据到hbase

HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` # 引用hbasejar
#hbase-site.xml放入hadoop配置文件目录, 或者 [-c /path/to/hbase/config/hbase-site.xml]来指定hbase集群
${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/hbase-server-VERSION.jar completebulkload  [-c /path/to/hbase/config/hbase-site.xml]  

注意: 里面不指定列族, 也就是 /tmp/my_hbase_table

https://cwiki.apache.org/confluence/display/Hive/HBaseBulkLoad

hive的官方文档上貌似是拷到本地再上传到hbase集群, 而且也没用到列族的文件夹

而且按照上面的方法, 一直报错找不到文件, 可能是这个文档版本比较老了, 里面说的hbase的jar包都是hbase-VERSION.jar(hbase官方文档是${HBASE_HOME}/hbase-server-VERSION.jar)

你可能感兴趣的:(hive,Hive,Hbase)