zoukankan      html  css  js  c++  java
  • HBase框架基础(四)

    * HBase框架基础(四)

    上一节我们介绍了如何使用HBase搞一些MapReduce小程序,其主要作用呢是可以做一些数据清洗和分析或者导入数据的工作,这一节我们来介绍如何使用HBase与其他框架进行搭配使用。

    * HBase与Hive

    在开始HBase与Hive搭配使用前,我们复习一下这两个框架的特点:

    Hive:

    ** 数据仓库

    ** 用于数据分析,数据清洗等等

    ** 基于MapReduce

    ** 延迟高,离线使用

    HBase:

    ** 面向列存储的非关系型数据库

    ** 存储数据

    ** 基于HDFS中的文件

    ** 低延迟,接入在线业务使用

    HBase与Hive的部署:

    提前工作:

    1、拷贝Hive所需的一些Jar包,使用ln做软连接也是可以的,比如:

    $ export HBASE_HOME=/opt/modules/cdh/hbase-0.98.6-cdh5.3.6/

    $ export HIVE_HOME=/opt/modules/cdh/hive-0.13.1-cdh5.3.6/

    $ ln -s $HBASE_HOME/lib/hbase-common-0.98.6-cdh5.3.6.jar  $HIVE_HOME/lib/hbase-common-0.98.6-cdh5.3.6.jar

    $ ln -s $HBASE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar

    $ ln -s $HBASE_HOME/lib/hbase-client-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-client-0.98.6-cdh5.3.6.jar

    $ ln -s $HBASE_HOME/lib/hbase-protocol-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-protocol-0.98.6-cdh5.3.6.jar

    $ ln -s $HBASE_HOME/lib/hbase-it-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-it-0.98.6-cdh5.3.6.jar

    $ ln -s $HBASE_HOME/lib/htrace-core-2.04.jar $HIVE_HOME/lib/htrace-core-2.04.jar

    $ ln -s $HBASE_HOME/libhbase-hadoop2-compat-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-hadoop2-compat-0.98.6-cdh5.3.6.jar

    $ ln -s $HBASE_HOME/lib/hbase-hadoop-compat-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-hadoop-compat-0.98.6-cdh5.3.6.jar

    $ ln -s $HBASE_HOME/lib/high-scale-lib-1.1.1.jar $HIVE_HOME/lib/high-scale-lib-1.1.1.jar

    2、修改hive-site.xml文件,添加如下内容:

     
     

    案例一:通过建立Hive可以关联的HBase表,使之在操作Hive同时也能操作HBase表,比如数据的导入。

    Step1、在Hive中创建表同时关联HBase

    hive (default)> CREATE TABLE hive_hbase_emp_table(

    empno int,

    ename string,

    job string,

    mgr int,

    hiredate string,

    sal double,

    comm double,

    deptno int)

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

    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno")

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

    完成之后,可以分别进入Hive和HBase查看,都生成了对应的表

    Hive中:

     
     

    HBase中:

     
     

    Step2、想要向hive_hbase_emp_table表载入数据,需要再创建一个管理表作为中转,因为你不能够直接将本地的数据load到刚才的那个表。

    hive (default)> create table emp(

    empno int,

    ename string,

    job string,

    mgr int,

    hiredate string,

    sal double,

    comm double,

    deptno int)

    row format delimited fields terminated by ' ';

    Step3、向emp这个管理表中load数据

    hive> load data local inpath '/home/z/Desktop/emp.txt' into table emp;

    Step4、通过insert命令将emp中的数据导入到hive_hbase_emp_table和hbase_emp_table表中

    hive> insert into table hive_hbase_emp_table select * from emp;

    Step5、测试,查看Hive和HBase对应的表中是否已经成功的同步的插入了数据

    Hive中的hive_hbase_emp_table表:

     
    对应HDFS的文件数据路径:/user/hive/warehouse/hive_hbase_emp_table

    HBase中的hbase_emp_table表:

     
    对应HDFS的文件数据路径:/hbase/data/default/hbase_emp_table

    案例二:比如在HBase中已经存储了某一张表hbase_emp_table,然后在Hive中创建一个外部表来关联HBase中的hbase_emp_table这张表,使之可以借助Hive来分析HBase这张表中的数据。

    Step1、在Hive中创建外部表

    hive> CREATE EXTERNAL TABLE hive_hbase_emp_ex_table(

    empno int,

    ename string,

    job string,

    mgr int,

    hiredate string,

    sal double,

    comm double,

    deptno int)

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

    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno")

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

    Step2、关联后就可以使用Hive函数进行一些分析操作了,在此我们玩个简单的?比如在Hive的这个外部关联表中查询所有数据吧!

    hive> select * from hive_hbase_emp_ex_table;

    如图所示,即成功:

     
     

    * HBase与Sqoop

    我们之前使用Sqoop做了在Hive和Mysql之间的数据传输操作,当然它也可以在HBase和Mysql之间操作,比如,每天都有10万人注册你的网站,你的Mysql数据库每天都有大量的数据注入,那么能不能每天都定时的将Mysql数据库中的数据抽取到HBase呢?当然可以,比如:

    注意:如果对应的数据库和表没有,请查看前文内容,因为本系列教程的内容是连续的。内容如下:

     
     

    Sqoop的sqoop-evn.sh配置如下:

     
     

    执行Sqoop操作:

    $ bin/sqoop import

    --connect jdbc:mysql://z01:3306/db_demo

    --username root

    --password 123456

    --table user

    --columns "id,name,sex"

    --column-family "info"

    --hbase-create-table

    --hbase-row-key "id"

    --hbase-table "hbase_user_sqoop_table"

    --num-mappers 1 

    --split-by id

    执行如图:

     
    后面还有很长的内容,就不截图展示了

    任务完成后查看HBase对应表中的数据如图:

     
    Bingo!

    什么?没有定时?定时任务你懂得,当然要用Oozie(一般不用Crontab),不明白的请参考Oozie的对应章节

    * HBase与Hue

    HBase与Hue整合当然是为了更好的体验,可以使用带有用户界面的操作去管理HBase~

    部署姿势:

    Step1、修改hue.ini配置,如下图:

     
     

     

    Step2、启用HBase的thrift(想要了解thrift是什么请自行百度简单了解下即可)

    $ bin/hbase-daemon.sh start thrift

    Step3、启动Hue进程访问测试

    $ build/env/bin/supervisor

    通过z01:8888登录Hue之后,点击Data Browser中的HBase,如下图:

     
     

    随便点击一个表进去看看?比如点击刚才创建的红框内的表,如图:

     
    Bingo!

    * 总结

    本节主要结合之前的框架知识,对HBase的结合使用进行了一个简单的拓展,希望大家能够理解其中的原理,灵活使用之。


    个人微博:http://weibo.com/seal13

    QQ大数据技术交流群(广告勿入):476966007



    作者:Z尽际
    链接:https://www.jianshu.com/p/7eedea1e620b
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    [NOI Online 提高组]序列
    微积分(下)
    微积分(上)
    [FJOI2018]领导集团问题
    [HNOI2015]亚瑟王
    [THUWC2017]随机二分图
    【模板】K级祖先(长链剖分)
    [CF438E]The Child and Binary Tree
    [洛谷P4841][集训队作业2013]城市规划
    [洛谷P4389]付公主的背包
  • 原文地址:https://www.cnblogs.com/wzlbigdata/p/8277726.html
Copyright © 2011-2022 走看看