hadoop - 如何在 hive create table "TBLPROPERTIES"中引用 HBase 命名空间

标签 hadoop namespaces hive hbase

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

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");

但是当我执行配置单元脚本时,我得到错误表未找到。 如果我尝试

hbase://test_namespace:test_table

它抛出无效的表名错误。

我试图通过谷歌搜索如何在配置单元脚本中引用 HBase 命名空间。但运气不好。

在此先感谢您的帮助!

最佳答案

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

以下是步骤顺序,

一个。在 HBase Shell 中执行操作

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

    create_namespace 'krishna'

  2. 检查命名空间是否存在

    列表命名空间

  3. 在命名空间内创建表

    创建 'krishna:hivehbase', 'ratings'

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

    list_namespace_tables '克里希纳'

  5. 添加行和列族(填充表)

    put 'krishna:hivehbase', 'row1', 'ratings:userid', 'user1' 放 'krishna:hivehbase', 'row1', 'ratings:bookid', 'book1' 放 'krishna:hivehbase', 'row1', 'ratings:rating', '1'

    put 'krishna:hivehbase', 'row2', 'ratings:userid', 'user2' 放 'krishna:hivehbase', 'row2', 'ratings:bookid', 'book1' 放 'krishna:hivehbase', 'row2', 'ratings:rating', '3'

    put 'krishna:hivehbase', 'row3', 'ratings:userid', 'user2' 放 'krishna:hivehbase', 'row3', 'ratings:bookid', 'book2' 放 'krishna:hivehbase', 'row3', 'ratings:rating', '3'

    put 'krishna:hivehbase', 'row4', 'ratings:userid', 'user2' 放 'krishna:hivehbase', 'row4', 'ratings:bookid', 'book4' 放 'krishna:hivehbase', 'row4', 'ratings:rating', '1'

  6. 验证表数据

    扫描'krishna:hivehbase'

B.在 Hive Shell 中执行操作

  1. 创建外部表

    创建外部表 hbasehive_table (key string, userid string,bookid string,rating int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping"= ":key, ratings:userid,ratings:bookid,ratings:rating") TBLPROPERTIES ("hbase.table.name"= "krishna:hivehbase");

  2. 验证外部表

    从 hbasehive_table 中选择 *;

关于hadoop - 如何在 hive create table "TBLPROPERTIES"中引用 HBase 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37853255/

相关文章:

ubuntu - Hadoop 伪分布式模式。连接被拒绝

Laravel - 在中间件之后清空 $request

c++ - 命名空间 + 函数与类上的静态方法

hadoop - sqoop导入多个表

hadoop - 为什么我们必须在hadoop中使用多个节点?

hadoop - HIVE:如何创建一个表,其中包含另一个表中的所有列,除了其中一个?

c++ - 文件特定的命名空间

scala - 使用 SqlContext 连接 Hive 表

apache - Hadoop hive 加载错误

mysql - sqoop 中以下命令面临问题