spark配置文件:
/usr/hdp/current/spark-client/conf/spark-defaults.conf:
/usr/hdp/current/spark-client/conf/spark-env.sh
Spark调优:
【Spark集群并行度】
修改配置:/usr/hdp/current/spark-historyserver/conf/spark-defaults.conf
1.集群task并行度:SPARK_ EXECUTOR_INSTANCES* SPARK_EXECUTOR_CORES;
2.集群内存总量:(executor个数) * (SPARK_EXECUTOR_MEMORY+spark.yarn.executor.memoryOverhead)+(SPARK_DRIVER_MEMORY+spark.yarn.driver.memoryOverhead)。
Spark对Executor和Driver额外添加堆内存大小:
Executor端:由spark.yarn.executor.memoryOverhead设置,默认值executorMemory * 0.07与384的最大值。
Driver端:由spark.yarn.driver.memoryOverhead设置,默认值driverMemory * 0.07与384的最大值。
通过调整上述参数,可以提高集群并行度,让系统同时执行的任务更多,那么对于相同的任务,并行度高了,可以减少轮询次数。举例说明:如果一个stage有100task,并行度为50,那么执行完这次任务,需要轮询两次才能完成,如果并行度为100,那么一次就可以了。
但是在资源相同的情况,并行度高,相应的Executor内存就会减少,所以需要根据实际实况协调内存和core。
【Spark任务数量调整】
Spark的任务数由stage中的起始的所有RDD的partition之和数量决定,所以需要了解每个RDD的partition的计算方法。以Spark应用从HDFS读取数据为例,HadoopRDD的partition切分方法完全继承于MapReduce中的FileInputFormat,具体的partition数量由HDFS的块大小、mapred.min.split.size的大小、文件的压缩方式等多个因素决定,详情需要参见FileInputFormat的代码。
【Spark内存调优】
1. 对象所占内存,优化数据结构
Spark 默认使用Java序列化对象,虽然Java对象的访问速度更快,但其占用的空间通常比其内部的属性数据大2-5倍。参考Spark官方文档(http://spark.apache.org/docs/latest/tuning.html#tuning-data-structures)
(1)使用对象数组以及原始类型(primitive type)数组以替代Java或者Scala集合类(collection class)。fastutil 库为原始数据类型提供了非常方便的集合类,且兼容Java标准类库。
(2)尽可能地避免采用含有指针的嵌套数据结构来保存小对象。
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余2页未读,立即下载