当前位置:K88软件开发文章中心编程语言SQLSpark → 文章内容

Spark配置

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-19 4:50:58

由 ligaihe 创建, 最后一次修改 2016-02-24 Spark配置Spark提供三个位置用来配置系统:Spark properties控制大部分的应用程序参数,可以用SparkConf对象或者java系统属性设置Environment variables可以通过每个节点的conf/spark-env.sh脚本设置每台机器的设置。例如IP地址Logging可以通过log4j.properties配置Spark属性Spark属性控制大部分的应用程序设置,并且为每个应用程序分别配置它。这些属性可以直接在SparkConf上配置,然后传递给SparkContext。SparkConf允许你配置一些通用的属性(如master URL、应用程序明)以及通过set()方法设置的任意键值对。例如,我们可以用如下方式创建一个拥有两个线程的应用程序。注意,我们用local[2]运行,这意味着两个线程-表示最小的并行度,它可以帮助我们检测当在分布式环境下运行的时才出现的错误。val conf = new SparkConf() .setMaster("local[2]") .setAppName("CountingSheep") .set("spark.executor.memory", "1g")val sc = new SparkContext(conf)注意,我们在本地模式中拥有超过1个线程。和Spark Streaming的情况一样,我们可能需要一个线程防止任何形式的饥饿问题。动态加载Spark属性在一些情况下,你可能想在SparkConf中避免硬编码确定的配置。例如,你想用不同的master或者不同的内存数运行相同的应用程序。Spark允许你简单地创建一个空conf。val sc = new SparkContext(new SparkConf())然后你在运行时提供值。./bin/spark-submit --name "My app" --master local[4] --conf spark.shuffle.spill=false --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" myApp.jarSpark shell和spark-submit工具支持两种方式动态加载配置。第一种方式是命令行选项,例如--master,如上面shell显示的那样。spark-submit可以接受任何Spark属性,用--conf标记表示。但是那些参与Spark应用程序启动的属性要用特定的标记表示。运行./bin/spark-submit --help将会显示选项的整个列表。bin/spark-submit也会从conf/spark-defaults.conf中读取配置选项,这个配置文件中,每一行都包含一对以空格分开的键和值。例如:spark.master spark://5.6.7.8:7077spark.executor.memory 512mspark.eventLog.enabled truespark.serializer org.apache.spark.serializer.KryoSerializer任何标签(flags)指定的值或者在配置文件中的值将会传递给应用程序,并且通过SparkConf合并这些值。在SparkConf上设置的属性具有最高的优先级,其次是传递给spark-submit或者spark-shell的属性值,最后是spark-defaults.conf文件中的属性值。查看Spark属性在http://<driver>:4040上的应用程序web UI在“Environment”标签中列出了所有的Spark属性。这对你确保设置的属性的正确性是很有用的。注意,只有通过spark-defaults.conf, SparkConf以及命令行直接指定的值才会显示。对于其它的配置属性,你可以认为程序用到了默认的值。可用的属性控制内部设置的大部分属性都有合理的默认值,一些最通用的选项设置如下:应用程序属性Property NameDefaultMeaningspark.app.name(none)你的应用程序的名字。这将在UI和日志数据中出现spark.master(none)集群管理器连接的地方spark.executor.memory512m每个executor进程使用的内存数。和JVM内存串拥有相同的格式(如512m,2g)spark.driver.memory512mdriver进程使用的内存数spark.driver.maxResultSize1g每个Spark action(如collect)所有分区的序列化结果的总大小限制。设置的值应该不小于1m,0代表没有限制。如果总大小超过这个限制,工作将会终止。大的限制值可能导致driver出现内存溢出错误(依赖于spark.driver.memory和JVM中对象的内存消耗)。设置合理的限制,可以避免出现内存溢出错误。spark.serializerorg.apache.spark.serializer.JavaSerializer序列化对象使用的类。默认的java序列化类可以序列化任何可序列化的java对象但是它很慢。所有我们建议用org.apache.spark.serializer.KryoSerializerspark.kryo.classesToRegister(none)如果你用Kryo序列化,给定的用逗号分隔的自定义类名列表表示要注册的类spark.kryo.registrator(none)如果你用Kryo序列化,设置这个类去注册你的自定义类。如果你需要用自定义的方式注册你的类,那么这个属性是有用的。否则spark.kryo.classesToRegister会更简单。它应该设置一个继承自KryoRegistrator的类spark.local.dir/tmpSpark中暂存空间的使用目录。在Spark1.0以及更高的版本中,这个属性被SPARK_LOCAL_DIRS(Standalone, Mesos)和LOCAL_DIRS(YARN)环境变量覆盖。spark.logConffalse当SparkContext启动时,将有效的SparkConf记录为INFO。运行环境Property NameDefaultMeaningspark.executor.extraJavaOptions(none)传递给executors的JVM选项字符串。例如GC设置或者其它日志设置。注意,在这个选项中设置Spark属性或者堆大小是不合法的。Spark属性需要用SparkConf对象或者spark-submit脚本用到的spark-defaults.conf文件设置。堆内存可以通过spark.executor.memory设置spark.executor.extraClassPath(none)附加到executors的classpath的额外的classpath实体。这个设置存在的主要目的是Spark与旧版本的向后兼容问题。用户一般不用设置这个选项spark.executor.extraLibraryPath(none)指定启动executor的JVM时用到的库路径spark.executor.logs.rolling.strategy(none)设置executor日志的滚动(rolling)策略。默认情况下没有开启。可以配置为time(基于时间的滚动)和size(基于大小的滚动)。对于time,用spark.executor.logs.rolling.time.interval设置滚动间隔;对于size,用spark.executor.logs.rolling.size.maxBytes设置最大的滚动大小spark.executor.logs.rolling.time.intervaldailyexecutor日志滚动的时间间隔。默认情况下没有开启。合法的值是daily, hourly, minutely以及任意的秒。spark.executor.logs.rolling.size.maxBytes(none)executor日志的最大滚动大小。默认情况下没有开启。值设置为字节spark.executor.logs.rolling.maxRetaine

[1] [2] [3] [4]  下一页


Spark配置