Hive ORC和Parquet admin 2023-01-29 20:06:02 篇首语:本文由小编为大家整理,主要介绍了Hive ORC和Parquet相关的知识,希望对你有一定的参考价值。 相比传统数据库的行式存储引擎,列式存储引擎具有更高的压缩比,更少的IO操作,尤其是在数据列很多,但每次操作仅针对若干列进行查询和计算的情景,列式存储引擎的性价比更高。目前在开源实现中,最有名的列式存储引擎莫过于Parquet和ORC,并且他们都是Apache的顶级项目,在数据存储引擎方面发挥着重要的作用。本文将重点讲解ORC文件存储格式,Parquet暂不深入说明,后续抽时间整理。NS.JSzHUOEr.Com 1、Apache Parquet 源自于google Dremel系统,Parquet相当于GoogleDremel中的数据存储引擎,而Apache顶级开源项目Drill正是Dremel的开源实现。Apache Parquet 最初的设计动机是存储嵌套式数据,比如Protocolbuffer,thrift,json等,将这类数据存储成列式格式,以方便对其高效压缩和编码,且使用更少的IO操作取出需要的数据,这也是Parquet相比于ORC的优势,它能够透明地将Protobuf和thrift类型的数据进行列式存储,在Protobuf和thrift被广泛使用的今天,与parquet进行集成,是一件非容易和自然的事情。除了上述优势外,相比于ORC, Parquet没有太多其他可圈可点的地方,比如它不支持update操作(数据写成后不可修改),不支持ACID等。Hive中创建表时使用Parquet数据存储格式:create table parquet_table(id int,name string) stored as parquet; 2、Apache ORC ORC(OptimizedRow Columnar) 文件格式存储源自于RC(RecordColumnar File)这种存储格式,RC是一种列式存储引擎,对schema演化(修改schema需要重新生成数据)支持较差,而ORC是对RC改进,但它仍对schema演化支持较差,主要是在压缩编码,查询性能方面做了优化。RC/ORC最初是在Hive中得到使用,最后发展势头不错,独立成一个单独的项目。Hive 1.x版本对事务和update操作的支持,便是基于ORC实现的(其他存储格式暂不支持)。ORC发展到今天,已经具备一些非常高级的feature,比如支持update操作,支持ACID,支持struct,array复杂类型。你可以使用复杂类型构建一个类似于parquet的嵌套式数据架构,但当层数非常多时,写起来非常麻烦和复杂,而parquet提供的schema表达方式更容易表示出多级嵌套的数据类型。NS.JSzHUOEr.ComHive中创建表时使用ORC数据存储格式:create table orc_table (id int,name string) stored as orc; 3、Parquet与ORC对比 Parquethttp://parquet.apache.orgNS.JSzHUOEr.ComOrchttp://orc.apache.org发展状态目前都是Apache开源的顶级项目,列式存储引擎开发语言Java主导公司Twitter/ClouderaHortonworks列编码支持多种编码,字典,RLE,Delta等支持主流编码,与Parquet类似 ACID不支持支持ACID事务修改操作(update,delete)不支持支持支持索引(统计信息)粗粒度索引block/group/chunk级别统计信息粗粒度索引file/stripe/row级别统计信息,不能精确到列建立索引查询性能Orc性能更高一点压缩比Orc压缩比更高 下面看一张图,可以比对一下压缩率: 4、ORC使用ORC文件格式可以提升Hive读、写与处理数据的性能。一个ORC文件包含多个stripes(每个stripes由多组行数据组成的),一个包含辅助信息的file footer。在文件的结尾,一个postscript保存着压缩参数及被压缩的footer的长度。一个stripes缺省大小是250MB,其大小可以扩展的长度只受HDFS的约束。file footer包含文件中的一个记录stripes信息的列表、每个stripes中行的数目及每个列的数据类型,它也包含列级的聚合结果:count, min, max, and sum。我们通过使用hive --orcfiledump来进行分析ORC存储文件,就可以看到这些信息:hive --orcfiledump 示例:hive --orcfiledump /user/hive/warehouse/helloworld.db/test_orcfile/part-00271 对于Hive 1.1,查看ORC File文件中的内容可以使用如下的方式:hive --orcfiledump -d 示例:hive --orcfiledump -d /user/hive/warehouse/helloworld.db/test_orcfile/part-00271 从下面的ORC文件结构图可以了解相关信息:我使用下面的命令,将ORC的分析结果输出到了orcfile文件,方便大家查看对照图分析:hive --orcfiledump /user/hive/warehouse/helloworld.db/test_orcfile/part-00271 > orcfile从上图中,我们知道在ORC文件中,每个Stripe包括索引数据(IndexData)、行数据(Row Data)及一个Stripe footer。Stripe footer包含了用于流定位的目录,Row data用于表扫描。索引数据(Index Data)包括每个列的最小与最大值,以及它们在每个列的行号,行索引项(Row index entries)记录了压缩块及解压后字节的偏移。需要注意的是,ORC索引只是被用来选择Stripe和行组,而不会被用于返回查询结果。拥有相对频繁的行索引条目,可以为了快速的数据读取而跳过一些行,缺省情况下每次最多可以跳过10000行。ORC有能力基于过滤谓词跳过非常多的行,可以使用第二关键字进行对表进行排序,以达到减少查询执行时间的效果。例如,如果主关键字是交易日期,表可以按照省份、邮编号码或者姓名进行排序,当按照省份查询记录的时候将跳过非目标省份的记录。下面介绍如何在Hive中使用这种存储格式: 1) 支持的数据格式Integerboolean (1 bit) tinyint (8 bit) smallint (16 bit) int (32 bit) bigint (64 bit) Floating pointfloat double String typesstring char varchar Binary blobsbinary Date/timetimestamp date Compound typesstruct list map union 2) Hive DDL通过指定stored as orc来使用ORC存储格式:create table orc_table (id int,NS.JSzHUOEr.Comname string) stored as orc; 可以修改表的存储格式:alter table simple_table set fileformat orc;如果simple_table已经存在数据,将导致通过表查询无法访问数据。 3) 创建表时,指定ORC存储格式属性KEYDEFAULTNOTESorc.compressZLIBhigh level compression = {NONE, ZLIB, SNAPPY}NS.JSzHUOEr.Com压缩方法(NONE, ZLIB, SNAPPY)orc.compress.size262,144compression chunk size每个压缩块的字节数orc.stripe.size268,435,456memory buffer size in bytes for writing每个stripe的字节数orc.row.index.stride10,000number of rows between index entries索引项之间的行数orc.create.indexTRUEcreate indexes?是否创建行索引orc.bloom.filter.columns""comma separated list of column namesorc.bloom.filter.fpp0.05bloom filter false positive rate 比如,创建没有压缩的表:CREATE TABLE orc_table ( name STRING, age tinyint ) STORED AS ORC TBLPROPERTIES("orc.compress"="NONE"); 4) Hive涉及ORC存储文件的配置参数· hive.default.fileformat指定Hive创建表的存储文件格式,默认为TextFile。 · hive.exec.orc.default.compressORC的压缩编码方式,默认为ZLIB。 · hive.exec.orc.default.buffer.sizeORC的缓冲大小,默认为262,144(256KB)。 · hive.exec.orc.default.block.sizeORC文件的系统块大小,默认为268,435,456(256MB) · hive.exec.orc.zerocopy使用zerocopy读ORC文件。Hadoop 2.3以及后续版本支持。 · hive.orc.compute.splits.num.threadsORC使用多少线程去并行化创建分片hive.exec.orc.skip.corrupt.data false If ORC reader encounters corrupt data, this value will be used todetermine whether to skip the corrupt data or throw an exception.The default behavioris to throw an exception. · hive.exec.orc.skip.corrupt.data 如果ORC读时遇到损坏的数据,此选项决定是否跳过损坏的数据,还是抛出异常。默认是抛出异常。 · hive.merge.orcfile.stripe.level当hive.merge.mapfiles,hive.merge.mapredfiles或者hive.merge.tezfiles设置为true时,此时同时以ORC文件格式写表数据,设置此值为true时将快速以stripe级别合并ORC小文件。· 其他的参数有的用的很少,大家可以参考Hive官网说明进行配置和调优。 以上是关于Hive ORC和Parquet的主要内容,如果未能解决你的问题,请参考以下文章 Electron——Electron的安装和简单使用 Major /minor /Full GC 您可能还会对下面的文章感兴趣: 相关文章 商丘私人空放联系方式_基本资料审核后快速就能放款平台 济宁私人借钱24小时在线,5万以上级别的贷款|无抵押个人借贷|秒下| 湖州空放私借2小时放款—身无分文借贷100%直接放款 宜昌纯私人放款微信电话——马上为您安排信贷服务+当日到账 蚌埠24小时私人放款联系方式随借随到-做生意借贷|应急周转|大额优先| 遵义空放借钱贷款联系电话:走投无路申请放款马上就到账 绵阳专业空放贷款私人联系方式,不看过往|先贷后放|马上拿钱| 德州附近个人放款电话号码多少:不审核+随借随还+当日成功+直接到账