使用impala/hive查询hbase数据

之前做过hadoop的测试,测试了hive/impalahbase数据的查询,这里以hive为例,impala查询hbase数据也类似

 

hbase访问方式

Native JAVA  API

最常规的高效访问方式

Hbase Shell

Hbase的命令行供,以JRuby接口,最简单接入,适合HBase管理

Thrift Gateway

利用Thrift序列号技术,支持C++/PHP/Python等多种语言,适合其他异构系统在线访问Hbase数据

REST Gateway

支持REST风格的HTTP API访问 HBase,无语言限制

MapReduce

直接使用MapReduce作业处理Hbase数据,使用Pig/Hive处理HBase数据

 这里,hive查询hbase数据就是通过MapReduce访问方式。


  hive查询hbase数据

  1、创建Hbase表和插入记录

    $ hbase shell

    hbase(main):001:0> create 'test','cf'

    hbase(main):002:0> put 'test','row1','cf:a','value1a'

    hbase(main):003:0> put 'test','row1','cf:b','value1b'

    hbase(main):004:0> put 'test','row2','cf:a','value2a'

   hbase(main):005:0> put 'test','row2','cf:b','value2b'

 

  2、创建Hive外部表

    $ hive

    hive> CREATE EXTERNAL TABLE hbase_test( key string, a string, b string) 

        > ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'

        > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

        > WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:a,cf:b") 

        > TBLPROPERTIES("hbase.table.name" = "test");

    OK

   Time taken: 0.201 seconds

 

  3Hive下查询hbase表数据

    hive> select * from hbase_test;

    OK

    row1 value1a value1b

    row2 value2a value2b

    Time taken: 0.219 seconds, Fetched: 2 row(s)

 

 hive无法查询hbase原因

   1hdfs权限问题

     当前用户在hive下要有权值执行MapReduce操作,最简单的检查方式是执行“select * from test where 1;”这种带where子句查询。

     权限不足会报这个错误:

       Permission denied: user=root, access=READ, inode="/user"

     解决办法:

       sudo -u hdfs hadoop fs -chmod -R 777 /user

 

  2、扩展表字段问题

    hive表字段要和hbase列记录字段要对应,支持stringint等类型,hive会做格式转换


参考:http://blog.csdn.net/mycwq/article/details/39518897

你可能感兴趣的:(hadoop/hbase)