<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Running Spark on YARN 支持在 [YARN (Hadoop NextGen)](http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/YARN.html) 上運行是在 Spark 0.6.0 版本中加入到 Spark 中的,并且在后續的版本中得到改進的。 # 啟動 Spark on YARN 確保 `HADOOP_CONF_DIR` 或者 `YARN_CONF_DIR` 指向包含 Hadoop 集群的(客戶端)配置文件的目錄。這些配置被用于寫入 HDFS 并連接到 YARN ResourceManager。此目錄中包含的配置將被分發到 YARN 集群,以便 application(應用程序)使用的所有的所有 containers(容器)都使用相同的配置。如果配置引用了 Java 系統屬性或者未由 YARN 管理的環境變量,則還應在 Spark 應用程序的配置(driver(驅動程序),executors(執行器),和在客戶端模式下運行時的 AM)。 有兩種部署模式可以用于在 YARN 上啟動 Spark 應用程序。在 `cluster` 集群模式下,Spark driver 運行在集群上由 YARN 管理的application master 進程內,并且客戶端可以在初始化應用程序后離開。在 `client` 客戶端模式下,driver 在客戶端進程中運行,并且 application master 僅用于從 YARN 請求資源。 與 [Spark standalone](spark-standalone.html) 和 [Mesos](running-on-mesos.html) 不同的是,在這兩種模式中,master 的地址在 `--master` 參數中指定,在 YARN 模式下,ResourceManager 的地址從 Hadoop 配置中選取。因此,`--master` 參數是 `yarn`。 在 `cluster` 集群模式下啟動 Spark 應用程序: ``` $ ./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster [options] <app jar> [app options] ``` 例如: ``` $ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ --driver-memory 4g \ --executor-memory 2g \ --executor-cores 1 \ --queue thequeue \ lib/spark-examples*.jar \ 10 ``` 上面啟動一個 YARN 客戶端程序,啟動默認的 Application Master。然后 SparkPi 將作為 Application Master 的子進程運行。客戶端將定期輪詢 Application Master 以獲取狀態的更新并在控制臺中顯示它們。一旦您的應用程序完成運行后,客戶端將退出。請參閱下面的 “調試應用程序” 部分,了解如何查看 driver 和 executor 的日志。 要在 `client` 客戶端模式下啟動 Spark 應用程序,請執行相同的操作,但是將 `cluster` 替換 `client`。下面展示了如何在 `client` 客戶端模式下運行 `spark-shell`: ``` $ ./bin/spark-shell --master yarn --deploy-mode client ``` ## 添加其他的 JARs 在 `cluster` 集群模式下,driver 在與客戶端不同的機器上運行,因此 `SparkContext.addJar` 將不會立即使用客戶端本地的文件運行。要使客戶端上的文件可用于 `SparkContext.addJar`,請在啟動命令中使用 `--jars` 選項來包含這些文件。 ``` $ ./bin/spark-submit --class my.main.Class \ --master yarn \ --deploy-mode cluster \ --jars my-other-jar.jar,my-other-other-jar.jar \ my-main-jar.jar \ app_arg1 app_arg2 ``` # 準備 在 YARN 上運行 Spark 需要使用 YARN 支持構建的二進制分布式的 Spark(a binary distribution of Spark)。二進制文件(binary distributions)可以從項目網站的 [下載頁面](http://spark.apache.org/downloads.html) 下載。要自己構建 Spark,請參考 [構建 Spark](building-spark.html)。 要使 Spark 運行時 jars 可以從 YARN 端訪問,您可以指定 `spark.yarn.archive` 或者 `spark.yarn.jars`。更多詳細的信息,請參閱 [Spark 屬性](running-on-yarn.html#spark-properties)。如果既沒有指定 `spark.yarn.archive` 也沒有指定 `spark.yarn.jars`,Spark 將在 `$SPARK_HOME/jars` 目錄下創建一個包含所有 jar 的 zip 文件,并將其上傳到 distributed cache(分布式緩存)中。 # 配置 對于 Spark on YARN 和其他的部署模式,大多數的配置是相同的。有關這些的更多信息,請參閱 [配置頁面](configuration.html)。這些是特定于 YARN 上的 Spark 的配置。 # 調試應用 在 YARN 術語中,executors(執行器)和 application masters 在 “containers(容器)” 中運行時。YARN 有兩種模式用于在應用程序完成后處理容器日志(container logs)。如果啟用日志聚合(aggregation)(使用 `yarn.log-aggregation-enable` 配置),容器日志(container logs)將復制到 HDFS 并在本地計算機上刪除。可以使用 `yarn logs` 命令從集群中的任何位置查看這些日志。 ``` yarn logs -applicationId <app ID> ``` 將打印來自給定的應用程序的所有容器(containers)的所有的日志文件的內容。你還可以使用 HDFS shell 或者 API 直接在 HDFS 中查看容器日志文件(container log files)。可以通過查看您的 YARN 配置(`yarn.nodemanager.remote-app-log-dir` 和 `yarn.nodemanager.remote-app-log-dir-suffix`)找到它們所在的目錄。日志還可以在 Spark Web UI 的 “執行程序(Executors)”選項卡下找到。您需要同時運行 Spark 歷史記錄服務器(Spark history server)和 MapReduce 歷史記錄服務器(MapReduce history server),并在 `yarn-site.xm`l 文件中正確配置 `yarn.log.server.url`。Spark 歷史記錄服務器 UI 上的日志將重定向您到 MapReduce 歷史記錄服務器以顯示聚合日志(aggregated logs)。 當未啟用日志聚合時,日志將在每臺計算機上的本地保留在 `YARN_APP_LOGS_DIR 目錄下`,通常配置為 `/tmp/logs` 或者 `$HADOOP_HOME/logs/userlogs`,具體取決于 Hadoop 版本和安裝。查看容器(container)的日志需要轉到包含它們的主機并在此目錄中查看它們。子目錄根據應用程序 ID(application ID)和 容器 ID(container ID)組織日志文件。日志還可以在 Spark Web UI 的 “執行程序(Executors)” 選項卡下找到,并且不需要運行 MapReduce history server。 要查看每個 container(容器)的啟動環境,請將 `yarn.nodemanager.delete.debug-delay-sec` 增加到一個較大的值(例如 `36000`),然后通過 `yarn.nodemanager.local-dirs` 訪問應用程序緩存,在容器啟動的節點上。此目錄包含啟動腳本(launch script),JARs,和用于啟動每個容器的所有的環境變量。這個過程對于調試 classpath 問題特別有用。(請注意,啟用此功能需要集群設置的管理員權限并且還需要重新啟動所有的 node managers,因此這不適用于托管集群)。 要為 application master 或者 executors 使用自定義的 log4j 配置,請選擇以下選項: * 使用 `spark-submit` 上傳一個自定義的 `log4j.properties`,通過將 spark-submit 添加到要與應用程序一起上傳的文件的 –files 列表中。 * add `-Dlog4j.configuration=&lt;location of configuration file&gt;` to `spark.driver.extraJavaOptions` (for the driver) or `spark.executor.extraJavaOptions` (for executors). Note that if using a file, the `file:` protocol should be explicitly provided, and the file needs to exist locally on all the nodes. * 添加 `-Dlog4j.configuration=&lt;配置文件的位置&gt;` 到 `spark.driver.extraJavaOptions`(對于驅動程序)或者 containers(對于執行者)。請注意,如果使用文件,文件:協議(protocol)應該被顯式提供,并且該文件需要在所有節點的本地存在。 * 更新 `$SPARK_CONF_DIR/log4j.properties` 文件,并且它將與其他配置一起自動上傳。請注意,如果指定了多個選項,其他 2 個選項的優先級高于此選項。 請注意,對于第一個選項,executors 和 application master 將共享相同的 log4j 配置,這當它們在同一個節點上運行的時候,可能會導致問題(例如,試圖寫入相同的日志文件)。 如果你需要引用正確的位置將日志文件放在 YARN 中,以便 YARN 可以正確顯示和聚合它們,請在您的 `log4j.properties` 中使用 `spark.yarn.app.container.log.dir`。例如,`log4j.appender.file_appender.File=${spark.yarn.app.container.log.dir}/spark.log`。對于流應用程序(streaming applications),配置 `RollingFileAppender` 并將文件位置設置為 YARN 的日志目錄將避免由于大型日志文件導致的磁盤溢出,并且可以使用 YARN 的日志實用程序(YARN’s log utility)訪問日志。 To use a custom metrics.properties for the application master and executors, update the `$SPARK_CONF_DIR/metrics.properties` file. It will automatically be uploaded with other configurations, so you don’t need to specify it manually with `--files`. 要為 application master 和 executors 使用一個自定義的 metrics.properties,請更新 `$SPARK_CONF_DIR/metrics.properties` 文件。它將自動與其他配置一起上傳,因此您不需要使用 `--files` 手動指定它。 #### Spark 屬性 | Property Name(屬性名稱)| Default(默認值)| Meaning(含義)| | --- | --- | --- | | `spark.yarn.am.memory` | `512m` | 在客戶端模式下用于 YARN Application Master 的內存量,與 JVM 內存字符串格式相同(例如,`512m`,`2g`)。在 `cluster` 集群模式下,使用 `spark.driver.memory` 代替.使用小寫字母尾后綴,例如. `k`,`m`,`g`,`t`,and `p`,分別表示 kibi-,mebi-,gibi-,tebi- 和 pebibytes,respectively。 | | `spark.yarn.am.cores` | `1` | 在客戶端模式下用于 YARN Application Master 的核數。在集群模式下,請改用 `spark.driver.cores` 代替。 | | `spark.yarn.am.waitTime` | `100s` | 在 `cluster 集群` 模式中,YARN Application Master 等待 SparkContext 被初始化的時間。在 `client 客戶端` 模式中,YARN Application Master 等待 driver 連接它的時間。 | | `spark.yarn.submit.file.replication` | 默認的 HDFS 副本數(通常是 `3`) | 用于應用程序上傳到 HDFS 的文件的 HDFS 副本級別。這些包括諸如 Spark jar,app jar,和任何分布式緩存 files/archives 之類的東西。 | | `spark.yarn.stagingDir` | 文件系統中當前用戶的主目錄 | 提交應用程序時使用的臨時目錄。 | | `spark.yarn.preserve.staging.files` | `false` | 設置為 `true` 以便在作業結束保留暫存文件(Spark jar,app jar,分布式緩存文件),而不是刪除它們。 | | `spark.yarn.scheduler.heartbeat.interval-ms` | `3000` | Spark application master 心跳到 YARN ResourceManager 中的間隔(以毫秒為單位)。該值的上限為到期時間間隔的 YARN 配置值的一半,即 `yarn.am.liveness-monitor.expiry-interval-ms`。 | | `spark.yarn.scheduler.initial-allocation.interval` | `200ms` | 當存在未決容器分配請求時,Spark application master 心跳到 YARN ResourceManager 的初始間隔。它不應大于 `spark.yarn.scheduler.heartbeat.interval-ms`。如果掛起的容器仍然存在,直到達到 `spark.yarn.scheduler.heartbeat.interval-ms` 為止。 | | `spark.yarn.max.executor.failures` | numExecutors * 2,最小值為 3/td&gt; | 在應用程序失敗(failing the application)之前,執行器失敗(executor failures)的最大數量。 | | `spark.yarn.historyServer.address` | (none) | 默認為未設置,因為 history server 是可選服務。當 Spark 應用程序完成將應用程序從 ResourceManager UI 鏈接到 Spark history server UI 時,此地址將提供給 YARN ResourceManager。對于此屬性,YARN 屬性可用作變量,這些屬性在運行時由 Spark 替換。例如,如果 Spark 歷史記錄服務器在與 YARN ResourceManager 相同的節點上運行,則可以將其設置為 `${hadoopconf-yarn.resourcemanager.hostname}:18080`。 | | `spark.yarn.dist.archives` | (none) | 逗號分隔的要提取到每個執行器(executor)的工作目錄(working directory)中的歸檔列表。 | | `spark.yarn.dist.files` | (none) | C要放到每個執行器(executor)的工作目錄(working directory)中的以逗號分隔的文件列表。 | | `spark.yarn.dist.jars` | (none) | 要放到每個執行器(executor)的工作目錄(working directory)中的以逗號分隔的 jar 文件列表。 | | `spark.executor.instances` | `2` | 靜態分配的執行器(executor)數量。使用 `spark.dynamicAllocation.enabled`,初始的執行器(executor)數量至少會是這么大,。 | | `spark.yarn.executor.memoryOverhead` | executorMemory * 0.10,最小值是 384 | 要為每個執行器(executor)分配的堆外(off-heap)內存量(以兆字節為單位)。這是內存,例如 VM 開銷,內部字符串,其他本機開銷等。這往往隨著執行器(executor)大小(通常為 6-10%)增長。 | | `spark.yarn.driver.memoryOverhead` | driverMemory * 0.10,最小值是 384 | 在集群模式下為每個驅動程序(driver)分配的堆外(off-heap)內存量(以兆字節為單位)。這是內存,例如 VM 開銷,內部字符串,其他本機開銷等。這往往隨著容器(container)大小(通常為 6- 10%)增長。 | | `spark.yarn.am.memoryOverhead` | AM memory * 0.10,最小值是 384 | 與 `spark.yarn.driver.memoryOverhead` 一樣,但是只適用于客戶端模式下的 YARN Application Master。 | | `spark.yarn.am.port` | (random) | 被 YARN Application Master 監聽的端口。在 YARN 客戶端模式下,這用于在網關(gateway)上運行的 Spark 驅動程序(driver)和在 YARN 上運行的 YARN Application Master 之間進行通信。在 YARN 集群模式下,這用于動態執行器(executor)功能,其中它處理從調度程序后端的 kill。 | | `spark.yarn.queue` | `default` | 提交應用程序(application)的 YARN 隊列名稱。 | | `spark.yarn.jars` | (none) | 包含要分發到 YARN 容器(container)的 Spark 代碼的庫(libraries)列表。默認情況下,Spark on YARN 將使用本地安裝的 Spark jar,但是 Spark jar 也可以在 HDFS 上的一個任何位置都可讀的位置。這允許 YARN 將其緩存在節點上,使得它不需要在每次運行應用程序時分發。例如,要指向 HDFS 上的 jars,請將此配置設置為 `hdfs:///some/path`。允許使用 globs。 | | `spark.yarn.archive` | (none) | 包含所需的 Spark jar 的歸檔(archive),以分發到 YARN 高速緩存。如果設置,此配置將替換 `spark.yarn.jars`,并且歸檔(archive)在所有的應用程序(application)的容器(container)中使用。歸檔(archive)應該在其根目錄中包含 jar 文件。與以前的選項一樣,歸檔也可以托管在 HDFS 上以加快文件分發速度。 | | `spark.yarn.access.hadoopFileSystems` | (none) | 應用程序將要訪問的安全 Hadoop 文件系統的逗號分隔列表。例如,`spark.yarn.access.hadoopFileSystems=hdfs://nn1.com:8032,hdfs://nn2.com:8032, webhdfs://nn3.com:50070`。應用程序必須能夠訪問列出的文件系統并且 Kerberos 必須被正確地配置為能夠訪問它們(在同一個 realm 域或在受信任的 realm 域)。Spark 為每個文件系統獲取安全的 tokens 令牌 Spark 應用程序可以訪問這些遠程 Hadoop 文件系統。Spark `spark.yarn.access.namenodes` 已經過時了,請使用這個來代替。 | | `spark.yarn.appMasterEnv.[EnvironmentVariableName]` | (none) | 將由 `EnvironmentVariableName` 指定的環境變量添加到在 YARN 上啟動的 Application Master 進程。用戶可以指定其中的多個并設置多個環境變量。在 `cluster 集群` 模式下,這控制 Spark 驅動程序(driver)的環境,在 `client 客戶端` 模式下,它只控制執行器(executor)啟動器(launcher)的環境。 | | `spark.yarn.containerLauncherMaxThreads` | `25` | 在 YARN Application Master 中用于啟動執行器容器(executor containers)的最大線程(thread)數。 | | `spark.yarn.am.extraJavaOptions` | (none) | 在客戶端模式下傳遞到 YARN Application Master 的一組額外的 JVM 選項。在集群模式下,請改用 `spark.driver.extraJavaOptions`。請注意,使用此選項設置最大堆大小(-Xmx)設置是非法的。最大堆大小設置可以使用 `spark.yarn.am.memory`。 | | `spark.yarn.am.extraLibraryPath` | (none) | 設置在客戶端模式下啟動 YARN Application Master 時要使用的特殊庫路徑(special library path)。 | | `spark.yarn.maxAppAttempts` | `yarn.resourcemanager.am.max-attempts` in YARN | 將要提交應用程序的最大的嘗試次數。它應該不大于 YARN 配置中的全局最大嘗試次數。 | | `spark.yarn.am.attemptFailuresValidityInterval` | (none) | 定義 AM 故障跟蹤(failure tracking)的有效性間隔。如果 AM 已經運行至少所定義的間隔,則 AM 故障計數將被重置。如果未配置此功能,則不啟用此功能。 | | `spark.yarn.executor.failuresValidityInterval` | (none) | 定義執行器(executor)故障跟蹤的有效性間隔。超過有效性間隔的執行器故障(executor failures)將被忽略。 | | `spark.yarn.submit.waitAppCompletion` | `true` | 在 YARN cluster 集群模式下,控制客戶端是否等待退出,直到應用程序完成。如果設置為 `true`,客戶端將保持報告應用程序的狀態。否則,客戶端進程將在提交后退出。 | | `spark.yarn.am.nodeLabelExpression` | (none) | 一個將調度限制節點 AM 集合的 YARN 節點標簽表達式。只有大于或等于 2.6 版本的 YARN 版本支持節點標簽表達式,因此在對較早版本運行時,此屬性將被忽略。 | | `spark.yarn.executor.nodeLabelExpression` | (none) | 一個將調度限制節點執行器(executor)集合的 YARN 節點標簽表達式。只有大于或等于 2.6 版本的 YARN 版本支持節點標簽表達式,因此在對較早版本運行時,此屬性將被忽略。 | | `spark.yarn.tags` | (none) | 以逗號分隔的字符串列表,作為 YARN application 標記中顯示的 YARN application 標記傳遞,可用于在查詢 YARN apps 時進行過濾(filtering)。 | | `spark.yarn.keytab` | (none) | 包含上面指定的主體(principal)的 keytab 的文件的完整路徑。此 keytab 將通過安全分布式緩存(Secure Distributed Cache)復制到運行 YARN Application Master 的節點,以定期更新 login tickets 和 delegation tokens.(也可以在 "local" master 下工作)。 | | `spark.yarn.principal` | (none) | 在安全的 HDFS 上運行時用于登錄 KDC 的主體(Principal)。(也可以在 "local" master 下工作) | | `spark.yarn.config.gatewayPath` | (none) | 一個在網關主機(gateway host)(啟動 Spark application 的 host)上有效的路徑,但對于集群中其他節點中相同資源的路徑可能不同。結合 `spark.yarn.config.replacementPath`,這個用于支持具有異構配置的集群,以便 Spark 可以正確啟動遠程進程.替換路徑(replacement path)通常將包含對由 YARN 導出的某些環境變量(以及,因此對于 Spark 容器可見)的引用.例如,如果網關節點(gateway node)在 `/disk1/hadoop` 上安裝了 Hadoop 庫,并且 Hadoop 安裝的位置由 YARN 作為 `HADOOP_HOME` 環境變量導出,則將此值設置為 `/disk1/hadoop`,將替換路徑(replacement path)設置為 `$HADOOP_HOME` 將確保用于啟動遠程進程的路徑正確引用本地 YARN 配置。 | | `spark.yarn.config.replacementPath` | (none) | 請看 `spark.yarn.config.gatewayPath`。 | | `spark.yarn.security.credentials.${service}.enabled` | `true` | 控制是否在啟用安全性時獲取服務的 credentials(憑據)。默認情況下,在這些服務時,將檢索所有支持的服務的憑據配置,但如果與某些方式沖突,可以禁用該行為。詳情請見 [在安全的集群中運行](running-on-yarn.html#running-in-a-secure-cluster) | | `spark.yarn.rolledLog.includePattern` | (none) | Java Regex 過濾與定義的包含模式匹配的日志文件,這些日志文件將以滾動的方式進行聚合。這將與 YARN 的滾動日志聚合一起使用,在 yarn-site.xml 文件中配置 `yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds` 以在 YARN 方面啟用此功能。此功能只能與 Hadoop 2.6.4+ 一起使用。Spark log4j appender 需要更改才能使用 FileAppender 或其他 appender 可以處理正在運行的文件被刪除。基于在 log4j 配置中配置的文件名(如 spark.log)上,用戶應該設置正則表達式(spark *)包含需要聚合的所有日志文件。 | | `spark.yarn.rolledLog.excludePattern` | (none) | Java Regex 過濾與定義的排除模式匹配的日志文件,并且這些日志文件將不會以滾動的方式進行聚合。如果日志文件名稱匹配include 和 exclude 模式,最終將排除此文件。 | | Property Name(屬性名稱)| Default(默認值)| Meaning(含義)| | --- | --- | --- | | `spark.yarn.shuffle.stopOnFailure` | `false` | 是否在 Spark Shuffle Service 初始化出現故障時停止 NodeManager。This prevents application failures caused by running containers on NodeManagers where the Spark Shuffle Service is not running. | # 重要提示 - core request 在調度決策中是否得到執行取決于使用的調度程序及其配置方式。 - 在 `cluster 集群` 模式中,Spark executors 和 Spark dirver 使用的本地目錄是為 YARN(Hadoop YARN 配置 `yarn.nodemanager.local-dirs`)配置的本地目錄。如果用戶指定 `spark.local.dir`,它將被忽略。在 `client 客戶端` 模式下,Spark executors 將使用為 YARN 配置的本地目錄,Spark dirver 將使用 `spark.local.dir` 中定義的目錄。這是因為 Spark drivers 不在 YARN cluster 的 `client ` 模式中運行,僅僅 Spark 的 executors 會這樣做。 - `--files` 和 `--archives` 支持用 # 指定文件名,與 Hadoop 相似。例如您可以指定:`--files localtest.txt#appSees.txt` 然后就會上傳本地名為 `localtest.txt` 的文件到 HDFS 中去,但是會通過名稱 `appSees.txt` 來鏈接,當你的應用程序在 YARN 上運行時,你應該使用名稱 `appSees.txt` 來引用它。 - The `--jars` 選項允許你在 `cluster 集群` 模式下使用本地文件時運行 `SparkContext.addJar` 函數。如果你使用 HDFS,HTTP,HTTPS 或 FTP 文件,則不需要使用它。 # 在安全集群中運行 如 [security](security.html) 所講的,Kerberos 被應用在安全的 Hadoop 集群中去驗證與服務和客戶端相關聯的 principals。這允許客戶端請求這些已驗證的服務; 向授權的 principals 授予請求服務的權利。 Hadoop 服務發出 _hadoop tokens_ 去授權訪問服務和數據。客戶端必須首先獲取它們將要訪問的服務的 tokens,當啟動應用程序時,將它和應用程序一起發送到 YAYN 集群中。 如果 Spark 應用程序與其它任何的 Hadoop 文件系統(例如 hdfs,webhdfs,等等),HDFS,HBase 和 Hive 進行交互,它必須使用啟動應用程序的用戶的 Kerberos 憑據獲取相關 tokens,也就是說身份將成為已啟動的 Spark 應用程序的 principal。 這通常在啟動時完成:在安全集群中,Spark 將自動為集群的 HDFS 文件系統獲取 tokens,也可能為 HBase 和 Hive 獲取。 如果 HBase 在 classpath 中,HBase token 是可以獲取的,HBase 配置聲明應用程序是安全的(即 `hbase-site.xml` 將 `hbase.security.authentication` 設置為 `kerberos`),并且 `spark.yarn.security.tokens.hbase.enabled` 未設置為 `false`,HBase tokens 將被獲得。 類似地,如果 Hive 在 classpath 中,其配置包括元數據存儲的 URI(`hive.metastore.uris`),并且 `spark.yarn.security.tokens.hive.enabled` 未設置為 `false`, 則將獲得 Hive token(令牌)。如果應用程序需要與其他安全 Hadoop 文件系統交互,則在啟動時必須顯式請求訪問這些集群所需的 tokens。這是通過將它們列在 1spark.yarn.access.namenodes1 屬性中來實現的。 ``` spark.yarn.access.hadoopFileSystems hdfs://ireland.example.org:8020/,webhdfs://frankfurt.example.org:50070/ ``` Spark 支持通過 Java Services 機制(請看 `java.util.ServiceLoader`)與其它的具有安全性的服務來進行集成。為了實現該目標,通過在 jar 的 `META-INF/services` 目錄中列出相應 `org.apache.spark.deploy.yarn.security.ServiceCredentialProvider` 的實現的名字就可應用到 Spark。這些插件可以通過設置 `spark.yarn.security.tokens.{service}.enabled` 為 `false` 來禁用,這里的 `{service}` 是 credential provider(憑證提供者)的名字。 ## 配置外部的 Shuffle Service 要在 YARN cluster 中的每個 `NodeManager` 中啟動 Spark Shuffle,按照以下說明: 1. 用 [YARN profile](building-spark.html) 來構建 Spark。如果你使用了預包裝的發布可以跳過該步驟。 2. 定位 `spark-<version>-yarn-shuffle.jar`。如果是你自己構建的 Spark,它應該在 `$SPARK_HOME/common/network-yarn/target/scala-<version>` 下,如果你使用的是一個發布的版本,那么它應該在 `yarn` 下。 3. 添加這個 jar 到你集群中所有的 `NodeManager` 的 classpath 下去。 4. 在每個 node(節點)的 `yarn-site.xml` 文件中,添加 `spark_shuffle` 到 `yarn.nodemanager.aux-services`,然后設置 `yarn.nodemanager.aux-services.spark_shuffle.class` 為 `org.apache.spark.network.yarn.YarnShuffleService`。 5. 通過在 `etc/hadoop/yarn-env.sh` 文件中設置 `YARN_HEAPSIZE` (默認值 1000) 增加 `NodeManager's` 堆大小以避免在 shuffle 時的 garbage collection issues(垃圾回收問題)。 6. 重啟集群中所有的 `NodeManager`。當 shuffle service 服務在 YARN 上運行時,可以使用以下額外的配置選項: ## 用 Apache Oozie 來運行應用程序 Apache Oozie 可以將啟動 Spark 應用程序作為工作流的一部分。在安全集群中,啟動的應用程序將需要相關的 tokens 來訪問集群的服務。如果 Spark 使用 keytab 啟動,這是自動的。但是,如果 Spark 在沒有 keytab 的情況下啟動,則設置安全性的責任必須移交給 Oozie。 有關配置 Oozie 以獲取安全集群和獲取作業憑據的詳細信息,請參閱 [Oozie web site](http://oozie.apache.org/) 上特定版本文檔的 “Authentication” 部分。 對于 Spark 應用程序,必須設置 Oozie 工作流以使 Oozie 請求應用程序需要的所有 tokens,包括: - The YARN resource manager. - The local Hadoop filesystem. - Any remote Hadoop filesystems used as a source or destination of I/O. - Hive —if used. - HBase —if used. - The YARN timeline server, if the application interacts with this. 為了避免 Spark 嘗試 - 然后失敗 - 要獲取 Hive,HBase 和遠程的 HDFS 令牌,必須將 Spark 配置收集這些服務 tokens 的選項設置為禁用。Spark 配置必須包含以下行: ``` spark.yarn.security.credentials.hive.enabled false spark.yarn.security.credentials.hbase.enabled false ``` 必須取消設置配置選項`spark.yarn.access.hadoopFileSystems`. ## Kerberos 故障排查 調試 Hadoop/Kerberos 問題可能是 “difficult 困難的”。一個有用的技術是通過設置 `HADOOP_JAAS_DEBUG` 環境變量在 Hadoop 中啟用對 Kerberos 操作的額外記錄。 ```bash export HADOOP_JAAS_DEBUG=true ``` JDK 類可以配置為通過系統屬性 `sun.security.krb5.debug` 和 `sun.security.spnego.debug=true` 啟用對 Kerberos 和 SPNEGO/REST 認證的額外日志記錄。 ``` -Dsun.security.krb5.debug=true -Dsun.security.spnego.debug=true ``` 所有這些選項都可以在 Application Master 中啟用: ``` spark.yarn.appMasterEnv.HADOOP_JAAS_DEBUG true spark.yarn.am.extraJavaOptions -Dsun.security.krb5.debug=true -Dsun.security.spnego.debug=true ``` 最后,如果 `org.apache.spark.deploy.yarn.Client` 的日志級別設置為 `DEBUG`,日志將包括獲取的所有 tokens 的列表,以及它們的到期詳細信息。 ## 使用 Spark History Server 來替換 Spark Web UI 當應用程序 UI 被禁用時的應用程序,可以使用 Spark History Server 應用程序頁面作為運行程序用于跟蹤的 URL。這在 secure clusters(安全的集群)中是適合的,或者減少 Spark driver 的內存使用量。要通過 Spark History Server 設置跟蹤,請執行以下操作: - 在 application(應用)方面,在 Spark 的配置中設置 `spark.yarn.historyServer.allowTracking=true`. 在 application's UI 是禁用的情況下,這將告訴 Spark 去使用 history server's URL 作為 racking URL。 - 在 Spark History Server 方面,添加 `org.apache.spark.deploy.yarn.YarnProxyRedirectFilter` 到 `spark.ui.filters` 配置的中的 filters 列表中去。 請注意,history server 信息可能不是應用程序狀態的最新信息。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看