`
superlxw1234
  • 浏览: 551274 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:44433
社区版块
存档分类
最新评论

[一起学Hive]之十三-Hive整合HBase,操作HBase表

    博客分类:
  • hive
阅读更多

关键字:Hive整合HBase、Hive操作HBase表

 

十二、Hive整合HBase,操作HBase表

 

HBase是被设计用来做k-v查询的,但有时候,也会遇到基于HBase表的复杂统计,写MR很不效率。Hive考虑到了这点,提供了操作HBase表的接口。

 

关于Hive操作HBase表的原理,请参考我之前的博文:

http://superlxw1234.iteye.com/blog/2008274

 

值得商榷的是,使用Hive操作HBase中的表,只是提供了便捷性,对于性能上,较MapReduce并不会提升太多,请大家酌情使用。

 

下面来看使用方法(基于Hive0.13和HBase0.96):

 

12.1 HBase中的表

 

先在HBase中创建表:

    create 'lxw1234',{NAME => 'f1',VERSIONS => 1},{NAME => 'f2',VERSIONS => 1},
    {NAME => 'f3',VERSIONS => 1}

 

表’lxw1234’有三个列族f1,f2,f3

向HBase表中插入数据:

  
    put 'lxw1234','lxw1234.com','f1:c1','name1'
    put 'lxw1234','lxw1234.com','f1:c2','name2'
    put 'lxw1234','lxw1234.com','f2:c1','age1'
    put 'lxw1234','lxw1234.com','f2:c2','age2'
    put 'lxw1234','lxw1234.com','f3:c1','job1'
    put 'lxw1234','lxw1234.com','f3:c2','job2'
    put 'lxw1234','lxw1234.com','f3:c3','job3'

 完成后数据如下:

    hbase(main):025:0* scan 'lxw1234'
    ROW COLUMN+CELL
    lxw1234.com column=f1:c1, timestamp=1435624625198, value=name1
    lxw1234.com column=f1:c2, timestamp=1435624591717, value=name2
    lxw1234.com column=f2:c1, timestamp=1435624608759, value=age1
    lxw1234.com column=f2:c2, timestamp=1435624635261, value=age2
    lxw1234.com column=f3:c1, timestamp=1435624662282, value=job1
    lxw1234.com column=f3:c2, timestamp=1435624697028, value=job2
    lxw1234.com column=f3:c3, timestamp=1435624697065, value=job3
    1 row(s) in 0.0350 seconds

 

12.2 Hive中创建基于HBase的表

在Hive中使用如下语句建表:

    SET hbase.zookeeper.quorum=zkNode1,zkNode2,zkNode3;
    SET zookeeper.znode.parent=/hbase;
    ADD jar /usr/local/apache-hive-0.13.1-bin/lib/hive-hbase-handler-0.13.1.jar;
     
    CREATE EXTERNAL TABLE lxw1234 (
    rowkey string,
    f1 map<STRING,STRING>,
    f2 map<STRING,STRING>,
    f3 map<STRING,STRING>
    ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:,f2:,f3:")
    TBLPROPERTIES ("hbase.table.name" = "lxw1234");

 

这里使用外部表映射到HBase中的表,这样,在Hive中删除表,并不会删除HBase中的表,否则,就会删除。

另外,除了rowkey,其他三个字段使用Map结构来保存HBase中的每一个列族。

其中,参数解释如下:

  • hbase.zookeeper.quorum:

指定HBase使用的zookeeper集群,默认端口是2181,可以不指定,如果指定,格式为zkNode1:2222,zkNode2:2222,zkNode3:2222

  • zookeeper.znode.parent

指定HBase在zookeeper中使用的根目录

  • hbase.columns.mapping

Hive表和HBase表的字段映射关系,分别为:Hive表中第一个字段映射:key(rowkey),第二个字段映射列族f1,第三个字段映射列族f2,第四个字段映射列族f3

  • hbase.table.name

HBase中表的名字

         也可以直接在Hive中创建表的同时,完成在HBase中创建表

加入之前没有在HBase中创建表lxw1234,那么使用上面的语句在Hive创建表的时候,会同时在HBase中创建。

12.3 Hive中查询HBase表

上面在Hive中创建好表之后,直接查询:

    hive> select * from lxw1234;
    OK
    lxw1234.com {"c1":"name1","c2":"name2"} {"c1":"age1","c2":"age2"} {"c1":"job1","c2":"job2","c3":"job3"}

 

可以看到,Hive中只有一行数据,因为只有一个rowkey,每一个列族的列和值,分别被存储到Map结构中。

12.4 Hive中插入数据到HBase表

可以在Hive表中通过Insert语句,完成对HBase表数据的插入。

比如,执行下面的语句:

    INSERT INTO TABLE lxw1234
    SELECT 'row1' AS rowkey,
    map('c3','name3') AS f1,
    map('c3','age3') AS f2,
    map('c4','job3') AS f3
    FROM DUAL
    limit 1;

 

在HBase中查看数据:

 

    hbase(main):028:0* scan 'lxw1234'
    ROW COLUMN+CELL
    lxw1234.com column=f1:c1, timestamp=1435624625198, value=name1
    lxw1234.com column=f1:c2, timestamp=1435624591717, value=name2
    lxw1234.com column=f2:c1, timestamp=1435624608759, value=age1
    lxw1234.com column=f2:c2, timestamp=1435624635261, value=age2
    lxw1234.com column=f3:c1, timestamp=1435624662282, value=job1
    lxw1234.com column=f3:c2, timestamp=1435624697028, value=job2
    lxw1234.com column=f3:c3, timestamp=1435624697065, value=job3
    row1 column=f1:c3, timestamp=1435625971410, value=name3
    row1 column=f2:c3, timestamp=1435625971410, value=age3
    row1 column=f3:c4, timestamp=1435625971410, value=job3
    2 row(s) in 0.0420 seconds

 

Hive中的外部表lxw1234,就和其他外部表一样,只有一份元数据,真正的数据是在HBase表中,Hive通过hive-hbase-handler来操作HBase中的表。

 

Hive相关文章(持续更新)

一起学Hive系列

—-Hive概述,Hive是什么

—-Hive函数大全-完整版

—-Hive中的数据库(Database)和表(Table)

—-Hive的安装配置

—-Hive的视图和分区

—-Hive的动态分区

—-向Hive表中加载数据

—-使用Hive命令行

—-Hive的查询语句SELECT

—-Hive中Join的原理和机制

—-Hive中Join的类型和用法

—-Hive SQL的优化

Hive分析函数系列

Hive索引

hive优化之——控制hive任务中的map数和reduce数

 

 

2
2
分享到:
评论
1 楼 annmi_cai 2016-03-11  
好好学习,天天向上!

相关推荐

    hive-hbase-handler-1.2.1.jar

    被编译的hive-hbase-handler-1.2.1.jar,用于在Hive中创建关联HBase表的jar,解决创建Hive关联HBase时报FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop....

    hive-hbase-handler-1.2.2.jar

    hive和hbase整合的时候,如果出现不兼容的情况需要手动编译:hive-hbase-hander-1.2.2.jar把这个jar替换掉hive/lib里的那个jar包

    小牛学堂-大数据24期-04-Hadoop Hive Hbase Flume Sqoop-12天适合初学者

    小牛学堂-大数据24期-04-Hadoop Hive Hbase Flume Sqoop-12天适合初学者.txt

    hive-hbase-handler-3.1.1.jar

    HBase2.1.3整合Hive3.1.2,Hive官方的hive-hbase-handler-3.1.1.jar包不好用,自己编译后的,确认好用

    hive-hbase-handler-1.2.2

    Hive-1.2.1与HBase-1.3.1兼容处理的jar包 hive-hbase-handler-1.2.2.jar

    (编译过的)hive-hbase-handler-1.2.1.jar

    hive和hbase的整合所需要的编译后的jar包。 注意:这里的hbase版本为:1.2.1 hive的版本为:1.2.1

    hive0.8.1和hbase0.92.0集成的hive-hbase-handler.Jar包

    hive0.8.1和hbase0.92.0集成的hive-hbase-handler.Jar包,里面包含:hbase-0.92.0.jar、hbase-0.92.0-tests.jar、hive-hbase-handler-0.9.0-SNAPSHOT.jar。经测试没有问题。

    hadoop2.6.3-spark1.5.2-hbase-1.1.2-hive-1.2.1-zookeeper-3.4.6安装指南

    hadoop2.6.3-spark1.5.2-hbase-1.1.2-hive-1.2.1-zookeeper-3.4.6安装指南

    hive和hbase整合

    &lt;value&gt;file:///usr/lib/hive/lib/hive-hbase-handler-0.7.1-cdh3u3.jar,file:///usr/lib/hbase/hbase-0.90.4-cdh3u3.jar,file:///usr/lib/zookeeper/zookeeper-3.3.4-cdh3u3.jar,file:///usr/lib/hbase/lib/guava-...

    apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz

    Apache Phoenix是构建在HBase之上的关系型数据库层,作为内嵌的客户端JDBC驱动用以对HBase中的数据进行低延迟访问。Apache Phoenix会将用户编写的sql查询编译为一系列的scan操作,最终产生通用的JDBC结果集返回给...

    hive0.10.0和hbase0.94.4集成的 hive-hbase-handler-0.10.0.jar包

    hive0.10.0和hbase0.94.4集成的hive-hbase-handler.Jar包,经测试没有问题。

    scala-hive-HBASE-Api.7z

    本压缩包"scala-hive-HBASE-Api.7z"包含了2019年8月至10月间用于工作的相关jar包,主要用于支持Scala、Hive和HBase的集成开发。 首先,让我们来深入了解一下这三个核心概念: 1. **Scala**:Scala是一种多范式的...

    HIVE和HBASE的整合

    HIVE和HBASE的整合 HIVE和HBASE是两个不同的数据处理和存储系统,HIVE是一种数据仓库系统,专门用来存储和处理结构化数据,而HBASE是一种NoSQL数据库,专门用来存储和处理半结构化和非结构化数据。由于HIVE和HBASE...

    hive 整合 hbase

    - 添加HBase处理器JAR包到Hive:`ADD jar /keduox/hive-2.1.1/lib/hive-hbase-handler-2.1.1.jar;` - **创建映射表**:在Hive中创建一个与HBase表相对应的外部表。例如: ```sql CREATE EXTERNAL TABLE h2h( ...

Global site tag (gtag.js) - Google Analytics