Spark性能调优系列:Spark参数配置⼤全(官⽹资料)Spark参数配置⼤全
Spark提供了三个位置来配置系统
Spark属性控制⼤多数应⽤程序参数,可以使⽤SparkConf对象或Java系统属性来设置。
通过conf/spark-env.sh每个节点上的脚本,环境变量可⽤于设置每台计算机的设置,例如IP地址。
可以通过配置⽇志log4j.properties。
Spark属性
Spark属性控制⼤多数应⽤程序设置,并分别为每个应⽤程序配置。这些属性可以在传递给 的SparkConf上直接设置SparkContext。SparkConf允许您配置⼀些常⽤属性(例如主URL和应⽤程序名称),以及通过该set()⽅法配置任意键/值对 。
例如,我们可以使⽤两个线程来初始化应⽤程序,如下所⽰:
请注意,我们使⽤local [2]运⾏,这意味着两个线程-表⽰“最⼩”并⾏度,这可以帮助检测仅当我们在分布式上下⽂中运⾏时才存在的错误。
val conf = new SparkConf()
.setMaster("local[2]")
.setAppName("CountingSheep")
val sc = new SparkContext(conf)
动态加载Spark属性
在某些情况下,您可能希望避免对中的某些配置进⾏硬编码SparkConf。例如,如果您想使⽤不同的主机或不同的内存量运⾏同⼀应⽤程序。Spark允许您简单地创建⼀个空的conf
val sc = new SparkContext(new SparkConf())
运⾏时配置值
./bin/spark-submit --name "My app" --master local[4] --conf abled=false
--conf "aJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" myApp.jar
Spark Shell和spark-submit ⼯具⽀持两种动态加载配置的⽅式。第⼀个是命令⾏选项,例如--master,如上所⽰。
spark-submit可以使⽤该--conf 标志接受任何Spark属性,但对在启动Spark应⽤程序中起作⽤的属性使⽤特殊标志。运⾏./bin/spark-submit --help将显⽰这些选项的完整列表。
读取配置
bin/spark-submit还将从中读取配置选项f,其中每⾏包含⼀个键和⼀个由空格分隔的值。例如:
spark.master spark://5.6.7.8:7077
< 4g
abled true
spark.serializer org.apache.spark.serializer.KryoSerializer
分别有三个地⽅可以设置Spark属性值
1.在spark应⽤代码SparkConf中设置的值。
2.在spark-submit或spark-shell时设置的值。
3.在f⽂件⾥⾯设置的值。
优先级
SparkConf > spark-submit或spark-shell > f。同时存在时,优先级⾼的覆盖优先级低的。
Spark属性主要可以分为两种
⼀种与部署相关,例如“ ”,“ utor.instances”,SparkConf在运⾏时通过编程设置时,此类属性可能不会受到影响,或者⾏为取决于您选另⼀个主要与Spark运⾏时控件有关,例如“ spark.task.maxFailures”,可以⽤任何⼀种⽅式设置这种属性。
⾃定义Hadoop/hive配置
如果您的Spark应⽤程序正在与Hadoop和/或Hive交互,则Spark的类路径中可能存在Hadoop / Hive配置⽂件。
多个正在运⾏的应⽤程序可能需要不同的Hadoop / Hive客户端配置。您可以复制和修改l,l,l,hive-
全地对其进⾏更改。
更好的选择是使⽤形式的spark hadoop属性spark.hadoop.*。它们可以被视为与可以在$SPARK_HOME/f
在某些情况下,您可能希望避免对中的某些配置进⾏硬编码SparkConf。例如,Spark允许您简单地创建⼀个空的conf并设置spark /
spark hadoop属性。
val conf = new SparkConf().set("spark.hadoop.abc.def","xyz")
val sc = new SparkContext(conf)
运⾏时修改或添加配置
./bin/spark-submit \
--name "My app" \
--master local[4] \
--conf abled=false \
--conf "aJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" \
--conf spark.hadoop.abc.def=xyz \
myApp.jar
配置⽇志
Spark使⽤log4j来进⾏⽇志记录。您可以通过log4j.properties在conf⽬录中添加⽂件来配置它 。⼀种开始的⽅法是复
制plate那⾥的现有⽂件 。
覆盖配置⽬录
要指定默认的“ SPARK_HOME / conf”以外的其他配置⽬录,可以设置SPARK_CONF_DIR。Spark将使⽤此⽬录中的配置⽂件
(f,spark-env.sh,log4j.properties等)。
继承Hadoop集配置
如果计划使⽤Spark从HDFS读取和写⼊,则Spark的类路径中应包含两个Hadoop配置⽂件:
环境变量
可以通过环境变量配置某些Spark设置,这些环境变量是从conf/spark-env.sh安装Spark的⽬录(或d Windows)中
的脚本读取的 。在独⽴模式和Mesos模式下,此⽂件可以提供计算机的特定信息,例如主机名。运⾏本地Spark应⽤程序或提交脚本时也
会提供该资源。
请注意,conf/spark-env.sh默认情况下在安装Spark时不存在。但是,您可以复制conf/plate以创建它。确保使副本可执⾏。
可以在设置以下变量spark-env.sh:
环境变量含义
JAVA_HOME安装Java的位置(如果不是默认设置PATH)。
PYSPARK_PYTHON在驱动程序和⼯作程序中都可⽤于PySpark的Python⼆进制可执⾏⽂件(python2.7如果可⽤,则为默认值,否则
为python)。spark.pyspark.python如果设置了属性,则优先
PYSPARK_DRIVER_ PYTHON 仅在驱动程序中⽤于PySpark的Python⼆进制可执⾏⽂件(默认为PYSPARK_PYTHON)。spark.pyspark.driver.python如果设置了属性,则优先
SPARKR_DRIVER_R⽤于SparkR shell的R⼆进制可执⾏⽂件(默认为R)。shellmand如果设置了属性,则优先
SPARK_LOCAL_IP绑定机器的IP地址。
SPARK_PUBLIC_DN
S
您的Spark程序的主机名将播发到其他计算机。
除上述内容外,还有⽤于设置Spark ,例如,每台计算机上使⽤的内核数量和最⼤内存。
由于spark-env.sh是Shell脚本,因此其中⼀些可以通过编程设置-例如,您可以SPARK_LOCAL_IP通过查特定⽹络接⼝的IP进⾏计算。注意:在YARN cluster模式下运⾏Spark时,需要使⽤⽂件中的spark.yarn.appMasterEnv.[EnvironmentVariableName]属性设置环境变
量f。设置的环境变量spark-env.sh将不会以模式显⽰在YARN Application Master进程中cluster。有关更多信息,请参见。
可⽤属性
属性名称默认含义
spark.app.name(none)您的应⽤程序的名称。这将出现在UI和⽇志数据中。
s1仅在集模式下,⽤于驱动程序进程的核⼼数。
spark.driver.maxResultSize1g每个Spark操作(例如收集)的所有分区的序列化结果的总⼤⼩的限制(以字节为单位)。⾄少应
为1M,否则应为0(⽆限制)。如果总⼤⼩超过此限制,作业将中⽌。具有较⾼的限制可能会导
致驱动程序发⽣内存不⾜错误(取决于和JVM中对象的内存开销)。设置
适当的限制可以保护驱动程序免受内存不⾜错误的影响。
1g的存储器的量以⽤于驱动器的过程,即其中SparkContext被初始化时,在相同的格式作为具有
⼤⼩单位后缀(“K”,“M”,“G”或“T”)JVM存储器串(例如512m,2g) 。
注意:在客户端模式下,不得通过SparkConf 直接在应⽤程序中设置此配置,因为此时驱动程序
JVM已经启动。相反,请通过--driver-memory命令⾏选项或在默认属性⽂件中进⾏设置。
Overhea d driverMemory *
0.10,最⼩为384
除⾮另有说明,否则在集模式下(MiB)以集模式为每个驱动程序分配的堆外内存量。这是内
存,⽤于解决VM开销,内部字符串,其他本机开销等问题。随着容器⼤⼩的增加(通常为6%⾄
10%),该内存通常会增加。YARN和Kubernetes当前⽀持此选项。
<1g的存储器的量每执⾏过程中使⽤,在相同的格式作为具有⼤⼩单位后缀
(“K”,“M”,“G”或“t”)(例如JVM存储器串512m,2g)。
< ory Not set除⾮另有说明,否则在MiB中要分配给每个执⾏程序中PySpark的内存量。如果设置,执⾏者的PySpark内存将被限制为该数量。如果未设置,Spark将不会限制Python的内存使⽤,并且取决
于应⽤程序来避免超出与其他⾮JVM进程共享的开销内存空间。当PySpark在YARN或
Kubernetes中运⾏时,此内存将添加到执⾏程序资源请求中。注意:在不⽀持资源限制的平台
(例如Windows)上,可能不会限制Python内存的使⽤。
0.10,最⼩为384
除⾮另有说明,否则每个执⾏器要分配的堆外内存量(以MiB为单位)。这是⼀种内存,⽤于解决
VM开销,内部字符串,其他本机开销等问题。随着执⾏程序⼤⼩的增加(通常为6%⾄10%),
内存通常会增加。YARN和Kubernetes当前⽀持此选项。
Spark的侦听器总线中注册。如果类具有接受SparkConf的单参数构造函数,则该构造函数将被
调⽤;否则,将调⽤零参数构造函数。如果不到有效的构造函数,则SparkContext创建将失
败,并出现异常。
spark.local.dir/ tmp⽤于Spark中“临时”空间的⽬录,包括映射输出⽂件和存储在磁盘上的RDD。它应该在系统中
的快速本地磁盘上。它也可以是不同磁盘上多个⽬录的逗号分隔列表。注意:在Spark 1.0及更⾼
版本中,它将由集管理器设置的SPARK_LOCAL_DIRS(独
⽴),MESOS_SANDBOX(Mesos)或LOCAL_DIRS(YARN)环境变量覆盖。
spark.logConf false启动SparkContext时,将有效的SparkConf记录为INFO。
spark.master(none)要连接的集管理器。请参阅列表 。
spark.submit.deployMode(none)Spark驱动程序的部署模式,可以是“客户端”或“集”,这意味着可以在集中的⼀个节点上
本地(“客户端”)或远程(“集”)启动驱动程序。
spark.log.callerContext(none)在Yarn / HDFS上运⾏时将写⼊Yarn RM⽇志/ HDFS审核⽇志中的应⽤程序信息。它的长度取
决于Hadoop配置t.max.size。它应该简洁明了,通常最多可以包含50个字
符。
spark.driver.supervise false如果为true,则如果驱动程序以⾮零退出状态失败,则会⾃动重新启动驱动程序。仅在Spark独
⽴模式或Mesos集部署模式下有效。
运⾏环境
属性名称默认含义
aClassPath(none)额外的类路径条⽬,以前置于驱动程序的类路径。
注意:在客户端模式下,不得通过SparkConf 直接在应⽤程序中设置此配置,因为此时驱动程序
JVM已经启动。相反,请通过--driver-class-path命令⾏选项或在默认属性⽂件中进⾏设置。
aJavaOptions(none)传递给驱动程序的⼀串额外的JVM选项。例如,GC设置或其他⽇志记录。请注意,使⽤此选项
设置最⼤堆⼤⼩(-Xmx)设置是⾮法的。可以在集模式下通过--driver-
memory客户端模式下的命令⾏选项来设置最⼤堆⼤⼩设置。
注意:在客户端模式下,不得通过SparkConf 直接在应⽤程序中设置此配置,因为此时驱动程序
JVM已经启动。相反,请通过--driver-java-options命令⾏选项或在默认属性⽂件中进⾏设置。
aLibraryPath(none)设置启动驱动程序JVM时要使⽤的特殊库路径。
注意:在客户端模式下,不得通过SparkConf 直接在应⽤程序中设置此配置,因为此时驱动程序
JVM已经启动。相反,请通过--driver-library-path命令⾏选项或在默认属性⽂件中进⾏设置。
spark.driver.userClassPathFir st false(实验性的)在驱动程序中加载类时,是否使⽤户添加的jar优先于Spark⾃⼰的jar。此功能可⽤于缓解Spark依赖项和⽤户依赖项之间的冲突。⽬前,这是⼀项实验功能。仅在集模式下使
⽤。
旧版本的Spark向后兼容。⽤户通常不需要设置此选项。
submit脚本⼀起使⽤的f⽂件设置Spark属性。可以通过
<设置最⼤堆⼤⼩设置。下列符号(如果存在)将被内插:将被应⽤程
序ID替换,并将被执⾏者ID替换。例如,要在/ tmp中启⽤详细gc⽇志记录到以应⽤程序的执⾏
者ID命名的⽂件,请传递以下值: -verbose:gc -Xloggc:/tmp/-.gc
th
(none)设置启动执⾏程序JVM时要使⽤的特殊库路径。
xRetainedFiles
(none)设置系统将保留的最新滚动⽇志⽂件的数量。较旧的⽇志⽂件将被删除。默认禁⽤。
<
ableCompression
fasle启⽤执⾏程序⽇志压缩。如果启⽤,则滚动的执⾏程序⽇志将被压缩。默认禁⽤。
ategy的滚动)或“尺⼨”(基于尺⼨的滚动)。对于“时间”,⽤
于lling.time.interval设置滚动间隔。对于“⼤⼩”,⽤
于lling.maxSize设置滚动的最⼤⽂件⼤⼩。
是daily,hourly,minutely或在⼏秒钟内的任何时间间隔。请参
阅lling.maxRetainedFiles 以⾃动清除旧⽇志。
First
false(实验性)与的功能相同spark.driver.userClassPathFirst,但适⽤于执⾏程序实例。
<(?i)secret|password正则表达式决定驱动程序和执⾏程序环境中的哪些Spark配置属性和环境变量包含敏感信息。当
此正则表达式与属性键或值匹配时,将从环境UI和各种⽇志(如YARN和事件⽇志)中删除该
值。
spark.python.profile false在Python worker中启⽤分析,配置⽂件结果将显⽰为sc.show_profiles(),或者将在驱动程序
退出之前显⽰。也可以通过将它转储到磁盘中 sc.dump_profiles(path)。如果某些配置⽂件结果
是⼿动显⽰的,则在退出驱动程序之前不会⾃动显⽰。默认情况
下pyspark.profiler.BasicProfiler将使⽤,但是可以通过将探查器类作为参数传递
给SparkContext构造函数来覆盖它。
spark.python.profile.dump(none)在驱动程序退出之前,⽤于转储概要⽂件结果的⽬录。结果将作为每个RDD的单独⽂件转储。可
以通过加载它们pstats.Stats()。如果指定此选项,则配置⽂件结果将不会⾃动显⽰。
spark.512m的存储器的量,以聚合期间每蟒⼯作进程使⽤,以相同的格式作为
具有⼤⼩单位后缀
(“K”,“M”,“G”或“t”)(例如JVM存储器串512m,2g)。如果聚合过程中使⽤的
内存超过该数量,则会将数据溢出到磁盘中。
spark.use true是否重复使⽤Python worker。如果是,它将使⽤固定数量的Python⼯作者,不需要为每个任
务fork()⼀个Python进程。如果存在⼤型⼴播,这将⾮常有⽤,那么对于每个任务,都不需
要将⼴播从JVM传输到Python worker。
spark.files以逗号分隔的⽂件列表,将其放置在每个执⾏程序的⼯作⽬录中。允许使⽤⼩球。
spark.submit.pyFiles以逗号分隔的.zip,.egg或.py⽂件列表,⽤于Python应⽤程序的PYTHONPATH上。允许使⽤
⼩球。
spark.jars以逗号分隔的jar列表,包括在驱动程序和执⾏程序的类路径中。允许使⽤⼩球。
spark.jars.packages以逗号分隔的jar的Maven坐标列表,包括在驱动程序和执⾏程序的类路径中。坐标应为
groupId:artifactId:version。如果spark.jars.ivySettings 给出了构件,则将根据⽂件中的配
置来解析构件,否则将在本地maven存储库中搜索构件,然后在maven Central中搜索,最后
在命令⾏选项中给出的任何其他远程存储库中进⾏搜索--repositories。有关更多详细信息,请参
见 。
ludes⽤逗号分隔的groupId:artifactId列表,在解析提供的依赖项时要排
除,spark.jars.packages以避免依赖项冲突。
spark.jars.ivy指定Ivy⽤户⽬录的路径,⽤于从中进⾏本地Ivy缓存和包⽂件 spark.jars.packages。这将覆
xml标签大全盖ivy.default.ivy.user.dir 默认为〜/ .ivy2 的Ivy属性。
spark.jars.ivySettings常春藤设置⽂件的路径,⽤于⾃定义使⽤spark.jars.packages ⽽不是内置默认值
(例如maven
central)指定的jar的分辨率。附加仓库由命令⾏选项指定--
repositories或positories也将被包括在内。对于允许Spark从防⽕墙后⾯解析伪像很
有⽤,例如,通过内部伪像服务器(如Artifactory)。有关设置⽂件格式的详细信息,请参见
positories以逗号分隔的其他远程存储库列表,以搜索⽤--packages或给出的Maven坐
标spark.jars.packages。
spark.pyspark.driver.python在驱动程序中⽤于PySpark的Python⼆进制可执⾏⽂件。(默认为spark.pyspark.python)spark.pyspark.python在驱动程序和执⾏程序中都可⽤于PySpark的Python⼆进制可执⾏⽂件。
内存管理
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论