如何在hive create table" TBLPROPERTIES"中引用HBase名称空间

时间:2016-06-16 08:01:24

标签: hadoop namespaces hive hbase

我正在尝试使用HBase表(' test_table)创建Hive外部表作为源。 HBase表是在HBase命名空间' test_namespace'下创建的。 在应用程序的其他部分,我使用以下syntx

访问该表

test_namespace:test_table或hbase:// test_namespace:test_table

按照相同的方法,我创建了一个配置单元脚本

CREATE EXTERNAL TABLE IF NOT EXISTS TEST_INDIVIDUAL(
    key    string,
    test   string,
    photo  string,
    location string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES("hbase.columns.mapping"="key,default:test,default:photo,default:location")
TBLPROPERTIES("hbase.table.name" = "test_namespace:test_table");

但是当我执行hive脚本时,我找不到错误表。 如果我试试

hbase://test_namespace:test_table

它会抛出无效的表名错误。

我试图谷歌如何在hive脚本中引用HBase命名空间。但没有运气。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我尝试过同样的问题但效果很好,

以下是步骤序列

甲。在HBase Shell中执行操作

  1. 创建命名空间(即HBase中的数据库/模式)

    create_namespace'krishna'

  2. 检查命名空间的存在

    list_namespace

  3. 在命名空间

    中创建表

    创建'krishna:hivehbase','评级'

  4. 验证命名空间内的表创建

    list_namespace_tables'krishna'

  5. 添加行和列家庭(填充表格)

    把'krishna:hivehbase','row1','rating:userid','user1' 把'krishna:hivehbase','row1','评级:bookid','book1' 把'krishna:hivehbase','row1','评级:评级','1'

    把'krishna:hivehbase','row2','rating:userid','user2' 把'krishna:hivehbase','row2','评级:bookid','book1' 把'krishna:hivehbase','row2','评级:评级','3'

    把'krishna:hivehbase','row3','rating:userid','user2' 把'krishna:hivehbase','row3','评级:bookid','book2' 把'krishna:hivehbase','row3','评级:评级','3'

    把'krishna:hivehbase','row4','rating:userid','user2' 把'krishna:hivehbase','row4','评级:bookid','book4' 把'krishna:hivehbase','row4','评级:评级','1'

  6. 验证表格数据

    扫描'krishna:hivehbase'

  7. B中。在Hive Shell中执行操作

    1. 创建外部表

      CREATE EXTERNAL TABLE hbasehive_table(key string,userid string,bookid string,rating int)STORED BY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'with SERDEPROPERTIES(“hbase.columns.mapping”=“:key,评级:用户ID,评级:bookid,评级:评级“)TBLPROPERTIES(”hbase.table.name“=”krishna:hivehbase“);

    2. 验证外部表

      从hbasehive_table中选择*;