5

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

创建“南希”,“cf”

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

创建外部表 nancy(id int,名称字符串)

由“org.apache.hadoop.hive.hbase.HBaseStorageHandler”存储

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

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

我映射它写吗?“hbase.columns.mapping”中的 Key 是什么意思?

谁能解释这个映射?

4

3 回答 3

5

您是否面临任何具体问题?查询对我来说看起来不错。

key表示您正在使用该字段作为表键。请记住,hive 表中的每个字段都可以映射到其中之一:

  • 表键(使用 :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
于 2013-08-01T08:15:47.200 回答
1

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

于 2013-11-14T14:56:23.340 回答
0

您有两种选择将 hive 表映射到 hbase 表:

  1. 创建一个 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");

  2. 创建一个由 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> 扫描“南希”

ROW COLUMN+CELL
1 column=cf:name, timestamp=1491979916489, value=name1
2 column=cf:name, timestamp=1491979928355, value=name2
0.3250 秒内 2 行

于 2017-04-12T06:45:21.973 回答