hive建立内部表映射hbase_关于hiveql:如何将Hive表与HBase表映射?

本文介绍了如何在Hive中创建内部表和外部表来映射HBase表,详细讨论了`hbase.columns.mapping`的含义,并提供了创建和查询的示例。在映射过程中,作者遇到并解决了关于列族名空格的问题,强调了正确配置映射的重要性。
摘要由CSDN通过智能技术生成

我创建了一个HBase表,如下所示:

create 'nancy', 'cf'

并在Hive中创建了一个表格,如下所示:

create external table nancy( id int, name string)

stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" =":key, cf:name")

TBLPROPERTIES("hbase.table.name"="nancy");

我在映射它写吗?" hbase.columns.mapping"中的键表示什么?

谁能解释这个映射?

您是否遇到任何特定问题?查询对我来说看起来不错。

键表示您正在将该字段用作表键。请记住,配置单元表中的每个字段都可以映射到以下字段之一:

表键(使用:key作为选择器)

列族(cf:)(Hive中的MAP字段

回应您的意见:

hive> CREATE EXTERNAL TABLE hbase_table_2(key int, name string)

> STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

> WITH SERDEPROPERTIES ("hbase.columns.mapping" =":key,cf:name")

> TBLPROPERTIES("hbase.table.name" ="nancy");

OK

Time taken: 5.106 seconds

hive> select * from hbase_table_2;

OK

Time taken: 0.077 seconds

hive> INSERT OVERWRITE TABLE hbase_table_2 SELECT * FROM demo WHERE id=1;

Total MapReduce jobs = 1

Launching Job 1 out of 1

Number of reduce tasks is set to 0 since there's no reduce operator

Starting Job = job_201308011237_0003, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid=job_201308011237_0003

Kill Command = /Users/miqbal1/hadoop-eco/hadoop-1.1.2/libexec/../bin/hadoop job  -kill job_201308011237_0003

Hadoop job information for Stage-0: number of mappers: 1; number of reducers: 0

2013-08-01 16:29:21,832 Stage-0 map = 0%,  reduce = 0%

2013-08-01 16:29:23,843 Stage-0 map = 100%,  reduce = 0%

2013-08-01 16:29:24,849 Stage-0 map = 100%,  reduce = 100%

Ended Job = job_201308011237_0003

1 Rows loaded to hbase_table_2

MapReduce Jobs Launched:

Job 0: Map: 1   HDFS Read: 256 HDFS Write: 0 SUCCESS

Total MapReduce CPU Time Spent: 0 msec

OK

Time taken: 8.392 seconds

hive>

这是我的HBase表:

hbase(main):017:0> scan 'nancy'

ROW                                      COLUMN+CELL

1                                       column=cf:name, timestamp=1375354762803, value=tariq

1 row(s) in 0.0300 seconds

现在,我尝试将配置单元表映射到现有的HBase表。创建带有SERDEPROPERTIES(" hbase.columns.mapping" =":key,cf:name")的org.apache.hadoop.hive.hbase.HBaseStorageHandler存储的外部表hbase_table_2(键int,名称字符串)TBLPROPERTIES(" hbase.table .name" =" nancy");它没有显示任何错误,但是当我执行select *时,HBase表中的数据没有显示。

哪张桌子? Hbase? hbase(main):001:0>描述nancy描述已启用{NAME => nancy,FAMILIES => [{NAME => cf,BLOOM true FILTER => NONE,REPLICATION_SCOPE => 0,VERSION S => 3,压缩=> NONE,MIN_VERSIONS => 0,TTL => 2147483647,BLOCKSIZE => 65536,IN_ME MORY => false,BLOCKCACHE => true}]} 1行(在1.0500秒内)

我复制了您的命令,它在我的机器上运行正常。请参阅编辑后的答案。

我使用put命令..我可以在Hive中创建表,但是表中没有记录。在HBase表中有记录。

放好也可以。您是否可以通过Hive插入数据?hive.log中有什么有趣的东西吗?

在HBase表中,以下是我放置数据的方式。 hbase(main):001:0>扫描nancy ROW COLUMN + CELL row1 column = cf:a,时间戳= 1375338887793,value = nancy row2 column = cf:a,timestamp = 1375340617269,value = mary row3 column = cf:a, timestamp = 1375340626864,value = maria row4 column = cf:a,timestamp = 1375340636988,value = sana这是对的吗?

嘿,我知道了..它奏效了...我将第1行更改为1 ..现在,我可以在Hive中显示HBase的数据了。

很高兴得知您正在使用它。但我想知道为什么您需要更改行键。

问题是映射":key, cf:name"的列中的空格字符。 Hive寻找一个名为" cf"而不是" cf"的列族。因为Tariq的响应(":key,cf:name")中没有空格,所以它可以正常工作。

您有两个选择将hive表与hbase表映射:

创建一个hive和hbase都可以管理的表(例如delete)

CREATE TABLE hbase_table_1(key int, name string)

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" =":key,cf:name")

TBLPROPERTIES(" hbase.table.name" =" nancy");

创建一个由hbase管理的外部表

CREATE EXTERNAL TABLE hbase_table_2(key int, name string) STORED BY

'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" =":key,cf:name")

TBLPROPERTIES("hbase.table.name" ="nancy");

两种方式都可以通过hive sql插入:

insert into  hbase_table_1 select  1,"name1" ;

insert into  hbase_table_2 select  2,"name2" ;

hbase(main):011:0> scan 'nancy'

ROW COLUMN+CELL

1 column=cf:name,

timestamp=1491979916489, value=name1

2 column=cf:name,

timestamp=1491979928355, value=name2

2 row(s) in 0.3250 seconds

请注意,您不能使用sparksql对该插入sql进行运算,否则会出现错误:原因:java.lang.ClassCastException:org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat无法转换为org.apache.hadoop.hive .ql.io.HiveOutputFormat

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值