热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hive使用ORC格式存储离线表

为什么80%的码农都做不了架构师?在大数据时代,列式存储变得越来越流行了,当然并不是说行式存储就没落了,只是针对的场景

为什么80%的码农都做不了架构师?>>>   hot3.png

在大数据时代,列式存储变得越来越流行了,当然并不是说行式存储就没落了,只是针对的场景不同,行式存储的代表就是我们大多数时候经常用的数据库,比较适合数据量小,字段数目少,查询性能高的场景,列式存储主要针对大多数互联网公司中的业务字段数目多,数据量规模大,离线分析多的场景,这时候避免大量无用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里的数据不同步,需要定时增量或者全量,用于离线分析。 
 


转:https://my.oschina.net/hulubo/blog/915080



推荐阅读
  • ZendCache:让网站飞起来
    php教程|php手册zend,ZendCache,PHP,Cache,comphp教程-php手册对商业网站来说,效率是十分重要的。在一些电子商务的站点上,服务器的响应速度决定了 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Hbase1.2.0cdh5.16.2使用PREFIX_TREE编码导致集群压缩队列异常
    Hbase1.X版本中PREFIX_TREE作为BlockEncoding存在bug,会造成RegionServer节点compactionqueue持续升高,甚至影响fl ... [详细]
  • MySQL千万级数据的大表优化解决方案【mysql特性】
    mysql数据库中的表数据量几千万后,查询速度会很慢,日常各种卡慢,严重影响使用体验。在考虑升级数据库或者换用大数据解决方案前,必须优化现有mysql数据库 ... [详细]
  • 用SpringBoot实现万能文件在线预览
    推荐一个用SpringBoot搭建的文档在线预览解决方案:kkFileView,一款成熟且开源的文件文档在线预览项目解决方案,对标业内付 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 我们在之前的文章中已经初步介绍了Cloudera。hadoop基础----hadoop实战(零)-----hadoop的平台版本选择从版本选择这篇文章中我们了解到除了hadoop官方版本外很多 ... [详细]
  • mapreduce原理_MapReduce原理及WordCount实践
    参考链接:https:www.cnblogs.comlaowangcp8961946.html一、MapReduce流程1.1Mapreduce整体流程: ... [详细]
  • 报错现象:从mysql5.5数据库导出的数据结构放到mysql5.7.10报错create_timetimestampNOTNULLDEFAULT‘0000-00-0 ... [详细]
  • Hbase 进阶
    一、RegionServer架构1)StoreFile保存实际数据的物理文件,StoreFile以Hfile的形式存储在HDFS上。每个Store会有一 ... [详细]
  • 开发中,EXT封装的.NET控件,使用了ExtJsExtenderControl的开源控件,发现个问题,就是每次控件加载,都需要调EXT_ALL.JS文件,600K,导致页面加载很慢。想对这个问题进行 ... [详细]
  • Linux操作系统回炉复习各种常用命令集合解析
    Linux操作系统回炉复习各种常用命令集合解析猿码互联猿码互联今天Linux终端命令格式目标了解终端命令格式知道如何查阅终端命令帮助信息01.终端命令格式command[ ... [详细]
author-avatar
fan9210729
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有