精华内容
下载资源
问答
  • orc和parquet选型

    2021-02-09 00:36:38
    TEXT是默认的格式,ORCPARQUET是列存储格式,占用空间查询效率是不同的,专门测试过后记录一下。 一:建表语句差别 create table if not exists text( a bigint ) partitioned by (dt string) row format ...

    SparkSQL选orc还是parquet?


    hive有三种默认的存储格式,TEXT、ORC、PARQUET。TEXT是默认的格式,ORC、PARQUET是列存储格式,占用空间和查询效率是不同的,专门测试过后记录一下。


    一:建表语句差别

    create table if not exists text(
    a bigint
    ) partitioned by (dt string)
    row format delimited fields terminated by ‘\001’
    location ‘/hdfs/text/’;

    create table if not exists orc(
    a bigint)
    partitioned by (dt string)
    row format delimited fields terminated by ‘\001’
    stored as orc
    location ‘/hdfs/orc/’;

    create table if not exists parquet(
    a bigint)
    partitioned by (dt string)
    row format delimited fields terminated by ‘\001’
    stored as parquet
    location ‘/hdfs/parquet/’;

    其实就是stored as 后面跟的不一样


    二:HDFS存储对比

    parquetorctext
    709M275M1G
    687M249M1G
    647M265M1G

    三:查询时间对比

    parquetorctext
    36.45126.13342.574
    38.42529.35341.673
    36.64727.82543.938

    四:文件如何生成

    val sparkSession = SparkSession.builder().master(“local”).appName(“pushFunnelV3”).getOrCreate()
    val javasc = new JavaSparkContext(sparkSession.sparkContext)
    val nameRDD = javasc.parallelize(util.Arrays.asList("{‘name’:‘zhangsan’,‘age’:‘18’}", “{‘name’:‘lisi’,‘age’:‘19’}”)).rdd;
    sparkSession.read.json(nameRDD).write.mode(SaveMode.Overwrite).csv("/data/aa")
    sparkSession.read.json(nameRDD).write.mode(SaveMode.Overwrite).orc("/data/bb")
    sparkSession.read.json(nameRDD).write.mode(SaveMode.Overwrite).parquet("/data/cc")

    展开全文
  • ORC Parquet比较入门

    2021-02-03 14:11:56
    ORC Parquet 都是 Hadoop 生态系统中流行的开源列文件存储格式,在效率速度方面非常相似,最重要的是,它们旨在加快大数据分析工作负载。使用 ORC 文件与处理 Parquet 文件一样简单,因为它们提供了高效的读写...

    ORC 和 Parquet 都是 Hadoop 生态系统中流行的开源列文件存储格式,在效率和速度方面非常相似,最重要的是,它们旨在加快大数据分析工作负载。使用 ORC 文件与处理 Parquet 文件一样简单,因为它们提供了高效的读写功能,比基于行的对应文件更高效。两者都有其优缺点,很难找出哪一个比另一个更好。让我们更好地看看它们。我们先从 ORC 开始,然后转到 Parquet。

    ORC

    ORC (Optimized Row Columnar),是专为 Hadoop 工作负载设计的免费开源列存储格式。正如名称所暗示的,ORC 是一种自我描述的优化文件格式,它将数据存储到列中,使用户能够只读取和解压缩所需的片段。它是传统记录列文件 (RCFile) 格式的继承者,旨在克服其他 Hive 文件格式的限制。访问数据的时间大大缩短,数据大小也减小到 75%。ORC 提供了一种更高效、更好的方法来存储数据,以通过使用 Tez 的 SQL on-Hadoop 解决方案(如 Hive)进行访问。

    ORC 与其他 Hive 文件格式相比具有许多优势,例如高数据压缩、更快的性能、预测性向下推的功能,以及更多,存储的数据被组织成条带,从而实现从 HDFS 进行大量、高效的读取。

    Parquet

    Parquet 是 Cloudera 与 Twitter 合作支持的 Hadoop 生态系统中另一种面向开源列的文件格式。Parquet 在大数据从业者中非常受欢迎,因为它提供了大量的存储优化,尤其是在分析工作负载中。与 ORC 一样,Parquet 还提供列压缩,可节省大量存储空间,同时允许您读取单个列,而不是读取完整的文件。

    与传统存储解决方案相比,它在性能和存储要求方面提供了显著优势。它更高效地执行数据 IO 样式操作,并且在支持复杂的嵌套数据结构方面非常灵活。事实上,它特别设计,牢记嵌套数据结构。

    Parquet 也是一种更好的文件格式,用于降低存储成本,并加快大量数据集的读取步骤。Parquet与Spark配合得很好。事实上,它是用于在 Spark 中写入和读取数据的默认文件格式。

    ORC 和Parquet的区别

    起源
    • ORC 的灵感来自 Facebook 开发的row columnar format,该格式支持列读取、预测下拉和惰性读取。它是传统记录列文件 (RCFile) 格式的继承者,提供比 RCFile 更高效地存储关系数据的方法,将数据大小减小高达 75%。

    Parquet的灵感来自谷歌Dremel论文中概述的嵌套数据存储格式,该格式由 Cloudera 与 Twitter 合作开发。

    支持
    • ORC 和 Parquet 都是流行的面向列的大数据文件格式,它们共享的设计几乎相似,因为两者都在列中共享数据。Parquet 对 Hadoop 生态系统中的大多数项目拥有更广泛的支持,但 ORC 仅支持 HivePig。两者之间的一个关键区别是,ORC更好地优化了Hive,而Parquet与Spark配合的更好。事实上,Parquet 是用于在 Apache Spark 中写入和读取数据的默认文件格式。

    索引
    • 使用 ORC 文件就像处理 Parquet 文件一样简单。两者都非常适合读取量大的工作负载。但是,ORC 文件被组织成数据条,数据条是数据的基本构建基块,彼此独立。每个条带都有索引、行数据和页脚。页脚是缓存条带内每列(如计数、最小值、最大值和总数)的关键统计信息的地方。

    • Parquet 将数据存储在页面中,每个页面都包含标头信息、有关定义级别和重复级别的信息以及实际数据。

    在这里插入图片描述

    总结

    • ORC 和 Parquet 都是 Hadoop 生态系统中最流行的两种面向列的文件存储格式,旨在很好地处理数据分析工作负载。
    • Parquet 由 Cloudera 和 Twitter 共同开发,用于存储具有高列的大型数据集的问题。
    • ORC 是传统 RCFile 规范的后续产品,存储在 ORC 文件格式中的数据被组织成条带,这些条带高度优化了 HDFS 读取操作。
    • 如果您在 Hadoop 生态系统中使用多种工具,则 Parquet 在适应性方面是一个更好的选择。
    • Parquet更好地优化了与Spark的使用,而 ORC 则针对Hive进行了优化。但在大多数情况下,两者非常相似,两者之间没有显著差异。

    参考

    Difference Between ORC and Parquet Difference Between | Difference Between

    展开全文
  • 合并hdfs小文件工具(orc和parquet) Hadoop。 合并hdfs小文件工具(orc和parquet) 。 合并hdfs上的parquet 和orc格式小文件小工具 merge files parquet orc
  • Impala推荐使用parquet格式,不支持ORC,Rcfile...orc.compress:表示ORC文件的压缩类型,「可选的类型有NONE、ZLBSNAPPY,默认值是ZLIB(Snappy不支持切片) parquet. compression:默认值为 UNCOMPRESSED,表示页的..
    1. Impala推荐使用parquet格式,3.0版本之前 不支持ORC,Rcfile

    2. - Hive 0.x版本推荐使用rcfile

    3. - PrestoDB推荐使用ORC,orcFile因为元数据管理的原因对查询hive做了优化

    4. - Spark支持ORC,Parquet,Rcfile

    Parquet与ORC对比

    orc.compress:表示ORC文件的压缩类型,「可选的类型有NONE、ZLB和SNAPPY,默认值是ZLIB(Snappy不支持切片)

    parquet. compression:默认值为 UNCOMPRESSED,表示页的压缩方式。「可以使用的压缩方式有 UNCOMPRESSED、 SNAPPY、GZP和LZO」

    压缩

    Snappy

    Google开发的一种压缩编解码器, 用于实现高速压缩, 适当兼顾压缩率, 平衡了压缩速率和文件大小. 但是有一点, Snappy是不支持分片的, 所以它需要和容器格式相互联合使用(如SequenceFile和Avro).

    LZO

    压缩率和速度与Snappy相近, 由于许可协议的原因, LZO不能打包进hadoop中进行分发, 需要单独安装. Snappy可以与Hadoop打包分发. 它可以支持分割, 但是要求建立索引.

    Gzip

    压缩速率非常好, 平均可以达到Snappy的2.5倍. 但是相应的, 写入相对较Snappy慢了一倍. Gzip同样也是不支持分片的, 所以应该与容器格式联合使用. Gzip更适合将数据进行归档.

    bzip2

    压缩性能比Gzip还要高9%, 但是要消耗更多的读取, 写入性能. 一般来说bzip2要比Gzip慢十倍. 所以bzip2应该不是hadoop集群上理想的编解码格式, 除非需求以为了减少空间占用为主. 比如将数据进行归档, 但是使用的时候也要考虑资源的消耗. 另外的, bzip2是支持数据分割的.

    几种压缩算法的简单对比

    压缩方式压缩效率压缩速度是否可分割
    Gzip中高
    bzip2
    Snappy
    LZO是(但是要求建立索引)
    Zlib

    存储和压缩结合该如何选择?

    根据ORC和parquet的要求,一般就有了

    1、ORC格式存储,Snappy压缩

    create table stu_orc(id int,name string)
    stored as orc 
    tblproperties ('orc.compress'='snappy');
    

    2、Parquet格式存储,Lzo压缩

    create table stu_par(id int,name string)
    stored as parquet 
    tblproperties ('parquet.compression'='lzo');
    

    3、Parquet格式存储,Snappy压缩

    create table stu_par(id int,name string)
    stored as parquet 
    tblproperties ('parquet.compression'='snappy');
    

    因为Hive 的SQL会转化为MR任务,如果该文件是用ORC存储,Snappy压缩的,因为Snappy不支持文件分割操作,所以压缩文件「只会被一个任务所读取」,如果该压缩文件很大,那么处理该文件的Map需要花费的时间会远多于读取普通文件的Map时间,这就是常说的「Map读取文件的数据倾斜」

    Parquet 是语言无关的,而且不与任何一种数据处理框架绑定在一起,适配多种语言和组件,能够与 Parquet 配合的组件有:
    查询引擎: Hive, Impala, Pig, Presto, Drill, Tajo, HAWQ, IBM Big SQL
    计算框架: MapReduce, Spark, Cascading, Crunch, Scalding, Kite
    数据模型: Avro, Thrift, Protocol Buffers, POJOs

     

    为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器

    压缩格式对应的编码/解码器
    DEFLATEorg.apache.hadoop.io.compress.DefaultCodec
    gziporg.apache.hadoop.io.compress.GzipCodec
    bzip2org.apache.hadoop.io.compress.BZip2Codec
    LZOcom.hadoop.compression.lzo.LzopCodec
    Snappyorg.apache.hadoop.io.compress.SnappyCodec

    压缩性能的比较

    压缩算法原始文件大小压缩文件大小压缩速度解压速度
    Gzip8.3GB1.8GB17.5MB/s58MB/s
    bzip28.3GB1.1GB2.4MB/s9.5MB/s
    LZO8.3GB2.9GB49.3MB/s74.6MB/s

     

     

    展开全文
  • Hive ORC和Parquet

    万次阅读 2016-05-21 22:19:35
    目前在开源实现中,最有名的列式存储引擎莫过于Parquet和ORC,并且他们都是Apache的顶级项目,在数据存储引擎方面发挥着重要的作用。 本文将重点讲解ORC文件存储格式,Parquet暂不深入说明,后续抽时间整理。

    相比传统数据库的行式存储引擎,列式存储引擎具有更高的压缩比,更少的IO操作,尤其是在数据列很多,但每次操作仅针对若干列进行查询和计算的情景,列式存储引擎的性价比更高。

    目前在开源实现中,最有名的列式存储引擎莫过于Parquet和ORC,并且他们都是Apache的顶级项目,在数据存储引擎方面发挥着重要的作用。

    本文将重点讲解ORC文件存储格式,Parquet暂不深入说明,后续抽时间整理。

     

    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表达方式更容易表示出多级嵌套的数据类型。

    Hive中创建表时使用ORC数据存储格式:

    create table orc_table (id int,name string) stored as orc;

     

    3、Parquet与ORC对比

     

     

    Parquet

    http://parquet.apache.org

    Orc

    http://orc.apache.org

    发展状态

    目前都是Apache开源的顶级项目,列式存储引擎

    开发语言

    Java

    主导公司

    Twitter/Cloudera

    Hortonworks

    列编码

    支持多种编码,字典,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 <path_to_file>

    示例:

    hive --orcfiledump /user/hive/warehouse/helloworld.db/test_orcfile/part-00271

     

    对于Hive 1.1,查看ORC File文件中的内容可以使用如下的方式:

    hive --orcfiledump -d <path_to_file>

    示例:

    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)       支持的数据格式

    • Integer
      • boolean (1 bit)
      • tinyint (8 bit)
      • smallint (16 bit)
      • int (32 bit)
      • bigint (64 bit)
    • Floating point
      • float
      • double
    • String types
      • string
      • char
      • varchar
    • Binary blobs
      • binary
    • Date/time
      • timestamp
      • date
    • Compound types
      • struct
      • list
      • map
      • union

    2)       Hive DDL

    通过指定stored as orc来使用ORC存储格式:

    create table orc_table (

    id int,

    name string

    ) stored as orc;

     

    可以修改表的存储格式:

    alter table simple_table set fileformat orc;

    如果simple_table已经存在数据,将导致通过表查询无法访问数据。

     

     

    3)       创建表时,指定ORC存储格式属性

    KEY

    DEFAULT

    NOTES

    orc.compress

    ZLIB

    high level compression = {NONE, ZLIB, SNAPPY}

    压缩方法(NONE, ZLIB, SNAPPY)

    orc.compress.size

    262,144

    compression chunk size

    每个压缩块的字节数

    orc.stripe.size

    268,435,456

    memory buffer size in bytes for writing

    每个stripe的字节数

    orc.row.index.stride

    10,000

    number of rows between index entries

    索引项之间的行数

    orc.create.index

    TRUE

    create indexes?

    是否创建行索引

    orc.bloom.filter.columns

    ""

    comma separated list of column names

    orc.bloom.filter.fpp

    0.05

    bloom 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.compress

    ORC的压缩编码方式,默认为ZLIB。

     

    ·        hive.exec.orc.default.buffer.size

    ORC的缓冲大小,默认为262,144(256KB)。

     

    ·        hive.exec.orc.default.block.size
    ORC文件的系统块大小,默认为268,435,456(256MB)

     

    ·        hive.exec.orc.zerocopy

    使用zerocopy读ORC文件。Hadoop 2.3以及后续版本支持。

     

    ·        hive.orc.compute.splits.num.threads

    ORC使用多少线程去并行化创建分片

    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官网说明进行配置和调优。

         

    展开全文
  • 大数据处理文件格式之ORC和Parquet选择 1. 背景 在大数据处理中,因为无法按照传统方式将海量数据存放到mysql中。所以各个框架都想办法将这些数据很好存放起来,既能保证数据安全,有可以确保数据查询地性能。 按照...
  • 区别: 1 orc的数据存储的文件更小。 2 orc支持事物(ACIDdelete/update操作,当然还需要满足其他条件才行。)parquet不支持增删改。 ---------------------------------------------------------- 因为业务...
  • 本文编译自IBM开发者社区,主要描述了HDFS中小的ORC和Parquet文件的问题,以及这些小文件如何影响Big SQL的读取性能,并探索了为了提高读取性能,使用现有工具将小文件压缩为大文件的可能解决方案。 简介 众所周知,...
  • Parquet 行组(Row Group):按照行将数据物理上划分为多个单元,每一个行组包含一定的行数。一个行组包含这个行组对应的区间内的所有列的列块 官方建议 更大的行组意味着更大的列块,使得能够做更大的序列IO。我们...
  • create table stu_par(id int,name string) stored as parquet tblproperties ('parquet.compression'='snappy');
  • 数据库压缩方式有四种 分别是 orc格式 parquet格式 以及默认的textfile格式 这三种格式 orc的压缩效率最高 其次是parquet 最后是默认的textfile 我的文件分别用三种格式创建数据库并加载进去 textfile格式 文件...
  • orcparquet格式的选择

    2020-07-25 23:11:10
    对于orcparquet这两种列式存储格式,网上能找到大量的介绍以及对比,此处简单总结一下: orc VS parquetorc存储压缩率比parquet要高; 一般来说,orc读取效率比parquet要高; parquet支持嵌套数据格式,orc...
  • 从Hive官网得知,Apache Hive支持Apache Hadoop中使用的几种熟悉的文件格式,如TextFile(文本格式),RCFile(行列式文件),SequenceFile(二进制序列化文件),AVRO,ORC(优化的行列式文件)和Parquet格式,而这...
  • ORCParquet文件对比

    千次阅读 2020-08-10 14:58:38
    ORCParquet总结如下: 转载:https://blog.csdn.net/qq_22222499/article/details/106534767?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-6&spm=1001.2101.3001.4242
  • Apache Parquet 最初的设计动机是存储嵌套式数据,比如Protocolbuffer thrift json 等 将这类数据存储成列式格式以方便对其高效压缩编码, 且使用更少的IO操作取出需要的数据,也是Parquet 相比于ORC的优势,它能
  • Hadoop数据存储orcparquet格式的选择

    千次阅读 2019-09-01 17:40:20
    对于orcparquet这两种列式存储格式,网上能找到大量的介绍以及对比,此处简单总结一下: orc VS parquetorc存储压缩率比parquet要高; 一般来说,orc读取效率比parquet要高; parquet支持嵌套...
  • ORCParquet表的压缩

    2021-01-05 10:33:28
    除了直接配置MapReduce压缩功能外,Hive的ORC和Parquet表直接支持表的压缩属性。 但支持的压缩格式有限,ORC表支持None、Zlib、Snappy压缩,默认为ZLIB压缩。但这3种压缩格式不支持切分,所以适合单个文件不是...
  • ORC和Parquet都是高性能的存储方式,这两种存储格式总会带来存储性能上的提升。 Parquet: 1)Parquet支持嵌套的数据模型,类似于Protocol Buffers,每一个数据模型的schema包含多个字段,每一个字段有三个属性...
  • orc orc = new orc(); File file = new File(sourceFilePath); BufferedReader reader = null; String temp = null; String rowkey = null; String tmpvalue = null; try { if (ConnectionImpl.mapConnPool...
  • HIve之ORCParquet

    2021-06-25 17:55:04
    Orcparquet区别 表类型 默认压缩 压缩格式 描述 Orc Zlib Node、Zlib、Snappy Orc可以选择Zlib或Snappy压缩,Snappy需要额外安装 Parquet Uncompressed Uncompressed、Snappy、Gzip、Lzo Parquet使用...
  • 支持将表以Apache Parquet格式导出到公共云存储系统。 支持以下云存储系统: , , , 。 允许配置并行的导入或导出过程。 用户须知 有关更多信息,请查看以下指南。 投稿人须知 依存关系 以下各节列出了编译,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,773
精华内容 2,309
关键字:

orc和parquet区别