前言
前面介绍了关于spark性能调优两个最重要的点:
- 数据序列化
- 内存调优
这两个方向都进行调优后,如果想进一步继续优化你的程序,可以参考下面的思路。
设置合理的并行度
除非将每个操作的并行级别设置得足够高,否则集群资源不会得到充分利用。Spark根据每个文件的大小自动设置要在每个文件上运行的“map”任务的数量(尽管您可以通过SparkContext.textFile等的可选参数来控制它),对于分布式的“reduce”操作,如groupByKey和reduceByKey,它使用最大的父RDD分区数量。您可以将并行级别作为第二个参数传递(请参阅spark.PairRDDFunctions文档),或者设置配置属性spark.default.paralllelism来更改默认值。通常,我们建议集群中每个CPU核心执行2-3个任务。
- 与并行度相关的几个概念
- 文件和数据块
Spark任务读取的数据一般以多个文件的形式存储在HDFS服务器上,其中的每个文件都包含很多数据块。 - 输入分片
当Spark从HDFS服务器上读取这些文件作为输入时,会根据具体的数据格式使用对应的格式化对数据进行解析。一般情况下将若干数据块合并成