Spark框架当中,作为支持结构化数据处理的模块,Spark SQL的重要性不言而喻,通过Spark SQL,可以将数据计算任务转换为RDD运算,实现分布式数据查询。而提到Spark SQL,其中很重要的一个知识点,就是Spark SQL调优,今天我们就来详细聊一聊。
Spark SQL当中涉及到很多的参数,这些参数在官网当中也没有明确的解释,在Spark SQL调优,需要从这些参数开始着手去调整。
Spark SQL调优,主要有两个方向,一方面是解决故障的异常调优,另一方面是提升性能的调优。异常调优需要针对性地解决故障问题,这里不多说,这里先讲Spark SQL 性能调优,主动调整参数来实现Spark系统性能的优化。
spark.hadoopRDD.ignoreEmptySplits
默认是false,如果是true,则会忽略那些空的splits,减小task的数量。
spark.hadoop.mapreduce.input.fileinputformat.split.minsize
是用于聚合input的小文件,用于控制每个mapTask的输入文件,防止小文件过多时候,产生太多的task.
spark.sql.autoBroadcastJoinThreshold&&spark.sql.broadcastTimeout
用于控制在spark sql中使用BroadcastJoin时候表的大小阈值,适当增大可以让一些表走BroadcastJoin,提升性能,但是如果设置太大又会造成driver内存压力,而broadcastTimeout是用于控制Broadcast的Future的超时时间,默认是300s,可根据需求进行调整。
spark.sql.adaptive.enabled&&spark.sql.adaptive.shuffle.targetPostShuffleInputSize
该参数是用于开启spark的自适应执行,这是spark比较老版本的自适应执行,后面的targetPostShuffleInputSize是用于控制之后的shuffle阶段的平均输入数据大小,防止产生过多的task。
spark.sql.parquet.mergeSchema
默认false。当设为true,parquet会聚合所有parquet文件的schema,否则是直接读取parquet summary文件,或者在没有parquet summary文件时候随机选择一个文件的schema作为最终的schema。
spark.sql.files.opencostInBytes
该参数默认4M,表示小于4M的小文件会合并到一个分区中,用于减小小文件,防止太多单个小文件占一个分区情况。
spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version
1或者2,默认是1.MapReduce-4815详细介绍了fileoutputcommitter的原理,实践中设置了version=2的比默认version=1的减少了70%以上的commit时间,但是1更健壮,能处理一些情况下的异常。
关于Spark SQL调优,今天主要跟大家分享的是性能调优,这是基于系统自身进行的一些小的配置调整,在实际的系统运行当中,性能调优还是能够起到一定的优化作用的。加米谷大数据,
成都大数据培训机构,开设专业大数据培训课程,课程大纲及学习资料可联系客服领取!