5.HBase与Hive进行表关联
HBase与Hive的对比:
- Hive:
- 数据仓库;
Hive的本质其实就相当于将HDFS中已经存储的文件在MySQL中做了一个双射关系,以方便使用HQL去管理查询。
2. 用于数据分析、清洗;
Hive适用于离线的数据分析和清洗,延迟较高
3. 基于HDFS,MR;
Hive中真实存储的数据依旧在HDFS上,编写的HQL语句终将是装换为MapReduce代码执行。
- HBase:
- 数据库;
面向列(实际上是列簇)存储的非关系型数据库。
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中。
本文来自博客园,作者:{理想三旬},转载请注明原文链接:{https://www.cnblogs.com/zyp0519/}