【问题标题】:Defining Hive external table on top of HBase existing table在 HBase 现有表之上定义 Hive 外部表
【发布时间】:2016-10-12 08:20:11
【问题描述】:

有一个包含两个列族的空 HBase 表:

create 'emp', 'personal_data', 'professional_data'

现在我正在尝试将一个 Hive 外部表映射到它,它自然会有一些列:

CREATE EXTERNAL TABLE emp(id int, city string, name string, occupation string, salary int) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":id,
                       personal_data:city,
                       personal_data:name,
                       professional_data:occupation,
                       professional_data:salary")
TBLPROPERTIES ("hbase.table.name" = "emp", "hbase.mapred.output.outputtable" = "emp");

现在我得到的错误是:

FAILED:执行错误,返回代码 1 从 org.apache.hadoop.hive.ql.exec.DDLTask。 java.lang.RuntimeException: MetaException(消息:org.apache.hadoop.hive.serde2.SerDeException org.apache.hadoop.hive.hbase.HBaseSerDe:列有 5 个元素,而 hbase.columns.mapping 有 6 个元素(如果隐含,则计算键))

你能帮帮我吗?我是不是做错了什么?

【问题讨论】:

    标签: hive hbase hcatalog


    【解决方案1】:

    在您的映射中,您引用了 id 字段,但您应该引用 HBase key 关键字。如documentation 所述:

    映射条目必须是 :key 或形式 列族名:[列名][#(二进制|字符串)

    只需将:id 替换为:key 即可:

    CREATE EXTERNAL TABLE emp(id int, city string, name string, occupation string, salary int) 
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,
                       personal_data:city,
                       personal_data:name,
                       professional_data:occupation,
                       professional_data:salary")
    TBLPROPERTIES ("hbase.table.name" = "emp", "hbase.mapred.output.outputtable" = "emp");
    

    列映射基于列的顺序,而不是它们的名称。在文档中,段落 Multiple Columns and Families 可以清楚地看到名称并不重要

    CREATE TABLE hbase_table_1(key int, value1 string, value2 int, value3 int) 
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES (
      "hbase.columns.mapping" = ":key,a:b,a:c,d:e"
    )
    

    那么映射就是

    • key -> id
    • a:b -> 值1
    • a:c -> value2
    • d:e -> value3

    【讨论】:

    • 但它会将 Hive id 列映射到 Hbase 键吗?还是我有什么问题?谢谢你的回答:)
    • 是的,我多次重新阅读该文档,这让我非常困惑。非常感谢你!它完美地工作。祝你有美好的一天。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    相关资源
    最近更新 更多