[spark]-Spark2.x集群搭建與參數詳解


在前面的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域名,默認是空
其中一些參數跟我們單獨啟動master和worker進程的命令行參數后面添加參數是一樣的,如:`sbin/start-master.sh --port 7078(或--memory 500m)`,類似這種方式,可以指定一樣的配置屬性。我們可以在spark-evn.sh中就去配置好這些參數,但是有時候需要根據情況臨時需改配置,我們就可以使用這種在啟動Master/Worker腳本時,添加參數的方式來進行配置。通常還是在腳本spark-env.sh中配置好,腳本命令行參數通常用於臨時的情況。 ✌( •̀ ω •́ )也就是說,有些master和worker的配置,可以在spark-env.sh中部署時即配置,但是也可以在start-slave.sh腳本啟動進程時命令行參數設置`但是命令行參數的優先級比較高,會覆蓋掉spark-env.sh中的配置`。
參數 簡介
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使用是非常消耗資源的。有時候資源也會成為性能的一個瓶頸。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM