1) 修改hive-site.xml配置文件
<property>
<name>hive.aux.jars.path</name>
<value>file:///usr/local/ae/hive-0.11.0/lib/hive-hbase-handler-0.11.0.jar,file:///usr/local/ae/hive-0.11.0/lib/hbase-0.94.6.1.jar,file:///usr/local/ae/hive-0.11.0/lib/zookeeper-3.4.3.jar</value>
<description>These JAR file are available to all users for all jobs</description>
</property>
告诉hive 需要用到外部的jar包;
2)demo
创建hive表,同时会在hbase中创建对应的表
CREATE TABLE hbase_table_1(key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val") TBLPROPERTIES ("hbase.table.name" = "xyz");cf1 对应hive的column_family, hbase.table.name 对应的是在hbase中对应hive这个表的表名;
INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=98;
从hive表把数据移动到hbase表;
:key 是必须要显示写出来的,:key 即对应是hbase 的row key,后面的都是不同的column family;
3) hive hbase 的map 数据类型的使用
create table hbase_table_3(value map<string,int>, row_key int) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties ("hbase.columns.mapping"="cf:,:key");
insert overwrite table hbase_table_3 select map(bar,foo),foo from pokes;
hbase(main):029:0> scan "hbase_table_3" ROW COLUMN+CELL 1 column=cf:aaaa, timestamp=1404973374295, value=1 2 column=cf:bbbb, timestamp=1404973374295, value=2 98 column=cf:1111, timestamp=1404973374295, value=98 99 column=cf:4444, timestamp=1404973374295, value=99
----------------------------------
hive> select * from hbase_table_3; OK {"aaaa":1} 1 {"bbbb":2} 2 {"1111":98} 98 {"4444":99} 99
------------------------------------------------
在value map<string, int>中,map的key必须是string类型
hive表字段,只有map类型才可以直接匹配hbase表类型cf: 这样的列族的声明,否则要指定hive表字段和hbase列的对应关系;
4) hive 和 hbase表区别
hive表没有唯一键的限制,hbase有唯一键的限制;
hbase put相同row key的记录,会覆盖原来的记录;hive的相同key的数据会被保留下来;