9.1 配置参数
在Spark应用程序的开发中,需要根据具体的算法和应用场景选择调优方法,没有万能的解决方案,每一种调优方法对一些方面的性能可以优化,对另一些方面的性能可能会产生损耗,下面先介绍对性能调优产生影响的主要参数。
1.如何进行参数配置性能调优
熟悉Hadoop开发的用户对配置项应该不陌生。根据不同问题,调整不同的配置项参数是比较基本的调优方案。配置项可以在脚本文件中添加,也可以在代码中添加。
(1)通过配置文件spark-env.sh添加
可以参照spark-env.sh.template模板文件中的格式进行配置,参见下面的格式。
- export JAVA_HOME=/usr/local/jdk
- export SCALA_HOME=/usr/local/scala
- export SPARK_MASTER_IP=127.0.0.1
- export SPARK_MASTER_WEBUI_PORT=8088
- export SPARK_WORKER_WEBUI_PORT=8099
- export SPARK_WORKER_CORES=4
- export SPARK_WORKER_MEMORY=8g
(2)在程序中通过SparkConf对象添加
如果是在代码中添加,则需要在SparkContext定义之前修改配置项的修改。例如:
- val conf = new SparkConf() .setMaster("local") .setAppName("My
- application") .set("spark.executor.memory", "1g")
- val sc = new SparkContext(conf)
(3)在程序中通过System.setProperty添加
如果是在代码中添加,则需要在SparkContext定义之前修改配置项。例如:
- System.setProperty("spark.executor.memory", "14g")
- System.setProperty("spark.worker.memory", "16g")
- val conf = new SparkConf().setAppName("Simple Application")
- val sc = new SparkContext(conf)
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等。