如何将配置单元表映射到HBase表?

如何将配置单元表映射到HBase表?,hbase,hiveql,Hbase,Hiveql,我创建了如下所示的HBase表: 创建“nancy”,“cf” 并在配置单元中创建了一个表,如下所示: 创建外部表(id int,名称字符串) 由“org.apache.hadoop.hive.hbase.HBaseStorageHandler”存储 使用serdeProperty(“hbase.columns.mapping”=”:key,cf:name) TBLProperty(“hbase.table.name”=“nancy”) 我是在映射它吗?“hbase.columns.mappin

我创建了如下所示的HBase表:

创建“nancy”,“cf”

并在配置单元中创建了一个表,如下所示:

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

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

使用serdeProperty(“hbase.columns.mapping”=”:key,cf:name)

TBLProperty(“hbase.table.name”=“nancy”)

我是在映射它吗?“hbase.columns.mapping”中的键表示什么


有人能解释一下这个映射吗?

你们有什么具体问题吗?我觉得这个查询还可以

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

  • 表键(使用:键作为选择器)
  • 列族(cf:)(配置单元中的映射字段
  • 纵队
回应您的评论:

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

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

您有两种选择可以将配置单元表映射到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都可以管理的表(例如删除)

    TBLProperty(“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");
    
  • 这两种方式都可以通过配置单元sql插入:

        insert into  hbase_table_1 select  1, "name1" ;
        insert into  hbase_table_2 select  2, "name2" ;
    
    hbase(主):011:0>扫描“nancy”

    行-列+单元格
    1列=cf:name, 时间戳=1491979916489,值=name1
    2列=cf:name, 时间戳=1491979928355,值=name2
    0.3250秒内2行


    现在,我尝试将配置单元表映射到现有的HBase表。使用SerdeProperty(“HBase.columns.mapping”=“:key,cf:name”)TBLProperty(“HBase.table.name”=“nancy”)创建由“org.apache.hadoop.hive.HBase.HBase.HBaseStorageHandler”存储的外部表HBase\u表2(key int,name字符串);它没有显示任何错误,但是,当我执行select*时,HBase表中的数据没有显示。哪个表?HBase?HBase(主):001:0>描述“nancy”描述启用{NAME=>“nancy”,FAMILIES=>[{NAME=>'cf',BLOOM true FILTER=>'NONE',REPLICATION_SCOPE=>'0',VERSION S=>'3',COMPRESSION=>'NONE',MIN_VERSIONS=>'0',TTL=>'2147483647',BLOCKSIZE=>'65536',IN_ME MORY=>'false',BLOCKCACHE=>'true'}1行在1.0500秒内,我复制了您的命令,它在我的计算机上运行正常。请参阅编辑后的答案。我使用了put命令。我可以在配置单元中创建表,但表中没有记录。在HBase表中有记录。put也可以正常运行。您可以通过配置单元插入数据吗?在Hive.log中有什么有趣的内容吗?请注意您不能使用sparksql来操作此插入sql,否则您将得到错误:原因:java.lang.ClassCastException:org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat不能强制转换为org.apache.hadoop.hive.ql.io.HiveOutputFormat