热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

hive存储格式

hive文件的存储式:textfile、sequencefile、rcfile、自定义式1.textfiletextfile,即是文本式,默认式,数据不做压缩,磁盘开销大,数据解析开销大对应hiveAPI为org.apache.hadoop.mapred.TextInputFormat和org.apache.hadoop.hive.ql.io.HiveI

hive文件的存储式 :textfile、sequencefile、 rcfile、 自定义式 1 . textfile textfile, 即是文本式,默认式,数据不做压缩,磁盘开销大,数据解析开销大 对应hive API为 org.apache.hadoop.mapred.TextInputFormat 和 org.apache.hadoop.hive.ql.io.HiveI

hive文件的存储格式:textfile、sequencefile、rcfile、自定义格式

1. textfile
textfile,
即是文本格式,默认格式,数据不做压缩,磁盘开销大,数据解析开销大

对应hive API为org.apache.hadoop.mapred.TextInputFormatorg.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

2.sequencefile
sequencefile,是Hadoop提供的一种二进制文件格式是Hadoop支持的标准文件格式(其他生态系统并不适用),
可以直接将
对序列化到文件中,所以sequencefile文件不能直接查看,可以通过Hadoop fs -text查看。
具有使用方便,可分割,可压缩,可进行切片。压缩支持
NONE, RECORD, BLOCK(优先)等格式,可进行切片。

对应hive API为org.apache.hadoop.mapred.SequenceFileInputFormat和org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat

3.rcfile
大多数的
Hadoophive存储是行式储存,在大多数环境下比较高效,因为大多数表具有的字段个数都不会很大,
且文件按块压缩对于需要处理重复数据的情况比较高效,同时处理和调试工具(moreheadawk)都能很好的适应行式存储的数据。
但当需要操作的表有成百上千个字段,而操作只有一小部分字段时,这往往会造成很大的浪费。
而此时若是采取列式存储只操作需要的列便可以大大提高性能。

rcfile 是一种行列存储相结合的存储方式,先将数据按行分块再按列式存储,保证同一条记录在一个块上,避免读取多个块,
有利于数据压缩和快速进行列存储。

对应hive API为org.apache.hadoop.hive.ql.io.RCFileInputFormatorg.apache.hadoop.hive.ql.io.RCFileOutputFormat

行存储

基于Hadoop系统行存储结构的优点在于快速数据加载和动态负载的高适应能力,这是因为行存储保证了相同记录的所有域

都在同一个集群节点,即同一个HDFS块。不过,行存储的缺点也是显而易见的,它不能支持快速查询处理,

因为当查询仅仅针对多列表中的少数几列时,它不能跳过不必要的列读取;此外由于混合着不同数据值的列,

行存储不易获得极高的压缩比,即空间利用率不易大幅提高。尽管通过熵编码和利用列相关性能够获得一个较好的压缩比,

但是复杂数据存储实现会导致解压开销增大。

下图显示了在HDFS上按照列组存储表格的例子。在图中,列A和列B存储在同一列组,而列C和列D分别存储在单独的列组。

查询时列存储能够避免读不 必要的列,并且压缩一个列中的相似数据能够达到较高的压缩比。然而由于元组重构的较高开销,

它并不能提供基于Hadoop系统的快速查询处理。列存储不 能保证同一记录的所有域都存储在同一集群节点,

记录的4个域存储在位于不同节点的3HDFS块中。因此,记录的重构将导致通过集群节 点网络的大量数据传输。

尽管预先分组后,多个列在一起能够减少开销,但是对于高度动态的负载模式,它并不具备很好的适应性。

除非所有列组根据可能的查询预 先创建,否则对于一个查询需要一个不可预知的列组合,一个记录的重构或许需要2个或

多个列组。再者由于多个组之间的列交叠,列组可能会创建多余的列数据存 储,这导致存储利用率的降低。


下图是一个 HDFS块内RCFile方式存储的例子。RCFileRecord Columnar File)存储结构遵循的是先水平划分,

再垂直划分的设计理念,它结合了行存储和列存储的优点:首先,RCFile保证同一行 的数据位于同一节点,

因此元组重构的开销很低;其次,像列存储一样,RCFile能够利用列维度的数据压缩,并且能跳过不必要的列读取。


四.ORCfile
orcfile是对rcfile的优化,可以提高hive的读、写、数据处理性能,提供更高的压缩效率。和RCFile格式相比,

ORC File格式有以下优点:
(1)、每个task只输出单个文件,这样可以减少NameNode的负载;
(2)、支持各种复杂的数据类型,比如: datetime, decimal, 以及一些复杂类型(struct, list, map, and union)
(3)、在文件中存储了一些轻量级的索引数据;
(4)、基于数据类型的块模式压缩:

1).integer类型的列用行程长度编码(run-length encoding);

2).String类型的列用字典编码(dictionaryencoding)
(5)、用多个互相独立的RecordReaders并行读相同的文件;
(6)、无需扫描markers就可以分割文件;
(7)、绑定读写所需要的内存;
(8)metadata的存储是用 Protocol Buffers的,所以它支持添加和删除一些列。
ORC
File
文件结构
ORC File
包含一组组的行数据,称为stripes,除此之外,ORCFilefile footer还包含一些额外的辅助信息。

ORC File文件的最后,
有一个被称为
postscript的区,它主要是用来存储压缩参数及压缩页脚的大小。
在默认情况下,一个stripe的大小为250MB。大尺寸的stripes使得从HDFS读数据更高效。
  在file footer里面包含了该ORC File文件中stripes的信息,每个stripe中有多少行,以及每列的数据类型。
当然,它里面还包含了列级别的一些聚合的结果,比
如:count, min, max, and sum。下图显示出可ORC File文件结构:

Stripe结构

  从上图我们可以看出,每个Stripe都包含index datarowdata以及stripe footerStripefooter包含流位置的目录;
Row data在表扫描的时候会用到。Index data包含每列的最大和最小值以及每列所在的行。行索引里面提供了偏移量,
它可以跳到正确的压缩块位置。具有相对频繁的行索引,使得在
stripe中快 速读取的过程中可以跳过很多行,

尽管这个stripe的大小很大。
在默认情况下,最大可以跳过
10000行。拥有通过过滤谓词而跳过大量的行的能力,你可 以在表的 secondarykeys 进行排序,
从而可以大幅减少执行时间。比如你的表的主分区是交易日期,那么你可以对次分区(
statezip code以及last name

进行排序。

五.自定义格式

若当前数据文件格式不能被当前hive所识别时,可以自定义文件格式,

用户可通过实现InputFormatOutputFormat来自定义输入输出格式。

六.总结

textfile 存储空间消耗比较大,并且压缩的text 无法分割和合并 查询的效率最低,可以直接存储,加载数据的速度最高

sequencefile 存储空间消耗最大,压缩的文件可以分割和合并 查询效率高,需要通过text文件转化来加载

orcfile, rcfile存储空间最小,查询的效率最高 ,需要通过text文件转化来加载,加载的速度最低.

orcfile, rcfile较有优势,orcfile,rcfile具备相当于行存储的数据加载和负载适应能力,扫描表时避免不必要的列读取,
拥有比其他结构更好的性能,而使用列维度的压缩,能有效提升存储空间利用率。

orcfile, rcfile数据加载是性能损失较大,但由于hdfs一次写入多次读写,所以损失可以接受。

SequenceFile,ORCFile(ORC)rcfile格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中,
然后再从
textfile表中导入到SequenceFile,ORCFile(ORC)rcfile表中。

推荐阅读
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • Zookeeper作为Apache Hadoop生态系统中的一个重要组件,主要致力于解决分布式应用中的常见数据管理难题。它提供了统一的命名服务、状态同步服务以及集群管理功能,有效提升了分布式系统的可靠性和可维护性。此外,Zookeeper还支持配置管理和临时节点管理,进一步增强了其在复杂分布式环境中的应用价值。 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • 在Hive中合理配置Map和Reduce任务的数量对于优化不同场景下的性能至关重要。本文探讨了如何控制Hive任务中的Map数量,分析了当输入数据超过128MB时是否会自动拆分,以及Map数量是否越多越好的问题。通过实际案例和实验数据,本文提供了具体的配置建议,帮助用户在不同场景下实现最佳性能。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 在Linux系统中,原本已安装了多个版本的Python 2,并且还安装了Anaconda,其中包含了Python 3。本文详细介绍了如何通过配置环境变量,使系统默认使用指定版本的Python,以便在不同版本之间轻松切换。此外,文章还提供了具体的实践步骤和注意事项,帮助用户高效地管理和使用不同版本的Python环境。 ... [详细]
  • 本文介绍了如何使用Hive分析用户最长连续登录天数的方法。首先对数据进行排序,然后计算相邻日期之间的差值,接着按用户ID分组并累加连续登录天数,最后求出每个用户的最大连续登录天数。此外,还探讨了该方法在其他领域的应用,如股票市场中最大连续涨停天数的分析。 ... [详细]
  • 在Hive中执行复杂SQL查询时,可能会遇到返回代码2的运行时错误。该问题通常发生在使用HiveServer2启动服务端并使用Beeline客户端进行连接的情况下。具体原因可能包括资源不足、配置不当或数据倾斜等。为了解决这一问题,建议检查集群资源分配、调整相关配置参数,并优化查询逻辑以减少数据倾斜。此外,还可以通过启用调试日志来获取更多错误信息,从而更好地定位和解决问题。 ... [详细]
  • sh cca175problem03evolveavroschema.sh ... [详细]
  • 本文整理了Java中org.apache.hadoop.io.ByteWritable.<init>()方法的一些代码示例,展示了ByteWri ... [详细]
  • 数据读取hadoopFileParameters:path–pathtoHadoopfileinputFormatClass–fullyqualifiedclassnameo ... [详细]
  • FileBeat + Flume + Kafka + HDFS + Neo4j + SparkStreaming + MySQL:【案例】三度关系推荐V1.0版本11:每周一计算最近一月主播视频评级
    一、数据计算步骤汇总下面我们通过文字梳理一下具体的数据计算步骤。第一步:历史粉丝关注数据初始化第二步:实时维护粉丝关注数据第三步:每天定 ... [详细]
  • hive和mysql的区别是什么[mysql教程]
    hive和mysql的区别有:1、查询语言不同,hive是hql语言,MySQL是sql语句;2、数据存储位置不同,hive把数据存储在hdfs上,MySQL把数据存储在自己的系统 ... [详细]
author-avatar
mobiledu2502906891
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有