5.HBase与Hive进行表关联

 

HBase与Hive的对比:

  • Hive:
  1. 数据仓库;

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

    2. 用于数据分析、清洗;

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

    3. 基于HDFS,MR;

    Hive中真实存储的数据依旧在HDFS上,编写的HQL语句终将是装换为MapReduce代码执行。

  • HBase:
  1. 数据库;

    面向列(实际上是列簇)存储的非关系型数据库。

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

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

    3. 基于HDFS;

    数据持久化存储的形式是HFile,存放在DataNode中,被RegionServer以region的形式进行管理。

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

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

(几十亿数据秒级查询)

 

  生产环境中常用HBase来存储大量数据,且通过HBase的rowkey机制进行去重,然后再用Hive来映射,并在Hive端做数据分析和清理。

 

create external table ods_personas.ods_hbase_train(
    id string,
    userid string,
    eventid string,
    invited string,
    times string,
    interested string,
    not_interested string
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties("hbase.columns.mapping" = ":key,base:user_id,base:event_id,base:invited,base:timestamp,base:interested,base:not_interested")
tblproperties("hbase.table.name" = "exp:hbase_train")

 

  如果HBase已经有表,可以通过关联映射到Hive上,此时在hive上只能建外部表来关联,即可映射相应HBase表中数据;

   如果HBase和Hive中都没有表的存在,在Hive建表,HBase中也会对应生成表,此时如果在Hive端用load方法导入数据,HBase端无数据,因为load读的是txt文件,而HBase需要Hfile格式;所以使用insert方式插入,而且此时数据真正存储在HBase中。

 

 

posted on 2021-11-24 22:01  理想三旬_z  阅读(544)  评论(0编辑  收藏  举报

导航