9.1 配置参数

在Spark应用程序的开发中,需要根据具体的算法和应用场景选择调优方法,没有万能的解决方案,每一种调优方法对一些方面的性能可以优化,对另一些方面的性能可能会产生损耗,下面先介绍对性能调优产生影响的主要参数。

1.如何进行参数配置性能调优

熟悉Hadoop开发的用户对配置项应该不陌生。根据不同问题,调整不同的配置项参数是比较基本的调优方案。配置项可以在脚本文件中添加,也可以在代码中添加。

(1)通过配置文件spark-env.sh添加

可以参照spark-env.sh.template模板文件中的格式进行配置,参见下面的格式。


  1. export JAVA_HOME=/usr/local/jdk
  2. export SCALA_HOME=/usr/local/scala
  3. export SPARK_MASTER_IP=127.0.0.1
  4. export SPARK_MASTER_WEBUI_PORT=8088
  5. export SPARK_WORKER_WEBUI_PORT=8099
  6. export SPARK_WORKER_CORES=4
  7. export SPARK_WORKER_MEMORY=8g

(2)在程序中通过SparkConf对象添加

如果是在代码中添加,则需要在SparkContext定义之前修改配置项的修改。例如:


  1. val conf = new SparkConf() .setMaster"local" .setAppName"My
  2. application" .set"spark.executor.memory" "1g"
  3. val sc = new SparkContextconf

(3)在程序中通过System.setProperty添加

如果是在代码中添加,则需要在SparkContext定义之前修改配置项。例如:


  1. System.setProperty"spark.executor.memory" "14g"
  2. System.setProperty"spark.worker.memory" "16g"
  3. val conf = new SparkConf().setAppName"Simple Application"
  4. val sc = new SparkContextconf

Spark官网(http://spark.apache.org/docs/latest/configuration.html)推荐了很多配置参数,读者可以参阅。

2.如何观察性能问题

可以通过下面的方式监测性能。

1)Web UI。

2)Driver程序控制台日志。

3)logs文件夹下日志。

4)work文件夹下日志。

5)Profiler工具。

例如,一些JVM的Profiler工具,如Yourkit、Jconsole或者JMap、JStack等命令。更全面的可以通过集群的Profiler工具,如Ganglia、Ambaria等。