×
Spark 快速入门Spark 编程指南引入 Spark初始化 SparkSpark 共享变量

Spark 快速上手

Spark 独立应用程序Spark ShellSpark 运行程序Spark RDDsSpark 并行集合Spark 外部数据集Spark RDD 操作Spark RDD持久化Spark StreamingSpark Streaming示例

Spark 基本概念

Spark Streaming关联初始化StreamingContextSpark Streaming离散流Spark 输入DStreamsSpark DStream中的转换Spark DStream的输出操作Spark DStreams缓存或持久化Spark Streaming CheckpointingSpark Streaming部署应用程序Spark Streaming监控应用程序Spark Streaming性能调优Spark Streaming优化执行时间Spark Streaming批容量Spark Streaming内存调优Spark Streaming容错语义Spark SQLSpark SQL开始Spark SQL性能调优Spark SQL其他接口编写语言集成相关查询Spark SQL数据类型Spark SQL数据源Spark SQL RDDsSpark SQL parquet文件Spark SQL JSON数据集Spark SQL Hive表Spark GraphX编程指南Spark GraphX开始Spark GraphX图算法Spark GraphX例子Spark GraphX提交应用程序Spark 独立运行Spark 在yarn上运行Spark GraphX属性图Spark 配置Spark GraphX图操作符Spark GraphX Pregel APISpark GraphX图构造者Spark GraphX顶点和边RDDs

在yarn上运行Spark


配置

大部分为Spark on YARN模式提供的配置与其它部署模式提供的配置相同。下面这些是为Spark on YARN模式提供的配置。

Spark属性

Property Name Default Meaning
spark.yarn.applicationMaster.waitTries 10 ApplicationMaster等待Spark master的次数以及SparkContext初始化尝试的次数
spark.yarn.submit.file.replication HDFS默认的复制次数(3) 上传到HDFS的文件的HDFS复制水平。这些文件包括Spark jar、app jar以及任何分布式缓存文件/档案
spark.yarn.preserve.staging.files false 设置为true,则在作业结束时保留阶段性文件(Spark jar、app jar以及任何分布式缓存文件)而不是删除它们
spark.yarn.scheduler.heartbeat.interval-ms 5000 Spark application master给YARN ResourceManager发送心跳的时间间隔(ms)
spark.yarn.max.executor.failures numExecutors * 2,最小为3 失败应用程序之前最大的执行失败数
spark.yarn.historyServer.address (none) Spark历史服务器(如host.com:18080)的地址。这个地址不应该包含一个模式(http://)。默认情况下没有设置值,这是因为该选项是一个可选选项。当Spark应用程序完成从ResourceManager UI到Spark历史服务器UI的连接时,这个地址从YARN ResourceManager得到
spark.yarn.dist.archives (none) 提取逗号分隔的档案列表到每个执行器的工作目录
spark.yarn.dist.files (none) 放置逗号分隔的文件列表到每个执行器的工作目录
spark.yarn.executor.memoryOverhead executorMemory * 0.07,最小384 分配给每个执行器的堆内存大小(以MB为单位)。它是VM开销、interned字符串或者其它本地开销占用的内存。这往往随着执行器大小而增长。(典型情况下是6%-10%)
spark.yarn.driver.memoryOverhead driverMemory * 0.07,最小384 分配给每个driver的堆内存大小(以MB为单位)。它是VM开销、interned字符串或者其它本地开销占用的内存。这往往随着执行器大小而增长。(典型情况下是6%-10%)
spark.yarn.queue default 应用程序被提交到的YARN队列的名称
spark.yarn.jar (none) Spark jar文件的位置,覆盖默认的位置。默认情况下,Spark on YARN将会用到本地安装的Spark jar。但是Spark jar也可以HDFS中的一个公共位置。这允许YARN缓存它到节点上,而不用在每次运行应用程序时都需要分配。指向HDFS中的jar包,可以这个参数为"hdfs:///some/path"
spark.yarn.access.namenodes (none) 你的Spark应用程序访问的HDFS namenode列表。例如,spark.yarn.access.namenodes=hdfs://nn1.com:8032,hdfs://nn2.com:8032,Spark应用程序必须访问namenode列表,Kerberos必须正确配置来访问它们。Spark获得namenode的安全令牌,这样Spark应用程序就能够访问这些远程的HDFS集群。
spark.yarn.containerLauncherMaxThreads 25 为了启动执行者容器,应用程序master用到的最大线程数
spark.yarn.appMasterEnv.[EnvironmentVariableName] (none) 添加通过EnvironmentVariableName指定的环境变量到Application Master处理YARN上的启动。用户可以指定多个该设置,从而设置多个环境变量。在yarn-cluster模式下,这控制Spark driver的环境。在yarn-client模式下,这仅仅控制执行器启动者的环境。

在YARN上启动Spark

确保HADOOP_CONF_DIRYARN_CONF_DIR指向的目录包含Hadoop集群的(客户端)配置文件。这些配置用于写数据到dfs和连接到YARN ResourceManager。

有两种部署模式可以用来在YARN上启动Spark应用程序。在yarn-cluster模式下,Spark driver运行在application master进程中,这个进程被集群中的YARN所管理,客户端会在初始化应用程序之后关闭。在yarn-client模式下,driver运行在客户端进程中,application master仅仅用来向YARN请求资源。

和Spark单独模式以及Mesos模式不同,在这些模式中,master的地址由"master"参数指定,而在YARN模式下,ResourceManager的地址从Hadoop配置得到。因此master参数是简单的yarn-clientyarn-cluster

在yarn-cluster模式下启动Spark应用程序。

./bin/spark-submit --class path.to.your.Class --master yarn-cluster [options]  [app options]

例子:

$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi 
    --master yarn-cluster 
    --num-executors 3 
    --driver-memory 4g 
    --executor-memory 2g 
    --executor-cores 1 
    --queue thequeue 
    lib/spark-examples*.jar 
    10

以上启动了一个YARN客户端程序用来启动默认的 Application Master,然后SparkPi会作为Application Master的子线程运行。客户端会定期的轮询Application Master用于状态更新并将更新显示在控制台上。一旦你的应用程序运行完毕,客户端就会退出。

在yarn-client模式下启动Spark应用程序,运行下面的shell脚本

$ ./bin/spark-shell --master yarn-client

添加其它的jar

在yarn-cluster模式下,driver运行在不同的机器上,所以离开了保存在本地客户端的文件,SparkContext.addJar将不会工作。为了使SparkContext.addJar用到保存在客户端的文件,在启动命令中加上--jars选项。

$ ./bin/spark-submit --class my.main.Class 
    --master yarn-cluster 
    --jars my-other-jar.jar,my-other-other-jar.jar
    my-main-jar.jar
    app_arg1 app_arg2

注意事项

  • 在Hadoop 2.2之前,YARN不支持容器核的资源请求。因此,当运行早期的版本时,通过命令行参数指定的核的数量无法传递给YARN。在调度决策中,核请求是否兑现取决于用哪个调度器以及如何配置调度器。
  • Spark executors使用的本地目录将会是YARN配置(yarn.nodemanager.local-dirs)的本地目录。如果用户指定了spark.local.dir,它将被忽略。
  • --files--archives选项支持指定带 # 号文件名。例如,你能够指定--files localtest.txt#appSees.txt,它上传你在本地命名为localtest.txt的文件到HDFS,但是将会链接为名称appSees.txt。当你的应用程序运行在YARN上时,你应该使用appSees.txt去引用该文件。
  • 如果你在yarn-cluster模式下运行SparkContext.addJar,并且用到了本地文件, --jars选项允许SparkContext.addJar函数能够工作。如果你正在使用 HDFS, HTTP, HTTPS或FTP,你不需要用到该选项

分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)