天天看點

《Spark官方文檔》在YARN上運作Spark

spark在 0.6.0版本後支援在yarn(hadoop nextgen)上運作,并且在後續版本中不斷改進。

首先,确認 hadoop_conf_dir或yarn_conf_dir指向的包含了hadoop叢集的配置檔案。這些配置用于操作hdfs和連接配接yarn資料總管。在這個目錄下的這些配置檔案将被分發到yarn叢集中,是以應用所使用的容器能夠使用相同的配置。如果配置中的java系統參數或環境變量沒有被yarn所管理,就必須設定在spark應用的配置中(驅動、執行器、和運作在用戶端模式下的應用master)

有兩種模式能夠在yarn下啟動spark應用,yarn叢集模式和yarn用戶端模式。在yarn叢集方式,spark驅動運作在,yarn管理的運作在叢集上的應用主程序中,用戶端程式在應用初始化後就結。在yarn何況模式下,驅動運作在用戶端程序中,應用主程序隻能使用在yarn中請求的資源。

不同于standalone和mesos模式中通過 –master 參數指定master 位址。在yarn模式中,資料總管位址在hadoop配置中擷取。是以, –master參數可選yarn-client或yarn-cluster。

下面的指令能夠在yarn cluster下運作spark 應用:

例如:

上面的指令啟動了一個yarn端程式,調用預設的應用master,sparkpi作為master的子線程運作。用戶端定期連向應用master更新并在console中顯示狀态。當應用結束後用戶端程序也會退出。在後面的“調試應用”小節,将介紹如何檢視驅動器和執行器的日志。

同樣可以在yarn用戶端模式下運作spark應用,隻需要将“yarn-cluster”換成“yarn-client”

在yarn-culster模式下,驅動器和用戶端在不同的叢集上運作,是以在儲存在用戶端上檔案不能通過sparkcontext.addjar加入到運作沙盒中。為了讓sparkcontext.addjar能夠使用用戶端上的這些檔案,需要把他們通過–jar選項加入到啟動指令中。

在yarn上運作spark需要一個支援yarn的spark二進制包,這個包可以在spark項目網站上下載下傳。

spark在yarn上的大部配置設定置項和其他部署模式相同,可以在後面配置項一節獲得更多關于此的資訊,這些配置僅用于在yarn上運作spark。

用yarn術語來說,執行器、應用master都在容器(container)内運作。在應用結束後yarn會采用2種方式處理容器日志。如果開啟了日志歸集(yarn.log-aggregation-enable),日志将被拷到hdfs上,本地檔案将被删除。這些日志可以通過’yarn logs’指令在叢集的任何節點檢視。

上面的指令會列印出應用所有容器的日志檔案内容。當然也可以直接在hdfs檢視容器日志。存入日志的目錄通過yarn.nodemanager.remote-app-log-dir和yarn.nodemanager.remote-app-log-dir-suffix配置。同樣,也可以在spark web ui的執行器tab頁下檢視相關日志。前提是需要在 yarn-site.xml中配置 yarn.log.server.url,并保證spark曆史伺服器和mapreduce曆史伺服器正常運作。spark曆史伺服器ui上的log連接配接會重定向到mapreduce曆史伺服器來顯示歸集的日志。

如果沒有開啟日志歸集,日志會儲存在各個機器的yarn_app_logs_dir下,根據hadoop版本或安裝的不同一般是/tmp/logs 或 $hadoop_home/logs/userlogs。需要登入到各台機器上去檢視日志,這些日志會按應用id和容器id的結構來分子目錄儲存。同樣可以通過spark web ui來檢視日志,而不需要mapreduce曆史伺服器。

通過增加yarn.nodemanager.delete.debug-delay-sec,如36000,可以在容器啟動的各個節點yarn.nodemanager.local-dirs目錄保留的應用緩存中檢視每個容器的啟動環境。這個目錄下儲存了啟動腳本、jar包、啟動是的環境變量等資訊。這對調試,特别是classpath問題很有用。注,這些設定需要叢集管理者權限,并且要重新開機所有的節點管理器,是以在托管叢集上很難完成。

有幾種可選方式給應用master和執行器配置定制化的log4j配置:

1.通過在上傳應用的時候(spark-submit),在-file裡增加log4j.properties檔案

2.在執行器的spark.driver.extrajavaoptions,或在驅動器的spark.executor.extrajavaoptions 選項,增加-dlog4j.configuration=;。注,如果使用檔案,需要明确指定,并且需要在所有節點存在。

3. 更新$spark_conf_dir/log4j.properties檔案,此配置會和其他配置一起自動上傳。注:如果指定了多個選項,另外2個選項的優先級高于本配置。

如果采用第一個方式,需要注意的是,執行器和應用master使用同一個log4j配置,當他們跑在同一個節點的時候會有問題(如,嘗試寫同一個日志檔案)。

如果需要在yarn上顯示、彙聚日志,需要通過在log4j.properties用spark.yarn.app.container.log.dir配置相對路徑。例如,log4j.appender.file_appender.file=${spark.yarn.app.container.log.dir}/spark.log

對于streaming應用,配置configuring rollingfileappender并把路徑設定到yarn目錄裡,可以避免由于日志過大而硬碟空間不夠的問題。同時這些log還可以用yarn日志工具通路。

但是下列是在yarn環境特有的配置項

名稱

預設值

說明

spark.yarn.am.memory

512m

在終端模式下yarn應用master使用的記憶體總量,和jvm配置的格式一樣(如,512m、2g)在叢集模式下,用spark.driver.memory設定

spark.driver.cores

1

在yarn叢集模式下,驅動器使用的核心數。叢集模式下,驅動器與yarn應用master運作在同一個jvm中,是以這個參數還限定了應用master使用的核心數。在終端摩梭下,用spark.yarn.am.cores設定應用master使用的核心數

spark.yarn.am.cores

在終端模式下,yarn應用master使用的核心數

spark.yarn.am.waittime

100s

在yarn叢集模式下,代表應用master等待sparkcontxt進行初始化的時間。在yarn終端模式下,代表應用master等待驅動器連接配接的時間

spark.yarn.submit.file.replication

hdfs 預設副本數(一般是3)

應用上次檔案到hdfs時使用的hdfs複制數量。包括spark jar、應用jar,或者其他任意分布式緩存檔案或歸檔。

spark.yarn.preserve.staging.files

false

如果設定為true,在任務結束時保留中檔案,spark jar,app jar,分布式緩存檔案等。

spark.yarn.scheduler.heartbeat.interval-ms

3000

spark 應用master與yarn資料總管保持心跳的周期,機關為毫秒(ms)。上限是yarn失效周期(yarn.am.liveness-monitor.expiry-interval-ms)的一半

spark.yarn.scheduler.initial-allocation.interval

200ms

當有未處理的容器配置設定請求時,spark應用master與yarn資料總管間的心跳周期。不能大于spark.yarn.scheduler.heartbeat.interval-ms。如果未處理的容器配置設定請求持續存在,這個周期将會加倍,一直達到spark.yarn.scheduler.heartbeat.interval-ms。

spark.yarn.max.executor.failures

numexecutors * 2,至少3

當失敗的執行器數大于spark.yarn.max.executor.failures,應用将被标記為失敗

spark.yarn.historyserver.address

spark 曆史伺服器位址(例如, host.com:18080),不需要包好http://。預設為空,曆史伺服器是可選的。當應用結束時,spark資料總管将應用的連接配接從資料總管ui轉換到spark曆史伺服器ui。這個參數是可變的,可以在spark運作期間調整。例如,如果曆史伺服器和yarn管理器運作在一個節點上,可以設定為`${hadoopconf-yarn.resourcemanager.hostname}:18080`.

spark.yarn.dist.archives

逗号分隔的清單,用于存放從執行器工作目錄提取的歸檔檔案