当前位置:   article > 正文

HBase和Hive集成_managed non-native hive table

managed non-native hive table

一、准备

  • HBase和Hive不兼容,所以要重新编译hive-HBase-handler-1.2.2.jar
  • 将操作HBase的jar包拷到Hive下,或者使用软连接
  1. ln -s $HBASE_HOME/lib/HBase-common-1.3.1.jar $HIVE_HOME/lib/HBase-common-1.3.1.jar
  2. ln -s $HBASE_HOME/lib/HBase-server-1.3.1.jar $HIVE_HOME/lib/HBase-server-1.3.1.jar
  3. ln -s $HBASE_HOME/lib/HBase-client-1.3.1.jar $HIVE_HOME/lib/HBase-client-1.3.1.jar
  4. ln -s $HBASE_HOME/lib/HBase-protocol-1.3.1.jar $HIVE_HOME/lib/HBase-protocol-1.3.1.jar
  5. ln -s $HBASE_HOME/lib/HBase-it-1.3.1.jar $HIVE_HOME/lib/HBase-it-1.3.1.jar
  6. ln -s $HBASE_HOME/lib/htrace-core-3.1.0-incubating.jar $HIVE_HOME/lib/htrace-core-3.1.0-incubating.jar
  7. ln -s $HBASE_HOME/lib/HBase-hadoop2-compat-1.3.1.jar $HIVE_HOME/lib/HBase-hadoop2-compat-1.3.1.jar
  8. ln -s $HBASE_HOME/lib/HBase-hadoop-compat-1.3.1.jar $HIVE_HOME/lib/HBase-hadoop-compat-1.3.1.ja
  • 修改hive-site.xml,添加下面配置
  1. <property>
  2. <name>hive.zookeeper.quorum</name>
  3. <value>启动zookeeper的主机</value>
  4. <description>The list of ZooKeeper servers to talk to. This is only needed for read/write locks.</description>
  5. </property>
  6. <property>
  7. <name>hive.zookeeper.client.port</name>
  8. <value>2181</value>
  9. <description>The port of ZooKeeper servers to talk to. This is only needed for read/write locks.</description>
  10. </property>

二、操作

2.1 情形一

  • 数据已经在hbase中,只需要在hive建表,在hive中建表,这个表需要和hbase中的数据进行映射; 只能创建external non-native table,查询即可
  • 例如:
  1. create external table hbase_t3(
  2. id int,
  3. age int,
  4. gender string,
  5. name string
  6. )
  7. STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
  8. WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:age,info:gender,info:name")
  9. TBLPROPERTIES ("hbase.table.name" = "t3");

2.2 情形二

  • 数据还尚未插入到hbase,可以在hive中建表,建表后,在hive中执行数据的导入将数据导入到hbase,再分析。 表必须是managed non-native table。
  1. CREATE TABLE `hbase_emp`(
  2. `empno` int,
  3. `ename` string,
  4. `job` string,
  5. `mgr` int,
  6. `hiredate` string,
  7. `sal` double,
  8. `comm` double,
  9. `deptno` int)
  10. STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
  11. WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,
  12. info:hiredate,info:sal,info:comm,info:deptno")
  13. TBLPROPERTIES ("hbase.table.name" = "emp");
  • 注意
    • 替换hive-hbase-handler.jar
    • 使用insert向表中导入数据

三、注意事项

  • 在建表时,hive中的表字段的类型要和hbase中表列的类型一致,以避免类型转换失败造成数据丢失
  • row format 的作用是指定表在读取数据时,使用什么分隔符来切割数据,只有正确的分隔符,才能正确切分字段

四、理论

  • Storage Handlers
    • Storage Handlers是一个扩展模块,帮助hive分析不在hdfs存储的数据,例如数据存储在hbase上,可以使用hive提供的对hbase的Storage Handlers,来读写hbase中的数据。
    • native table: 本地表,hive无需通过Storage Handlers就能访问的表。
    • non-native table : hive必须通过Storage Handlers才能访问的表。
  • 创建native表:
    • file_format: ORC|TEXTFILE|SEQUNCEFILE|PARQUET,都是hive中支持的文件格式,由hive负责数据的读写
[ROW FORMAT row_format] [STORED AS file_format]
  • 创建non-native
    • 数据在外部存储,hive通过Storage Handlers来读写数据
STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
  • SerDe
    • 序列化器和反序列化器,普通的文件数据,以及在建表时,如果不指定serde,默认使用LazySimpleSerDe
    • 表中的数据是什么样的格式,就必须使用什么样的SerDe
      • 纯文本:row format delimited ,默认使用LazySimpleSerDe
      • JSON格式:使用JsonSerde
      • ORC:使用读取ORC的SerDe
      • Paquet:  使用读取PaquetSerDe
    • 例如: 数据中全部是JSON格式
  1. {"name":"songsong","friends":["bingbing","lili"]}
  2. {"name":"songsong1","friends": ["bingbing1" , "lili1"]}
  1. create table testSerde2(
  2. name string,
  3. friends array<string>
  4. )
  5. ROW FORMAT SERDE
  6. 'org.apache.hive.hcatalog.data.JsonSerDe'
  7. STORED AS TEXTFILE;

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/999485?site
推荐阅读
相关标签
  

闽ICP备14008679号