Hive使用ORC格式存储离线表

2024-05-15 03:38

本文主要是介绍Hive使用ORC格式存储离线表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[size=medium]
在大数据时代,列式存储变得越来越流行了,当然并不是说行式存储就没落了,只是针对的场景不同,行式存储的代表就是我们大多数时候经常用的数据库,比较适合数据量小,字段数目少,查询性能高的场景,列式存储主要针对大多数互联网公司中的业务字段数目多,数据量规模大,离线分析多的场景,这时候避免大量无用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支持的数据类型,主要在压缩和查询层面做了优化。

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

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

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

hive文件支持压缩方式:

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

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


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

看下几个步骤:

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

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

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");

[size=medium]
执行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如下:
[/size]


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;


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

[b][color=green][size=large]
有什么问题 可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园
[/size][/color][/b]
[img]http://dl2.iteye.com/upload/attachment/0104/9948/3214000f-5633-3c17-a3d7-83ebda9aebff.jpg[/img]

这篇关于Hive使用ORC格式存储离线表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990704

相关文章

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

Python3中Sanic中间件的使用

《Python3中Sanic中间件的使用》Sanic框架中的中间件是一种强大的工具,本文就来介绍Python3中Sanic中间件的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录Sanic 中间件的工作流程中间件的使用1. 全局中间件2. 路由中间件3. 异常处理中间件4. 异步中间件5. 优先级

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外