在前面的Spark發展歷程和基本概念中介紹了Spark的一些基本概念,熟悉了這些基本概念對於集群的搭建是很有必要的。我們可以了解到每個參數配置的作用是什么。這里將詳細介紹Spark集群搭建以及xml參數配置。Spark的集群搭建分為分布式與偽分布式,分布式主要是與hadoop Yarn集群配合使用,偽分布式主要是單獨使用作為測試。
Spark完全分布式搭建
由於Hadoop和Spark集群占用的內存較高,這種完全分布式集群的搭建對於跑應用來說太吃力,如果有服務器可以嘗試,這里采用虛擬機方式實驗,詳情請看我的博客園:Hadoop2.8與spark2.1集群搭建 這里是一個早前的實驗,但是確實沒有怎么使用,因為當時對參數沒有做優化,也沒有理解其中個參數的含義。所以跑應用很吃力,而且會非常卡。下面直接介紹其中的各個參數。
Spark配置參數詳解
上一步配置Spark集群的時候我們使用了三個節點:一個Master ,兩個Worker,我們啟動腳本的時候就會啟動三個守護進程,分別名為Master,worker,worker。 conf/slaves.xml
配置:在這里我們指定哪些機器作為Worker節點。偽分布式的話不要配置,因為Master,worker會在一個節點上啟動。 conf/spark-env.sh
配置:核心配置文件,配置的是spark應用的運行環境,詳細配置了各個組件的細節。下面是他的一些參數
參數 | 簡介 |
---|---|
SPARK_MASTER_IP | 指定master進程所在的機器的ip地址 |
SPARK_MASTER_PORT | 指定master監聽的端口號(默認是7077) |
SPARK_MASTER_WEBUIPORT | 指定master web ui的端口號(默認是8080) |
SPARK_LOCAL_DIRS | 指spark的工作目錄,包括了shuffle map輸出文件,以及持久化到磁盤的RDD等 |
SPARK_WORKER_PORT | worker節點的端口號,默認是隨機的 |
SPARK_WORKER_CORES | worker節點上,允許spark作業使用的最大cpu數量,默認是機器上所有的cpu core |
SPARK_WORKER_MEMORY | worker節點上,允許spark作業使用的最大內存量,格式為1000m,2g等,默認最小是1g內存 |
SPARK_WORKER_INSTANCES | 當前機器上的worker進程數量,默認是1,可以設置成多個,但是這時一定要設置SPARK_WORKER_CORES,限制每個worker的cpu數量 |
SPARK_WORKER_DIR | spark作業的工作目錄,包括了作業的日志等,默認是spark_home/work |
SPARK_DAEMON_MEMORY | 分配給master和worker進程自己本身的內存,默認是1g |
SPARK_PUBLISC_DNS | master和worker的公共dns域名,默認是空 |
參數 | 簡介 |
---|---|
SPARK_MASTER_OPTS | 設置master的額外參數,使用"-Dx=y"設置各個參數 |
比如說export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=1"
參數(x) | 默認值(y) | 簡介 |
---|---|---|
spark.deploy.defaultCores | 無限大 | 每個spark作業最多在standalone集群中使用多少個cpu core,默認是無限大,有多少用多少 |
spark.deploy.retainedApplications | 200 | 在spark web ui上最多顯示多少個application的信息 |
spark.deploy.retainedDrivers | 200 | 在spark web ui上最多顯示多少個driver的信息 |
spark.deploy.spreadOut | true | 資源調度策略,spreadOut會盡量將application的executor進程分布在更多worker上,適合基於hdfs文件計算的情況,提升數據本地化概率;非spreadOut會盡量將executor分配到一個worker上,適合計算密集型的作業 |
spark.deploy.timeout | 60 | 單位秒,一個worker多少時間沒有響應之后,master認為worker掛掉了 |
參數 | 簡介 |
---|---|
SPARK_WORKEROPTS | worker的額外參數,使用"-Dx=y"設置各個參數 |
SPARK_WORKEROPTS的一些參數配置(x,y)如下:
參數(x) | 默認值(y) | 簡介 |
---|---|---|
spark.worker.cleanup.enabled | false | 是否啟動自動清理worker工作目錄,默認是false |
spark.worker.cleanup.interval | 1800 | 單位秒,自動清理的時間間隔,默認是30分鍾 |
spark.worker.cleanup.appDataTtl | 7 * 24 * 3600 | 默認將一個spark作業的文件在worker工作目錄保留多少時間,默認是7天 |
參數 | 簡介 |
---|---|
SPARK_DAEMON_JAVAOPTS | 設置master和worker自己的jvm參數,使用"-Dx=y"設置各個參數 |
這里一些內存相關的參數大家看過就明白了,為什么之前用分布式的集群,每個worker節點才1個g內存,根本是沒有辦法使用standalone模式和yarn模式運行作業的,僅僅是啟動進程耗費的內存就已經非常嚴重了,其中一些內存分配不合理就會導致啟動的時候資源分配失敗.如果還要在Yarn模式上運行的話,Hadoop集群進程還會占用一部分內存。所以說Spark使用是非常消耗資源的。有時候資源也會成為性能的一個瓶頸。