在yarn上運行Spark

2018-02-24 15:58 更新

在YARN上運行Spark

配置

大部分為Spark on YARN模式提供的配置與其它部署模式提供的配置相同。下面這些是為Spark on YARN模式提供的配置。

Spark屬性

Property Name Default Meaning
spark.yarn.applicationMaster.waitTries 10 ApplicationMaster等待Spark master的次數(shù)以及SparkContext初始化嘗試的次數(shù)
spark.yarn.submit.file.replication HDFS默認(rèn)的復(fù)制次數(shù)(3) 上傳到HDFS的文件的HDFS復(fù)制水平。這些文件包括Spark jar、app jar以及任何分布式緩存文件/檔案
spark.yarn.preserve.staging.files false 設(shè)置為true,則在作業(yè)結(jié)束時保留階段性文件(Spark jar、app jar以及任何分布式緩存文件)而不是刪除它們
spark.yarn.scheduler.heartbeat.interval-ms 5000 Spark application master給YARN ResourceManager發(fā)送心跳的時間間隔(ms)
spark.yarn.max.executor.failures numExecutors * 2,最小為3 失敗應(yīng)用程序之前最大的執(zhí)行失敗數(shù)
spark.yarn.historyServer.address (none) Spark歷史服務(wù)器(如host.com:18080)的地址。這個地址不應(yīng)該包含一個模式(http://)。默認(rèn)情況下沒有設(shè)置值,這是因為該選項是一個可選選項。當(dāng)Spark應(yīng)用程序完成從ResourceManager UI到Spark歷史服務(wù)器UI的連接時,這個地址從YARN ResourceManager得到
spark.yarn.dist.archives (none) 提取逗號分隔的檔案列表到每個執(zhí)行器的工作目錄
spark.yarn.dist.files (none) 放置逗號分隔的文件列表到每個執(zhí)行器的工作目錄
spark.yarn.executor.memoryOverhead executorMemory * 0.07,最小384 分配給每個執(zhí)行器的堆內(nèi)存大?。ㄒ訫B為單位)。它是VM開銷、interned字符串或者其它本地開銷占用的內(nèi)存。這往往隨著執(zhí)行器大小而增長。(典型情況下是6%-10%)
spark.yarn.driver.memoryOverhead driverMemory * 0.07,最小384 分配給每個driver的堆內(nèi)存大小(以MB為單位)。它是VM開銷、interned字符串或者其它本地開銷占用的內(nèi)存。這往往隨著執(zhí)行器大小而增長。(典型情況下是6%-10%)
spark.yarn.queue default 應(yīng)用程序被提交到的YARN隊列的名稱
spark.yarn.jar (none) Spark jar文件的位置,覆蓋默認(rèn)的位置。默認(rèn)情況下,Spark on YARN將會用到本地安裝的Spark jar。但是Spark jar也可以HDFS中的一個公共位置。這允許YARN緩存它到節(jié)點上,而不用在每次運行應(yīng)用程序時都需要分配。指向HDFS中的jar包,可以這個參數(shù)為"hdfs:///some/path"
spark.yarn.access.namenodes (none) 你的Spark應(yīng)用程序訪問的HDFS namenode列表。例如,spark.yarn.access.namenodes=hdfs://nn1.com:8032,hdfs://nn2.com:8032,Spark應(yīng)用程序必須訪問namenode列表,Kerberos必須正確配置來訪問它們。Spark獲得namenode的安全令牌,這樣Spark應(yīng)用程序就能夠訪問這些遠(yuǎn)程的HDFS集群。
spark.yarn.containerLauncherMaxThreads 25 為了啟動執(zhí)行者容器,應(yīng)用程序master用到的最大線程數(shù)
spark.yarn.appMasterEnv.[EnvironmentVariableName] (none) 添加通過EnvironmentVariableName指定的環(huán)境變量到Application Master處理YARN上的啟動。用戶可以指定多個該設(shè)置,從而設(shè)置多個環(huán)境變量。在yarn-cluster模式下,這控制Spark driver的環(huán)境。在yarn-client模式下,這僅僅控制執(zhí)行器啟動者的環(huán)境。

在YARN上啟動Spark

確保HADOOP_CONF_DIRYARN_CONF_DIR指向的目錄包含Hadoop集群的(客戶端)配置文件。這些配置用于寫數(shù)據(jù)到dfs和連接到Y(jié)ARN ResourceManager。

有兩種部署模式可以用來在YARN上啟動Spark應(yīng)用程序。在yarn-cluster模式下,Spark driver運行在application master進(jìn)程中,這個進(jìn)程被集群中的YARN所管理,客戶端會在初始化應(yīng)用程序之后關(guān)閉。在yarn-client模式下,driver運行在客戶端進(jìn)程中,application master僅僅用來向YARN請求資源。

和Spark單獨模式以及Mesos模式不同,在這些模式中,master的地址由"master"參數(shù)指定,而在YARN模式下,ResourceManager的地址從Hadoop配置得到。因此master參數(shù)是簡單的yarn-clientyarn-cluster。

在yarn-cluster模式下啟動Spark應(yīng)用程序。

./bin/spark-submit --class path.to.your.Class --master yarn-cluster [options] <app jar> [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客戶端程序用來啟動默認(rèn)的 Application Master,然后SparkPi會作為Application Master的子線程運行??蛻舳藭ㄆ诘妮喸傾pplication Master用于狀態(tài)更新并將更新顯示在控制臺上。一旦你的應(yīng)用程序運行完畢,客戶端就會退出。

在yarn-client模式下啟動Spark應(yīng)用程序,運行下面的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不支持容器核的資源請求。因此,當(dāng)運行早期的版本時,通過命令行參數(shù)指定的核的數(shù)量無法傳遞給YARN。在調(diào)度決策中,核請求是否兌現(xiàn)取決于用哪個調(diào)度器以及如何配置調(diào)度器。
  • Spark executors使用的本地目錄將會是YARN配置(yarn.nodemanager.local-dirs)的本地目錄。如果用戶指定了spark.local.dir,它將被忽略。
  • --files--archives選項支持指定帶 # 號文件名。例如,你能夠指定--files localtest.txt#appSees.txt,它上傳你在本地命名為localtest.txt的文件到HDFS,但是將會鏈接為名稱appSees.txt。當(dāng)你的應(yīng)用程序運行在YARN上時,你應(yīng)該使用appSees.txt去引用該文件。
  • 如果你在yarn-cluster模式下運行SparkContext.addJar,并且用到了本地文件, --jars選項允許SparkContext.addJar函數(shù)能夠工作。如果你正在使用 HDFS, HTTP, HTTPS或FTP,你不需要用到該選項
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號