MetaException(message:org.apache.hadoop.hive.serde2.SerDeException Error: hbase.columns.mapping missing for this HBase table.)
时间: 2024-05-20 21:14:29 浏览: 259
这个错误通常出现在使用 Hive 查询 HBase 表时,需要在创建外部表时指定 HBase 列映射信息,具体方法如下:
1. 在创建外部表时使用 STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES(...) 指定 HBase 存储处理程序和序列化属性。
2. 在表定义中指定 HBase 列映射,例如:
CREATE EXTERNAL TABLE hbase_table(key int, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:value")
TBLPROPERTIES("hbase.table.name" = "hbase_table");
其中,hbase.columns.mapping 指定了 HBase 表中列的映射关系,格式为 “column_family:column”。如果不指定映射关系,就会出现你遇到的异常。
相关问题
hbase.columns.mapping,有id和name两个字段,列族是F怎么写
在HBase中,当你使用Hive作为查询工具并想通过`CREATE EXTERNAL TABLE`语句创建一个Hive表来映射HBase表时,`hbase.columns.mapping`属性非常关键,它定义了HBase列族(Column Family)中的列如何映射到Hive表的列上。
如果你有一个名为`F`的列族,其中包含`id`和`name`两个字段,对应的Hive映射语句应该像下面这样写:
```sql
CREATE EXTERNAL TABLE my_hive_table (
id INT,
name STRING
)
PARTITIONED BY (partition_column STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
'hbase.columns.mapping' = 'F:id,F:name', -- 这里指定了列族F下的'id'和'name'分别映射到Hive的'id'和'name'列
'hbase.table.name' = 'my_hbase_table_name', -- HBase表的实际名称
'hbase.column.qualifier' = '' -- 如果你的列族没有限定符,默认值为空
)
LOCATION 'hdfs://path_to_my_hbase_directory';
```
这里的`F:id,F:name`表示HBase列族`F`中的`id`字段将被映射到Hive表的`id`列,`name`字段将被映射到`name`列。
hive操作hbase
Hive可以通过HBase存储Hive表数据,实现Hive表数据的实时查询和更新。以下是将Hive表数据存储到HBase的步骤:
1. 配置Hive和HBase的环境变量。
2. 在Hive中创建外部表,可以使用Hive自带的HBase存储处理插件HBaseStorageHandler:
```
CREATE EXTERNAL TABLE hbase_table(key INT, value STRING)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:col1")
TBLPROPERTIES("hbase.table.name" = "hbase_table");
```
3. 通过HQL语句将Hive表数据导入到HBase表中:
```
INSERT INTO TABLE hbase_table SELECT key, value FROM hive_table;
```
4. 在HBase中查看数据是否已经存储成功。
需要注意的是,Hive和HBase的版本要兼容,不兼容的版本可能会导致存储失败。同时,HBase表的列簇必须在Hive中指定。
阅读全文