记录spark的一些参数的使用
Split的相关参数
hive.exec.orc.split.strategy 指定Split的策略
spark.hadoop.mapreduce.input.fileinputformat.split.maxsize 默认值为Integer.MAX_VALUE
spark.hadoop.mapreduce.input.fileinputformat.split.minsize 默认值为1
Spark做Orc文件的Split基本上还是使用Hive来实现的。默认的策略为HYBRID,可以修改为BI或ETL。具体解释如下(拷贝过来的):hive.exec.orc.split.strategy参数控制在读取ORC表时生成split的策略。BI策略以文件为粒度进行split划分;ETL策略会将文件进行切分,多个stripe组成一个split;HYBRID策略为:当文件的平均大小大于hadoop最大split值(默认256 1024 1024)时使用ETL策略,否则使用BI策略。 — 对于一些较大的ORC表,可能其footer较大,ETL策略可能会导致其从hdfs拉取大量的数据来切分split,甚至会导致driver端OOM,因此这类表的读取建议使用BI策略。对于一些较小的尤其有数据倾斜的表(这里的数据倾斜指大量stripe存储于少数文件中),建议使用ETL策略。— 另外,spark.hadoop.mapreduce.input.fileinputformat.split.minsize参数可以控制在ORC切分时stripe的合并处理。具体逻辑是,当几个stripe的大小小于spark.hadoop.mapreduce.input.fileinputformat.split.minsize时,会合并到一个task中处理。可以适当调小该值,以此增大读ORC表的并发。
Shuffle相关
spark.sql.adaptive.shuffle.targetPostShuffleInputSize
什么时候用这个参数?在界面上看某个stage中tasks列表时,如果tasks的“shuffle read size / record”列特别不平均,则可以使用这个参数进行调优。
该参数只能用于Spark-sql任务。