前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Warning: Ignoring non-Spark config property: hive.exec.orc.default.stripe.size相关

Warning: Ignoring non-Spark config property: hive.exec.orc.default.stripe.size相关

原创
作者头像
sandyshu
发布2022-09-07 11:20:56
9900
发布2022-09-07 11:20:56
举报

1.背景:

在日常的处理中发现了Warning: Ignoring non-Spark config property: hive.exec.orc.default.stripe.size这样的一个日志,

此处客户寻求解决方式.

2.解决方式:

hive.exec.orc.default.stripe.size, "256*1024*1024 " stripe的默认大小

hive.exec.orc.split.strategy, "BI"

以上这两个参数一起使用.

3.原理剖析:

见配置可以得知,该配置是针对orc进行相关设置的配置---hive.exec.orc

首先我们来看下orc file,

ORC File,它的全名是Optimized Row Columnar (ORC) file,实际上是对RCFile做了一些优化.

这种文件格式可比较高效的来存储Hive数据.

它的设计目标是来克服Hive其他格式的缺陷.

运用ORC File可以提高Hive的读、写以及处理数据的性能.

和RCFile格式相比.

ORC File格式有以下优点:

(1)、每个task只会输出单个文件,这样可以减少NameNode的负载.

(2)、支持各种复杂的数据类型,如: datetime, decimal, 以及一些复杂类型(struct, list, map, and union).

(3)、在文件中存储了一些轻量级的索引数据.

(4)、基于数据类型的块模式压缩:

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

b、String类型的列用字典编码(dictionary encoding);

(5)、用多个互相独立的RecordReaders并行读相同的文件;

(6)、无需扫描markers就可以分割文件;

(7)、绑定读写所需要的内存;

(8)、metadata的存储是用 Protocol Buffers的,所以它支持添加和删除一些列.

ORC File包含一组组的行数据,称为stripes,ORC File的file footer还包含一些额外的辅助信息。在ORC File文件的最后,有一个被称为postscript的区,它主要是用来存储压缩参数及压缩页脚的大小。

在默认情况下,一个stripe的大小为250MB.

也就是对应的default设置值:hive.exec.orc.default.stripe.size, "256*1024*1024 " stripe的默认大小

(大尺寸的stripes使得从HDFS读数据更高效)

  在file footer里面包含了该ORC File文件中stripes的信息,每个stripe中有多少行,以及每列的数据类型。当然,它里面还包含了列级别的一些聚合的结果,比如:count, min, max, and sum.

orc文件架构如下所示:

1)因此在适当增大hive.exec.orc.default.stripe.size, "256*1024*1024"的值可提高效率,就像适当提高blocksize也可以加快效率原理类似.

2)hive.exec.orc.split.strategy, "BI"

2.1)场景使用,通过阅读hive源码可知,此配置hive,spark,tez均适用.

官方提供的配置描述如下所示:

代码语言:javascript
复制
HIVE_ORC_SPLIT_STRATEGY("hive.exec.orc.split.strategy", "HYBRID", new StringSet("HYBRID", "BI", "ETL"),
    "This is not a user level config. BI strategy is used when the requirement is to spend less time in split generation" +
    " as opposed to query execution (split generation does not read or cache file footers)." +
    " ETL strategy is used when spending little more time in split generation is acceptable" +
    " (split generation reads and caches file footers). HYBRID chooses between the above strategies" +
    " based on heuristics.")

因此针对客户的场景,对较大的ORC表,因为其footer较大,ETL策略会导致其从hdfs拉取大量的数据来切分split,甚至会导致driver端OOM,因此这类表的读取建议使用BI策略.

此处:

适当加大hive.exec.orc.default.stripe.size配置,以及在orc表比较大的情况下使用BI策略可有效提高效率,

以及避免driver OOM.

hive.exec.orc.default.stripe.size, "256*1024*1024 " stripe的默认大小

hive.exec.orc.split.strategy, "BI"

引用:

https://blog.51cto.com/u_8887390/3304856

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档