zoukankan      html  css  js  c++  java
  • 3.12-3.16 Hbase集成hive、sqoop、hue

    一、Hbase集成hive

    https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration

    1、说明

    Hive与HBase整合在一起,使Hive可以读取HBase中的数据,让Hadoop生态系统中最为常用的两大框架互相结合,使用Hive读取Hbase中的数据。
    我们可以使用HQL语句在HBase表上进行查询、插入操作;甚至是进行Join和Union等复杂查询。
    
    
    整合后的目标:
    (1). 在hive中创建的表能直接创建保存到hbase中。
    
    (2). 往hive中的表插入数据,数据会同步更新到hbase对应的表中。
    
    (3). hbase对应的列簇值变更,也会在Hive中对应的表中变更。
    
    (4). 实现了多列,多列簇的转化:(示例:hive中3列对应hbase中2列簇)
    
    
    
    整合的优缺点:
    优点:
    (1).Hive方便地提供了Hive QL的接口来简化MapReduce的使用,
    (2).操作方便,hive提供了大量系统功能
    
    缺点:
      性能的损失,hive有这样的功能, 他支持通过类似sql语句的语法来操作hbase中的数据, 但是速度慢。
    
    
    
    hive与HBase通信:
    主要是通过hive 的lib目录下的hive-hbase-handler-x.x.x.jar来实现hive和Hbase通信。


    2、准备jar包

    #######hive
    [root@hadoop-senior lib]# cd /opt/modules/hive-0.13.1/lib
    
    [root@hadoop-senior lib]# mv guava-11.0.2.jar /tmp/
    
    
    #######hbase
    [root@hadoop-senior lib]# cd /opt/modules/hbase-0.98.6-hadoop2/lib
    
    [root@hadoop-senior lib]# cp ./guava-12.0.1.jar /opt/modules/hive-0.13.1/lib/
    
    
    #######hbase
    [root@hadoop-senior lib]# ln -s /opt/modules/hbase-0.98.6-hadoop2/lib/hbase-common-0.98.6-hadoop2.jar /opt/modules/hive-0.13.1/lib/hbase-common-0.98.6-hadoop2.jar
    [root@hadoop-senior lib]# ln -s /opt/modules/hbase-0.98.6-hadoop2/lib/hbase-server-0.98.6-hadoop2.jar /opt/modules/hive-0.13.1/lib/hbase-server-0.98.6-hadoop2.jar
    [root@hadoop-senior lib]# ln -s /opt/modules/hbase-0.98.6-hadoop2/lib/hbase-client-0.98.6-hadoop2.jar /opt/modules/hive-0.13.1/lib/hbase-client-0.98.6-hadoop2.jar
    [root@hadoop-senior lib]# ln -s /opt/modules/hbase-0.98.6-hadoop2/lib/hbase-protocol-0.98.6-hadoop2.jar /opt/modules/hive-0.13.1/lib/hbase-protocol-0.98.6-hadoop2.jar
    [root@hadoop-senior lib]# ln -s /opt/modules/hbase-0.98.6-hadoop2/lib/hbase-it-0.98.6-hadoop2.jar /opt/modules/hive-0.13.1/lib/hbase-it-0.98.6-hadoop2.jar
    [root@hadoop-senior lib]# ln -s /opt/modules/hbase-0.98.6-hadoop2/lib/htrace-core-2.04.jar /opt/modules/hive-0.13.1/lib/htrace-core-2.04.jar

    [root@hadoop-senior ~]# ln -s /opt/modules/hbase-0.98.6-hadoop2/lib/hbase-hadoop2-compat-0.98.6-hadoop2.jar /opt/modules/hive-0.13.1/lib/hbase-hadoop2-compat-0.98.6-hadoop2.jar 
    [root@hadoop-senior ~]# ln -s /opt/modules/hbase-0.98.6-hadoop2/lib/hbase-hadoop-compat-0.98.6-hadoop2.jar /opt/modules/hive-0.13.1/lib/hbase-hadoop-compat-0.98.6-hadoop2.jar
    [root@hadoop-senior ~]# ln -s /opt/modules/hbase-0.98.6-hadoop2/lib/high-scale-lib-1.1.1.jar /opt/modules/hive-0.13.1/lib/high-scale-lib-1.1.1.jar


    3、hive-site.xml

    <property>
            <name>hbase.zookeeper.quorum</name>
            <value>hadoop-senior.ibeifeng.com</value>
        </property>


    4、创建管理表测试

    ############
    从Hive中创建HBase表
    CREATE TABLE hbase_table_1(key int, value string)                 //Hive中的表名:hbase_table_1
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'            //指定存储处理器
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")        //声明rowkey,列族,列名
    TBLPROPERTIES ("hbase.table.name" = "xyz");                    //hbase.table.name声明HBase表名,为可选属性,默认与Hive的表名相同
    
    
    ##查看hdfs中的hive目录
    [root@hadoop-senior hadoop-2.5.0]# bin/hdfs dfs -ls /user/hive/warehouse |grep hbase
    drwxr-xr-x   - root supergroup          0 2019-05-28 13:01 /user/hive/warehouse/hbase_table_1
    
    
    ##查看hdfs中的hbase目录
    [root@hadoop-senior hadoop-2.5.0]# bin/hdfs dfs -ls /hbase/data/default |grep xyz
    drwxr-xr-x   - root supergroup          0 2019-05-28 13:01 /hbase/data/default/xyz
    
    
    
    ############
    插入数据
    hive (default)> insert overwrite table hbase_table_1 select empno, ename from emp;
    
    
    ##查询数据,数据是存储在hbase中的;
    hive (default)> select * from hbase_table_1 ;
    OK
    hbase_table_1.key    hbase_table_1.value
    7369    SMITH
    7499    ALLEN
    7521    WARD
    7566    JONES
    7654    MARTIN
    7698    BLAKE
    7782    CLARK
    7788    SCOTT
    7839    KING
    7844    TURNER
    7876    ADAMS
    7900    JAMES
    7902    FORD
    7934    MILLER
    Time taken: 0.105 seconds, Fetched: 14 row(s)
    
    
    hbase(main):001:0> scan 'xyz'
    ROW                                          COLUMN+CELL                                                                                                                    
     7369                                        column=cf1:val, timestamp=1559023958169, value=SMITH                                                                           
     7499                                        column=cf1:val, timestamp=1559023958169, value=ALLEN                                                                           
     7521                                        column=cf1:val, timestamp=1559023958169, value=WARD                                                                            
     7566                                        column=cf1:val, timestamp=1559023958169, value=JONES                                                                           
     7654                                        column=cf1:val, timestamp=1559023958169, value=MARTIN                                                                          
     7698                                        column=cf1:val, timestamp=1559023958169, value=BLAKE                                                                           
     7782                                        column=cf1:val, timestamp=1559023958169, value=CLARK                                                                           
     7788                                        column=cf1:val, timestamp=1559023958169, value=SCOTT                                                                           
     7839                                        column=cf1:val, timestamp=1559023958169, value=KING                                                                            
     7844                                        column=cf1:val, timestamp=1559023958169, value=TURNER                                                                          
     7876                                        column=cf1:val, timestamp=1559023958169, value=ADAMS                                                                           
     7900                                        column=cf1:val, timestamp=1559023958169, value=JAMES                                                                           
     7902                                        column=cf1:val, timestamp=1559023958169, value=FORD                                                                            
     7934                                        column=cf1:val, timestamp=1559023958169, value=MILLER 
    
    
    hbase(main):002:0> flush 'xyz'
    0 row(s) in 0.1400 seconds
    
    
    [root@hadoop-senior hadoop-2.5.0]# bin/hdfs dfs -ls /hbase/data/default/xyz/1c3bcd4eae0bb8cf534025c57a5c7487/cf1
    Found 1 items
    -rw-r--r--   1 root supergroup       1491 2019-05-28 14:20 /hbase/data/default/xyz/1c3bcd4eae0bb8cf534025c57a5c7487/cf1/97471b912fd54447b90f162e7f49c765
    
    
    ##此时是在hive中创建的管理表,如果过将hive中的表删除了,hbase中的表也将被删除;


    5、创建外部表

    现在已经存在一个HBase表,需要对表中数据进行分析,将hbase表映射到hive中;

    ##将user表映射到hive中
    hbase(main):012:0> scan 'user'
    ROW                                          COLUMN+CELL                                                                                                                    
     10002                                       column=info:age, timestamp=1558343570256, value=30                                                                             
     10002                                       column=info:name, timestamp=1558343559457, value=wangwu                                                                        
     10003                                       column=info:age, timestamp=1558577830484, value=35                                                                             
     10003                                       column=info:name, timestamp=1558345826709, value=zhaoliu                                                                       
    2 row(s) in 0.0080 seconds
    
    在hive中创建表:
    CREATE EXTERNAL TABLE hbase_user(id int, name string,age int) 
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age")
    TBLPROPERTIES ("hbase.table.name" = "user");
    
    
    查询:
    hive (default)> select * from hbase_user ;
    OK
    hbase_user.id    hbase_user.name    hbase_user.age
    10002    wangwu    30
    10003    zhaoliu    35
    Time taken: 0.075 seconds, Fetched: 2 row(s)
    
    
    ##此时hive中的表被删除了,hbase中的表不会被删除


    二、使用Sqoop导入数据到HBase表中

    1、说明

    mysql导入hbase可以直接通过sqoop进行;
    
    hbase导出到mysql无法直接进行,需要经过hive的中间作用来完成:
        hbase→hive外部表→hive内部表→sqoop导出→mysql


    2、操作

    借鉴一篇博文:https://blog.csdn.net/thinkpadshi/article/details/77628346

    #############
    ##Sqoop导入hbase
    
    创建mysql表:
    mysql> create table test.smq_to_hbase select id,name,name grade from test.smq_mysql;
    
    mysql> update test.smq_to_hbase set grade = '1';
    
    mysql> Alter table test.smq_to_hbase add primary key(id);
    
    创建HBASE表:
    hbase(main):008:0> create 'smq_hbase','info'
    
    Sqoop导入hbase中:
    root@master bin]# sqoop import --connect jdbc:mysql://192.168.220.20:3306/test --username root --password 123456  \
    --table smq_to_hbase --hbase-table smq_hbase --column-family info --hbase-row-key id
    
    
    #############
    ##Sqoop导出hbase
    Hbase→hive外部表→hive内部表→通过sqoop→mysql
    
    Mysql创建空表:
    mysql> create table test.employee(rowkey int(11),id int(11),name varchar(20),primary key (id));
    
    hbase创建表:
    hbase(main):001:0> create 'employee','info'
    
    hbase(main):002:0> put 'employee',1,'info:id',1
    
    hbase(main):003:0> put 'employee',1,'info:name','peter'
    
    hbase(main):004:0> put 'employee',2,'info:id',2
    
    hbase(main):005:0> put 'employee',2,'info:name','paul'
    
    hive创建外部表:
    CREATE EXTERNAL TABLE test.h_employee (key int,id int,name string)
       
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
       
    WITH SERDEPROPERTIES (
        "hbase.columns.mapping" =
         ":key,info:id, info:name"
       )
       
    TBLPROPERTIES( "hbase.table.name" = "employee",
        "hbase.mapred.output.outputtable" = "employee");
    
    hive创建内部表:
    hive> CREATE TABLE test.employee(key INT,id INT,name STRING);
    
    将hive外部表的数据导入内部表中:
    hive> insert overwrite table test.employee select * from test.h_employee;
    
    sqoop导出hive表至mysql中:
    [root@master bin]# sqoop export -connect jdbc:mysql://192.168.220.20:3306/test -username root -password 123456  
    -tablemployee -export-dir /user/hive/warehouse/test.db/employee --input-fields-terminated-by '01' --input-null-string '\N' --input-null-non-string '\N';


    三、hbase集成hue

    1、配置

    ##hbase 开启Thrift
    [root@hadoop-senior hbase-0.98.6-hadoop2]# bin/hbase-daemon.sh start thrift
    
    [root@hadoop-senior hbase-0.98.6-hadoop2]# netstat -ntlp |grep 9090
    tcp        0      0 :::9090                     :::*                        LISTEN      2429/java
    
    
    
    ##修改hue配置文件:hue.ini  大概在800+行;
    hbase_clusters=(Cluster|hadoop-senior.ibeifeng.com:9090)
    
      
    
    hbase_conf_dir=/opt/modules/hbase-0.98.6-hadoop2/conf
    
    
    
    ##启动hue
    [root@hadoop-senior hue-3.7.0-cdh5.3.6]# su - beifeng
    [beifeng@hadoop-senior hue-3.7.0-cdh5.3.6]$ ./build/env/bin/supervisor


    image

  • 相关阅读:
    Zookeeper zkCli.sh常用命令
    windows 服务
    Zookeeper的下载安装
    Zookeeper 基础知识
    在Java中使用Redis
    Redis 集群(cluster)
    Redis 哨兵(Sentinel)机制
    Redis 主从复制
    Redis 发布/订阅
    Redis 事务
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/10937753.html
Copyright © 2011-2022 走看看