<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Spark Standalone Mode * [安裝 Spark Standalone 集群](#安裝-spark-standalone-集群) * [手動啟動一個集群](#手動啟動一個集群) * [集群啟動腳本](#集群啟動腳本) * [提交應用程序到集群中](#提交應用程序到集群中) * [啟動 Spark 應用程序](#啟動-spark-應用程序) * [Resource Scheduling(資源調度)](#resource-scheduling資源調度) * [監控和日志](#監控和日志) * [與 Hadoop 集成](#與-hadoop-集成) * [配置網絡安全端口](#配置網絡安全端口) * [高可用性](#高可用性) * [使用 ZooKeeper 備用 Masters](#使用-zookeeper-備用-masters) * [用本地文件系統做單節點恢復](#用本地文件系統做單節點恢復) Spark 除了運行在 Mesos 或者 YARN 上以外,Spark 還提供了一個簡單的 standalone 部署模式。您可以手動啟動 master 和 worker 來啟動 standalone 集群,或者使用我們提供的 [launch scripts](#cluster-launch-scripts) 腳本。可以為了測試而在單個機器上運行這些進程。 # 安裝 Spark Standalone 集群 安裝 Spark Standalone 集群,您只需要將編譯好的版本部署在集群中的每個節點上。您可以獲取 Spark 的每個版本的預編譯版本或者自己編譯 [build it yourself](building-spark.html)。 # 手動啟動一個集群 您可以啟動一個 standalone master server 通過執行下面的代碼: ``` ./sbin/start-master.sh ``` 一旦啟動,master 將會為自己打印出一個 `spark://HOST:PORT` URL,您可以使用它來連接 workers,或者像傳遞 “master” 參數一樣傳遞到 `SparkContext`。您在 master 的web UI 上也會找到這個 URL,默認情況下是 [http://localhost:8080](http://localhost:8080)。 類似地,您可以啟動一個或多個 workers 并且通過下面的代碼連接到 master: ``` ./sbin/start-slave.sh <master-spark-URL> ``` 在您啟動一個 worker 之后,就可以通過 master 的 web UI(默認情況下是 [http://localhost:8080](http://localhost:8080))查看到了。您可以看到列出的新的 node(節點),以及其 CPU 的數量和數量(為操作系統留下了 1 GB 的空間)。 最后,下面的配置選項可以傳遞給 master 和 worker: | Argument(參數)| Meaning(含義)| | --- | --- | | `-h HOST`,`--host HOST` | 監聽的 Hostname | | `-i HOST`,`--ip HOST` | 監聽的 Hostname(已棄用,請使用 -h or --host)| | `-p PORT`,`--port PORT` | 監聽的服務 Port(端口)(默認:master 是 7077,worker 是隨機的)| | `--webui-port PORT` | web UI 的端口(默認:master 是 8080,worker 是 8081)| | `-c CORES`,`--cores CORES` | Spark 應用程序在機器上可以使用的全部的 CPU 核數(默認是全部可用的);這個選項僅在 worker 上可用 | | `-m MEM`,`--memory MEM` | Spark 應用程序可以使用的內存數量,格式像 1000M 或者 2G(默認情況是您的機器內存數減去 1 GB);這個選項僅在 worker 上可用 | | `-d DIR`,`--work-dir DIR` | 用于 scratch space(暫存空間)和作業輸出日志的目錄(默認是:SPARK_HOME/work);這個選項僅在 worker 上可用 | | `--properties-file FILE` | 自定義的 Spark 配置文件加載目錄(默認:conf/spark-defaults.conf)| # 集群啟動腳本 要使用啟動腳本啟動 Spark standalone 集群,你應該首先在 Spark 目錄下創建一個叫做 conf/slaves 的文件,這個文件中必須包含所有你想要啟動的 Spark workers 的機器的 hostname,每個 hostname 占一行。如果 conf/slaves 不存在,啟動腳本默認啟動單個機器(localhost),這對于測試是有效的。注意,master 機器通過 ssh 訪問所有的 worker 機器。默認情況下,ssh 是 parallel(并行)運行的并且需要配置無密碼(使用一個私鑰)的訪問。如果您沒有設置無密碼訪問,您可以設置環境變量 SPARK_SSH_FOREGROUND 并且為每個 worker 提供一個密碼。 一旦您創建了這個文件,您就可以啟動或者停止您的集群使用下面的 shell 腳本,基于 Hadoop 的部署腳本,并在 `SPARK_HOME/sbin` 中可用: * `sbin/start-master.sh` - 在執行的機器上啟動一個 master 實例。 * `sbin/start-slaves.sh` - 在 `conf/slaves` 文件中指定的每個機器上啟動一個 slave 實例。 * `sbin/start-slave.sh` - 在執行的機器上啟動一個 slave 實例。 * `sbin/start-all.sh` - 啟動一個 master 和上面說到的一定數量 slaves。 * `sbin/stop-master.sh` - 停止通過 `sbin/start-master.sh` 腳本啟動的 master。 * `sbin/stop-slaves.sh` - 停止在 `conf/slaves` 文件中指定的所有機器上的 slave 實例。 * `sbin/stop-all.sh` - 停止 master 和上邊說到的 slaves。 注意,這些腳本必須在您想要運行 Spark master 的機器上執行,而不是您本地的機器。 您可以通過在 `conf/spark-env.sh` 中設置環境變量來進一步配置集群。利用 `conf/spark-env.sh.template` 文件來創建這個文件,然后將它復制到所有的 worker 機器上使設置有效。下面的設置是可用的: | Environment Variable(環境變量)| Meaning(含義)| | --- | --- | | `SPARK_MASTER_HOST` | 綁定 master 到一個指定的 hostname 或者 IP 地址,例如一個 public hostname 或者 IP。 | | `SPARK_MASTER_PORT` | 在不同的端口上啟動 master(默認:7077)| | `SPARK_MASTER_WEBUI_PORT` | master 的 web UI 的端口(默認:8080)| | `SPARK_MASTER_OPTS` | 僅應用到 master 上的配置屬性,格式是 "-Dx=y"(默認是:none)。查看下面的列表可能選項。 | | `SPARK_LOCAL_DIRS` | Spark 中 "scratch" space(暫存空間)的目錄,包括 map 的輸出文件和存儲在磁盤上的 RDDs。這必須在您的系統中的一個快速的,本地的磁盤上。這也可以是逗號分隔的不同磁盤上的多個目錄的列表。 | | `SPARK_WORKER_CORES` | 機器上 Spark 應用程序可以使用的全部的 cores(核)的數量。(默認:全部的核可用)| | `SPARK_WORKER_MEMORY` | 機器上 Spark 應用程序可以使用的全部的內存數量,例如 `1000m`,`2g`(默認:全部的內存減去 1 GB);注意每個應用程序的 _individual(獨立)_ 內存是使用 `spark.executor.memory` 屬性進行配置的。 | | `SPARK_WORKER_PORT` | 在一個指定的 port(端口)上啟動 Spark worker(默認: random(隨機))| | `SPARK_WORKER_WEBUI_PORT` | worker 的 web UI 的 Port(端口)(默認:8081)| | `SPARK_WORKER_DIR` | 運行應用程序的目錄,這個目錄中包含日志和暫存空間(default:SPARK_HOME/work)| | `SPARK_WORKER_OPTS` | 僅應用到 worker 的配置屬性,格式是 "-Dx=y"(默認:none)。查看下面的列表的可能選項。 | | `SPARK_DAEMON_MEMORY` | 分配給 Spark master 和 worker 守護進程的內存。(默認: 1g)| | `SPARK_DAEMON_JAVA_OPTS` | Spark master 和 worker 守護進程的 JVM 選項,格式是 "-Dx=y"(默認:none)| | `SPARK_PUBLIC_DNS` | Spark master 和 worker 的公開 DNS 名稱。(默認:none)| **注意:** 啟動腳本現在還不支持 Windows。要在 Windows 上運行一個 Spark 集群,需要手動啟動 master 和 workers。 SPARK_MASTER_OPTS 支持以下系統屬性: | Property Name(屬性名稱)| Default(默認)| Meaning(含義)| | --- | --- | --- | | `spark.deploy.retainedApplications` | 200 | 展示的已完成的應用程序的最大數量。舊的應用程序將會從 UI 中被刪除以滿足限制。 | | `spark.deploy.retainedDrivers` | 200 | 展示已完成的 drivers 的最大數量。老的 driver 會從 UI 刪除掉以滿足限制。 | | `spark.deploy.spreadOut` | true | 這個選項控制 standalone 集群 manager 是應該跨界店 spread(傳播)應用程序還是應該努力將應用程序整合到盡可能少的節點上。在 HDFS 中,Spreading 是數據本地化的更好的選擇,但是對于計算密集型的負載,整合會更有效率。 | | `spark.deploy.defaultCores` | (infinite) | 如果沒有設置 `spark.cores.max`,在 Spark 的 standalone 模式下默認分配給應用程序的 cores(核)數。如果沒有設置,應用程序將總是獲得所有的可用核,除非設置了 `spark.cores.max`。在共享集群中設置較低的核數,可用于防止用戶 grabbing(抓取)整個集群。 | | `spark.deploy.maxExecutorRetries` | 10 | 限制在 standalone 集群 manager 刪除一個不正確地應用程序之前可能發生的 back-to-back 執行器失敗的最大次數。如果一個應用程序有任何正在運行的執行器,則它永遠不會被刪除。如果一個應用程序經歷過超過 `spark.deploy.maxExecutorRetries` 次的連續失敗,沒有執行器成功開始運行在這些失敗之間,并且應用程序沒有運行著的執行器,然后 standalone 集群 manager 將會移除這個應用程序并將它標記為失敗。要禁用這個自動刪除功能,設置`spark.deploy.maxExecutorRetries` 為 `-1`。 | | `spark.worker.timeout` | 60 | standalone 部署模式下 master 如果沒有接收到心跳,認為一個 worker 丟失的間隔時間,秒數。 | SPARK_WORKER_OPTS 支持以下的系統屬性: | Property Name | Default | Meaning | | --- | --- | --- | | `spark.worker.cleanup.enabled` | false | 激活周期性清空 worker / application 目錄。注意,這只影響 standalone 模式,因為 YARN 工作方式不同。只有已停止的應用程序的目錄會被清空。 | | `spark.worker.cleanup.interval` | 1800 (30 minutes) | 在本地機器上,worker 控制清空老的應用程序的工作目錄的時間間隔,以秒計數。 | | `spark.worker.cleanup.appDataTtl` | 604800 (7 days,7 * 24 * 3600) | 每個 worker 中應用程序工作目錄的保留時間。這是一個 Live 時間,并且應該取決于您擁有的可用的磁盤空間量。應用程序的日志和 jars 都會被下載到應用程序的工作目錄。隨著時間的推移,這個工作目錄會很快填滿磁盤空間,特別是如果您經常運行作業。 | | `spark.worker.ui.compressedLogFileLengthCacheSize` | 100 | 對于壓縮日志文件,只能通過未壓縮文件來計算未壓縮文件。Spark 緩存未壓縮日志文件的未壓縮文件大小。此屬性控制緩存的大小。 | # 提交應用程序到集群中 要在 Spark 集群中運行一個應用程序,只需要簡單地將 master 的 `spark://IP:PORT` URL 傳遞到 [`SparkContext` constructor](programming-guide.html#initializing-spark)。 要針對集群運行交互式 Spark shell,運行下面的命令: ``` ./bin/spark-shell --master spark://IP:PORT ``` 您還可以傳遞一個選項 `--total-executor-cores &lt;numCores&gt;` 來控制 spark-shell 在集群上使用的 cores(核)數。 # 啟動 Spark 應用程序 [`spark-submit` 腳本](submitting-applications.html) 提供了最簡單的方法將一個編譯好的 Spark 應用程序提交到集群中。對于 standalone 集群,Spark 目前支持兩種部署模式。在 `client` 模式下,driver 在與 client 提交應用程序相同的進程中啟動。在 `cluster` 模式下,driver 是集群中的某個 Worker 中的進程中啟動,并且 client 進程將會在完成提交應用程序的任務之后退出,而不需要等待應用程序完成再退出。 如果您的應用程序是通過 Spark 提交來啟動的,則應用程序的 jar 將自動啟動分發給所有的 worker 節點。對于您的應用程序依賴的其他的 jar,您應該通過 `--jars` 標志使用逗號作為分隔符(例如 `--jars jar1,jar2`)來指定它們。要控制應用程序的配置或執行環境,請參閱 [Spark Configuration](configuration.html)。 另外,standalone `cluster` 模式支持自動重新啟動應用程序如果它是以非零的退出碼退出的。要使用此功能,您可以在啟動您的應用程序的時候將 `--supervise` 標志傳入 `spark-submit`。然后,如果您想殺死一個重復失敗的應用程序,您可以使用如下方式: ``` ./bin/spark-class org.apache.spark.deploy.Client kill <master url> <driver ID> ``` 您可以查看 driver ID 通過 standalone Master web UI 在 `http://&lt;master url&gt;:8080`。 # Resource Scheduling(資源調度) standalone 集群模式當前只支持一個簡單的跨應用程序的 FIFO 調度。然而,為了允許多個并發的用戶,您可以控制每個應用程序能用的最大資源數。默認情況下,它將獲取集群中的 _all_ cores(核),這只有在某一時刻只允許一個應用程序運行時才有意義。您可以通過 `spark.cores.max` 在 [SparkConf](configuration.html#spark-properties) 中設置 cores(核)的數量。例如: ``` val conf = new SparkConf() .setMaster(...) .setAppName(...) .set("spark.cores.max", "10") val sc = new SparkContext(conf) ``` 此外,您可以在集群的 master 進程中配置 `spark.deploy.defaultCores` 來修改默認為沒有將 `spark.cores.max` 設置為小于無窮大的應用程序。通過添加下面的命令到 `conf/spark-env.sh` 執行以上的操作: ``` export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=<value>" ``` 這在用戶沒有配置最大獨立核數的共享的集群中是有用的。 # 監控和日志 Spark 的 standalone 模式提供了一個基于 web 的用戶接口來監控集群。master 和每個 worker 都有它自己的顯示集群和作業信息的 web UI。默認情況下,您可以通過 master 的 8080 端口來訪問 web UI。這個端口可以通過配置文件修改或者通過命令行選項修改。 此外,對于每個作業的詳細日志輸出也會寫入到每個 slave 節點的工作目錄中。(默認是 `SPARK_HOME/work`)。你會看到每個作業的兩個文件,分別是 `stdout` 和 `stderr`,其中所有輸出都寫入其控制臺。 # 與 Hadoop 集成 您可以運行 Spark 集成到您現有的 Hadoop 集群,只需在同一臺機器上將其作為單獨的服務啟動。要從 Spark 訪問 Hadoop 的數據,只需要使用 hdfs:// URL(通常為 `hdfs://&lt;namenode&gt;:9000/path`,但是您可以在您的 Hadoop Namenode 的 web UI 中找到正確的 URL。)或者,您可以為 Spark 設置一個單獨的集群,并且仍然可以通過網絡訪問 HDFS ;這將比磁盤本地訪問速度慢,但是如果您仍然在同一個局域網中運行(例如,您將 Hadoop 上的每個機架放置幾臺 Spark 機器),可能不會引起關注。 # 配置網絡安全端口 Spark 對網絡的需求比較高,并且一些環境對于使用嚴格的防火墻設置有嚴格的要求,請查看 [security page](security.html#configuring-ports-for-network-security)。 # 高可用性 默認情況下,standalone 調度集群對于 Worker 的失敗(對于 Spark 本身可以通過將其移動到其他 worker 來說是失敗的工作而言)是有彈性的。但是,調度程序使用 Master 進行調度決策,并且(默認情況下)匯創建一個單點故障:如果 Master 崩潰,新的應用程序將不會被創建。為了規避這一點,我們有兩個高可用性方案,詳細說明如下。 ## 使用 ZooKeeper 備用 Masters **概述** 使用 ZooKeeper 提供的 leader election(領導選舉)和一些 state storage(狀態存儲),在連接到同一 ZooKeeper 實例的集群中啟動多個 Masters。一個節點將被選舉為 “leader” 并且其他節點將會維持備用模式。如果當前的 leader 宕掉了,另一個 Master 將會被選舉,恢復老的 Master 的狀態,并且恢復調度。整個恢復過程(從第一個 leader 宕掉開始)應該會使用 1 到 2 分鐘。注意此延遲僅僅影響調度 _new_ 應用程序 – 在 Master 故障切換期間已經運行的應用程序不受影響。 詳細了解如何開始使用 ZooKeeper [這里](http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html)。 **配置** 為了啟用這個恢復模式,您可以在 spark-env 中設置 SPARK_DAEMON_JAVA_OPTS 通過配置 `spark.deploy.recoveryMode` 和相關的 spark.deploy.zookeeper.* 配置。有關這些配置的更多信息,請參閱 [配置文檔](configuration.html#deploy)。 可能的陷阱:如果您在您的集群中有多個 Masters 但是沒有正確地配置 Masters 使用 ZooKeeper,Masters 將無法相互發現,并認為它們都是 leader。這將不會形成一個健康的集群狀態(因為所有的 Masters 將會獨立調度)。 **細節** 在您設置了 ZooKeeper 集群之后,實現高可用性是很簡單的。只需要在具有相同 ZooKeeper 配置(ZooKeeper URL 和 目錄)的不同節點上啟動多個 Master 進程。Masters 隨時可以被添加和刪除。 為了調度新的應用程序或者添加新的 Worker 到集群中,他們需要知道當前的 leader 的 IP 地址。這可以通過簡單地傳遞一個您在一個單一的進程中傳遞的 Masters 的列表來完成。例如,您可以啟動您的 SparkContext 指向 `spark://host1:port1,host2:port2`。這將導致您的 SparkContext 嘗試去注冊兩個 Masters – 如果 `host1` 宕掉,這個配置仍然是正確地,因為我們將會發現新的 leader `host2`。 在 “registering with a Master(使用 Master 注冊)” 與正常操作之間有一個重要的區別。當啟動的時候,一個應用程序或者 Worker 需要使用當前的 lead Master 找到并且注冊。一旦它成功注冊,它就是 “in the system(在系統中)” 了(即存儲在了 ZooKeeper 中)。如果發生故障切換,新的 leader 將會聯系所有值錢已經注冊的應用程序和 Workers 來通知他們領導層的變化,所以他們甚至不知道新的 Master 在啟動時的存在。 由于這個屬性,新的 Masters 可以在任何時間創建,唯一需要擔心的是,_new_ 應用程序和 Workers 可以找到它注冊,以防其成為 leader。一旦注冊了之后,您將被照顧。 ## 用本地文件系統做單節點恢復 **概述** ZooKeeper 是生產級別的高可用性的最佳方法,但是如果您只是想要重新啟動 Master 服務器,如果 Master 宕掉,FILESYSTEM 模式將會關注它。當應用程序和 Workers 注冊了之后,它們具有寫入提供的目錄的足夠的狀態,以便在重新啟動 Master 進程的時候可以恢復它們。 **配置** 為了啟用此恢復模式,你可以使用以下配置在 spark-env 中設置 SPARK_DAEMON_JAVA_OPTS: | System property(系統屬性)| Meaning(含義)| | --- | --- | | `spark.deploy.recoveryMode` | 設置為 FILESYSTEM 以啟用單節點恢復模式(默認:NONE)| | `spark.deploy.recoveryDirectory` | Spark 將存儲恢復狀態的目錄,可以從 Master 的角度訪問。 | **細節** * 該解決方案可以與像 [monit](http://mmonit.com/monit/) 這樣的過程 monitor/manager 一起使用,或者只是通過重新啟動手動恢復。 * 盡管文件系統恢復似乎比完全沒有任何恢復更好,但是對于某些特定的開發或者實驗目的,此模式可能不太適合。特別是,通過 stop-master.sh 殺死 master 并不會清除其恢復狀態,所以每當重新啟動一個新的 Master 時,它將進入恢復模式。如果需要等待所有先前注冊的 Worker/clients 超時,這可能會將啟動時間增加 1 分鐘。 * 雖然沒有正式的支持,你也可以掛載 NFS 目錄作為恢復目錄。如果 original Master w 安全地死亡,則您可以在不同的節點上啟動 Master,這將正確恢復所有以前注冊的 Workers/applications(相當于 ZooKeeper 恢復)。然而,未來的應用程序必須能夠找到新的 Master 才能注冊。
                  <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>

                              哎呀哎呀视频在线观看