文档章节

Hive使用ORC格式存储离线表

hulubo
 hulubo
发布于 2017/06/05 22:54
字数 987
阅读 111
收藏 0

在大数据时代,列式存储变得越来越流行了,当然并不是说行式存储就没落了,只是针对的场景不同,行式存储的代表就是我们大多数时候经常用的数据库,比较适合数据量小,字段数目少,查询性能高的场景,列式存储主要针对大多数互联网公司中的业务字段数目多,数据量规模大,离线分析多的场景,这时候避免大量无用IO扫描,往往提高离线数据分析的性能,而且列式存储具有更高的压缩比,能够节省一定的磁盘IO和网络IO传输。 

基础环境如下: 

Apache Hadoop2.7.1 
Apache Hbase0.98.12 
Apache Hive1.2.1 

先看下列式存储的两个代表框架: 

Apache Parquet比较适合存储嵌套类型的数据,如json,avro,probuf,thrift等 
Apache ORC是对RC格式的增强,支持大多数hive支持的数据类型,主要在压缩和查询层面做了优化。 

具体请参考这篇文章:http://wenda.chinahadoop.cn/question/333 
 

在hive中的文件格式主要如下几种:

textfile:默认的文本方式
Sequencefile:二进制格式
rcfile:面向列的二进制格式
orc:rcfile的增强版本,列式存储
parquet:列式存储,对嵌套类型数据支持较好

hive文件支持压缩方式:

这个与底层的hadoop有关,hadoop支持的压缩,hive都支持,主要有:
gzip,bizp,snappy,lzo



文件格式可以与压缩类似任意组合,从而达到比较的压缩比。 


下面看下具体以orc为例子的场景实战: 
需求: 
将Hbase的表的数据,加载到Hive中一份,用来离线分析使用。 

看下几个步骤: 

(1)集成Hive+Hbase,使得Hive可以关联查询Hbase表的数据,但需要注意的是,hbase表中的每个字段都有时间戳版本,而进行hive映射时是没办法 
指定的timestamp的,在hive1.x之后可虽然可以指定,但是还是有问题的,不建议使用,如果想要标识这一个rowkey的最后修改或者更新时间,可以单独添加一个字段到hbase表中, 
然后就可以使用Hive映射了。 
关于hive+hbase集成,请参考这篇文章:http://qindongliang.iteye.com/blog/2101094 

(2)使用hive建立一个外部表,关联hbase,sql文件如下: 
 

drop table  if exists  etldb_hbase;
 CREATE EXTERNAL  TABLE etldb_hbase(rowkey string,
cnum string,
conn string,
cntype string,
cct string,
ctitle string,
curl string,
murl string,
mcat1  string,
mcat2 string,
mcat3 string,
mtitle string,
mconn string,
mcourtid string,
mdel string,
ctime string
)             
 STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'       
 WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,
content:casenum,
content:conn,
content:contentType,
content:contentabstract,
content:title,
content:url,
meta:websiteType,
meta:documentType,
meta:spiderTypeFirst,
meta:spiderTypeSecond,
meta:title,
meta:content,
meta:hearOrganization,
meta:isdelete,
content:createTime
")  
 TBLPROPERTIES ("hbase.table.name" = "ETLDB");



执行sql文件的hive命令:hive -f xxx.sql 
执行sql字符串的hive命令: hive -e "  select * from person " 

(3)由于orc格式,无法直接从text加载到hive表中,所以需要加入一个中间临时表,用于中转数据,先将 
text数据导入一个文件格式weitextfile的表,然后再把这个表的数据直接导入orc的表,当然现在我们的数据源 
在hbase中,所以,先建立hive关联hbase的表,然后在建里一个orc的表,用来放数据,sql如下: 

 

drop table  if exists  etldb;

 CREATE   TABLE etldb(rowkey string,
cnum string,
conn string,
cntype string,
cct string,
ctitle string,
curl string,
murl string,
mcat1  string,
mcat2 string,
mcat3 string,
mtitle string,
mconn string,
mcourtid string,
mdel string,
ctime string
)

stored as orc  
--stored as textfile;
tblproperties ("orc.compress"="SNAPPY");
--从临时表,加载数据到orc中
insert into table etldb select * from etldb_hbase;




(4)加载完成后,就可以离线分析这个表了,用上orc+snappy的组合,查询时比直接 
hive关联hbase表查询性能要高一点,当然缺点是数据与数据源hbase里的数据不同步,需要定时增量或者全量,用于离线分析。 
 

本文转载自:http://doc.okbase.net/qindongliang1922/archive/203696.html

hulubo
粉丝 15
博文 78
码字总数 19249
作品 0
深圳
项目经理
私信 提问
Hive格式 Parquet与ORC性能测试报告

一、环境说明 Hadoop集群:使用测试Hadoop集群,节点: hadoop230 hadoop231 hadoop232 hadoop233 这几台机器配置一样,具体参数可参考如下: CPU数量:2个 CPU线程数:32个 内存:128GB 磁盘...

GordonNemo
2018/11/13
990
0
VectorizedReader 和 ORC

spark SQL not only SQL 优化尽可能的发生晚些,因为spark SQL,可以通过函数和库优化 整体的优化使用库和sql/dataframe https://dbricks.co/2rR8vAr optimizer: 使用启发式和代价重写查询计...

bymain
2018/07/10
0
0
Hadoop学习笔记:数据分析引擎Hive

概述 Hive是一个构建在Hadoop之上的数据仓库,和传统的数据仓库一样主要用来访问和管理数据,提供了类SQL查询语言;和传统数据仓库不一样的是可以处理超大规模的数据,可扩展性和容错性非常强...

GaryBigPig
01/16
0
0
Hive ORC数据高效迁移到HAWQ的方法

在上个月的HAWQ Meetup上,一位来自图像识别行业的数据工程师想将公司Hive中原有的数据迁移到Apache HAWQ中,但由于原来格式为ORC,不知如何高效的去迁移。 “我们是一家做图像识别的公司,数...

偶数科技
05/10
0
0
Install hadoop, install hive, 及hive的使用

hadoop , hive 安装过程和配置文件(附件)。 注意: hadoop Name Node未做ha. Hive, 还是基本的hive on MR, 未使用on tez, on spark, 未配置LLAP、 HCatalog and WebHCat。 安装完之后,以...

墨子Zhai
01/16
7
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
6
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部