# 硬件配置
Spark 開發者都會遇到一個常見問題,那就是如何為 Spark 配置硬件。然而正確的硬件配置取決于使用的場景,我們提出以下建議。
# 存儲系統
因為大多數 Spark 作業都很可能必須從外部存儲系統(例如 Hadoop 文件系統或者 HBase)讀取輸入的數據,所以部署 Spark 時**盡可能靠近這些系統**是很重要的。我們建議如下 :
* 如果可以,在 HDFS 相同的節點上運行 Spark。最簡單的方法是在相同節點上設置 Spark [獨立集群模式](spark-standalone.html),并且配置 Spark 和 Hadoop 的內存和 CPU 的使用以避免干擾(Hadoop 的相關選項為:設置每個任務內存大小的選項 `mapred.child.java.opts` 以及設置任務數量的選項 `mapred.tasktracker.map.tasks.maximum` 和 `mapred.tasktracker.reduce.tasks.maximum`)。當然您也可以在常用的集群管理器(比如 [Mesos](running-on-mesos.html) 或者 [YARN](running-on-yarn.html))上運行 Hadoop 和 Spark。
* 如果不可以在相同的節點上運行,建議在與 HDFS 相同的局域網中的不同節點上運行 Spark。
* 對于低延遲數據存儲(如HBase),在這些存儲系統不同的節點上運行計算作業來可能更有利于避免干擾。
# 本地磁盤
雖然 Spark 可以在內存中執行大量計算,但是他仍然使用本地磁盤來存儲不適合內存存儲的數據以及各個階段的中間結果。我們建議每個節點配置 **4-8** 個磁盤,并且不使用 RAID 配置(只作為單獨掛載點)。在 Linux 中,使用 [noatime選項](http://www.centos.org/docs/5/html/Global_File_System/s2-manage-mountnoatime.html) 掛載磁盤以減少不必要的寫入。在 Spark 中,[配置](configuration.html) `spark.local.dir` 變量為逗號分隔的本地磁盤列表。如果您正在運行 HDFS,可以使用與 HDFS 相同的磁盤。
# 內存
一般來說,Spark 可以在每臺機器 **8GB 到數百 GB** 內存的任何地方正常運行。在所有情況下,我們建議只為 Spark 分配最多75% 的內存;其余部分供操作系統和緩存區高速緩存存儲器使用。
您需要多少內存取決于您的應用程序。如果您需要確定的應用程序中某個特定數據集占用內存的大小,您可以把這個數據集加載到一個 Spark RDD 中,然后在 Spark 監控 UI 頁面(`http://<driver-node>:4040`)中的 Storage 選項卡下查看它在內存中的大小。需要注意的是,存儲級別和序列化格式對內存使用量有很大的影響 - 如何減少內存使用量的建議,請參閱[調優指南](tuning.html)。
最后,需要注意的是 Java 虛擬機在超過 200GB 的 RAM 時表現得并不好。如果您購置的機器有比這更多的 RAM,您可以在每個節點上運行多個 Worker 的 JVM 實例。在 Spark 的 [standalone mode](spark-standalone.html) 下,您可以通過 `conf/spark-env.sh` 中的 `SPARK_WORKER_INSTANCES` 和 `SPARK_WORKER_CORES` 兩個參數來分別設置每個節點的 Worker 數量和每個 Worker 使用的 Core 數量。
# 網絡
根據我們的經驗,當數據在內存中時,很多 Spark 應用程序跟網絡有密切的關系。使用 **10 千兆位**以太網或者更快的網絡是讓這些應用程序變快的最佳方式。這對于 “distributed reduce” 類的應用程序來說尤其如此,例如 group-by 、reduce-by 和 SQL join。任何程序都可以在應用程序監控 UI 頁面(`http://<driver-node>:4040`)中查看 Spark 通過網絡傳輸的數據量。
# CPU Cores
因為 Spark 實行線程之間的最小共享,所以 Spark 可以很好地在每臺機器上擴展數十個 CPU Core。您應該為每臺機器至少配置 **8-16 個 Core**。根據您工作負載的 CPU 成本,您可能還需要更多:當數據都在內存中時,大多數應用程序就只跟 CPU 或者網絡有關了。
- Spark 概述
- 編程指南
- 快速入門
- Spark 編程指南
- 構建在 Spark 之上的模塊
- Spark Streaming 編程指南
- Spark SQL, DataFrames and Datasets Guide
- MLlib
- GraphX Programming Guide
- API 文檔
- 部署指南
- 集群模式概述
- Submitting Applications
- 部署模式
- Spark Standalone Mode
- 在 Mesos 上運行 Spark
- Running Spark on YARN
- 其它
- 更多
- Spark 配置
- Monitoring and Instrumentation
- Tuning Spark
- 作業調度
- Spark 安全
- 硬件配置
- Accessing OpenStack Swift from Spark
- 構建 Spark
- 其它
- 外部資源
- Spark RDD(Resilient Distributed Datasets)論文
- 翻譯進度