美文网首页
Hbase学习笔记(七) Hbase与Hive的整合

Hbase学习笔记(七) Hbase与Hive的整合

作者: 做个合格的大厂程序员 | 来源:发表于2020-08-12 15:02 被阅读0次

    Hive和Hbase的区别

    Hive:

    1. 数据仓库

    ​ Hive的本质其实就相当于将HDFS中已经存储的文件在Mysql中做了一个双射关系,以方便使用HQL去管理查询

    2.用于数据分析、清洗

    ​ Hive适用于离线的数据分析和清洗,延迟较高

    3. 基于HDFS,MapReduce

    ​ Hive存储的数据依旧在DataNode上,编写的HQL语句终将是转换为MapReduce代码执行。(不要钻不需要执行MapReduce代码的情况的牛角尖)

    Hbase:

    1. 数据库

    ​ 是一种面向列存储的非关系型数据库。

    2.用于存储结构化和非结构化数据

    ​ 适用于单表非关系型数据的存储,不适合做关联查询,类似JOIN等操作。

    3. 基于HDFS

    ​ 数据持久化存储的体现形式是Hfile,存放于DataNode中,被ResionServer以region的形式进行管理。

    4.延迟较低,接入在线业务使用

    ​ 面对大量的企业数据,HBase可以直线单表大量数据的存储,同时提供了高效的数据访问速度。

    总结:

    ​ Hive和Hbase是两种基于Hadoop的不同技术,Hive是一种类SQL的引擎,并且运行MapReduce任务,Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。这两种工具是可以同时使用的。就像用Google来搜索,用FaceBook进行社交一样,Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也可以从Hive写到HBase,或者从HBase写回Hive。

    整合:

    需求一:将hive分析结果的数据,保存到HBase当中去

    ​ HBase的五个jar包拷贝到hive的lib目录下:

    ​ hbase-client-1.2.0-cdh5.14.0.jar

    ​ hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar

    ​ hbase-hadoop-compat-1.2.0-cdh5.14.0.jar

    ​ hbase-it-1.2.0-cdh5.14.0.jar

    ​ hbase-server-1.2.0-cdh5.14.0.jar

    可以使用软连接

    ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-client-1.2.0-cdh5.14.0.jar              /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-client-1.2.0-cdh5.14.0.jar             
    ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar      /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar             
    ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-hadoop-compat-1.2.0-cdh5.14.0.jar       /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-hadoop-compat-1.2.0-cdh5.14.0.jar            
    ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-it-1.2.0-cdh5.14.0.jar     /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-it-1.2.0-cdh5.14.0.jar               
    ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-server-1.2.0-cdh5.14.0.jar          /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-server-1.2.0-cdh5.14.0.jar  
    

    修改hive的配置文件

    cd /export/servers/hive-1.1.0-cdh5.14.0/conf
    vim hive-site.xml
    
            <property>
                    <name>hive.zookeeper.quorum</name>
                    <value>hadoop01,hadoop02,hadoop03</value>
            </property>
    
             <property>
                    <name>hbase.zookeeper.quorum</name>
                    <value>hadoop01,hadoop02,hadoop03</value>
            </property>
    

    修改hive-env.sh下的配置

    export HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
    export HBASE_HOME=/export/servers/hbase-1.2.0-cdh5.14.0
    export HIVE_CONF_DIR=/export/servers/hive-1.1.0-cdh5.14.0/conf
    

    在hive中建表加载数据

    create database course;
    use course;
    create external table if not exists course.score(id int,cname string,score int) row format delimited fields terminated by '\t' stored as textfile ;
    

    准备数据

    1       zhangsan        80
    2       lisi    60
    3       wangwu  30
    4       zhaoliu 70
    

    进行加载

    hive (course)> load data local inpath '/export/hive-hbase.txt' into table score;
    hive (course)> select * from score;
    

    创建一个hive管理表与Hbase进行映射

    create table course.hbase_score(id int,cname string,score int)  
    stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
    with serdeproperties("hbase.columns.mapping" = "cf:name,cf:score") 
    tblproperties("hbase.table.name" = "hbase_score");
    

    通过insert overwrite select 进行插入

    insert overwrite table course.hbase_score select id,cname,score from course.score;
    

    在hbase中查看表

    hbase(main):024:0> scan 'hbase_score'
    

    需求二:创建hive外部表,映射Hbase当中已有的表模型,直接通过

    进入Hbase中创建表并手动加载一些数据

    进入Hbase客户端,手动创建一张表,并插入数据

    create 'hbase_hive_score',{ NAME =>'cf'}
    
    put 'hbase_hive_score','1','cf:name','zhangsan'
    put 'hbase_hive_score','1','cf:score', '95'
    
    put 'hbase_hive_score','2','cf:name','lisi'
    put 'hbase_hive_score','2','cf:score', '96'
    
    put 'hbase_hive_score','3','cf:name','wangwu'
    put 'hbase_hive_score','3','cf:score', '97'
    

    建立hive外部表,映射Hbase当中的字段

    CREATE external TABLE course.hbase2hive(id int, name string, score int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:name,cf:score") TBLPROPERTIES("hbase.table.name" ="hbase_hive_score");
    

    相关文章

      网友评论

          本文标题:Hbase学习笔记(七) Hbase与Hive的整合

          本文链接:https://www.haomeiwen.com/subject/jcxudktx.html