hbase 到 hive 集成失败

Posted

技术标签:

【中文标题】hbase 到 hive 集成失败【英文标题】:hbase to hive integration failure 【发布时间】:2019-02-20 10:15:43 【问题描述】:

我在“hbase”表中有两个值 id 和 name 的行、列族 h1 “hbase_sample”。 我想用 id 和 name 列在 hive 中创建外部表,我不 想写行或关键字段。

hive> create external table sample (id string,name string)
    > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    > with serdeproperties ("hbase.columns.mapping"=":key,h1:id,h1:name")
    > tblproperties("hbase.table.name"="sample_hbase");

FAILED: Execution Error, return code 1 from 
org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: 
MetaException(message:org.apache.hadoop.hive.serde2.SerDeException 
org.apache.hadoop.hive.hbase.HBaseSerDe: columns has 2 elements while 
hbase.columns.mapping has 3 elements (counting the key if implicit))

【问题讨论】:

【参考方案1】:

通过查看错误消息,HBase 似乎有三列,如 rowid、id 和 name。当您创建具有两列即 id 和 name 的配置单元表时。 创建包含所有三列的 Hive 表并将其命名为 table_name_temp 表。一旦临时表在那里,从 hive 中的临时表创建两个列表,然后删除临时表。看看这个解决方案是否适合你。

【讨论】:

这行得通,但我不想在 hive 表中写入 key(rowid) 列,因为它有一些 ascii 值,导致 hive 表数据格式不正确。所以我想跳过第一列。 您可以将具有三列的原始表作为临时表,并从临时表中创建具有选定两列的新表并删除临时表。 但是在加载原始表格时,由于 ascii 值,它没有以正确的格式加载。这就是问题所在。 Row id 是哈希值,这不是问题,问题是您正在尝试在另一个两列表中修复三列表,这是问题,请参阅错误消息,错误就是那个。跨度> 这里的主要问题是从 hbase 文件中读取 ascii 字符

以上是关于hbase 到 hive 集成失败的主要内容,如果未能解决你的问题,请参考以下文章

Hive HBase Integration 集成

HBase与Hive的集成操作

HBase与Hive的集成操作

图片保存到hbase失败

HBase与Hive集成

HBase实践 —— hive-hbase交互集成实践总结