Spark分布式集群搭建的步驟
- 1)準備linux環(huán)境,設置集群搭建賬號和用戶組畏邢,設置ssh检吆,關閉防火墻,關閉seLinux蹭沛,配置host,hostname
- 2)配置jdk到環(huán)境變量
- 3)搭建hadoop集群咆贬,如果要做master帚呼,需要搭建zookeeper集、修改hdfs-site.xml,hadoop_env.sh,yarn-site.xml,slaves等配置文件
- 4)啟動hadoop集群眷蜈,啟動前要格式化namenode
- 5)配置spark集群沈自,修改spark-env.xml,slaves等配置文件枯途,拷貝hadoop相關配置到spark conf目錄下
- 6)啟動spark集群柔袁。
spark的有幾種部署模式,每種模式特點
- local(本地模式):常用于本地開發(fā)測試捶索,本地還分為local單線程和local-cluster多線程;
- standalone(集群模式):典型的Mater/slave模式,不過也能看出Master是有單點故障的辅甥;Spark支持ZooKeeper來實現(xiàn) HA
- on yarn(集群模式): 運行在 yarn 資源管理器框架之上,由 yarn 負責資源管理要销,Spark 負責任務調度和計算
- on mesos(集群模式): 運行在 mesos 資源管理器框架之上夏块,由 mesos 負責資源管理,Spark 負責任務調度和計算
- on cloud(集群模式):比如 AWS 的 EC2脐供,使用這個模式能很方便的訪問 Amazon的 S3;Spark 支持多種分布式存儲系統(tǒng):HDFS 和 S3
下面對集中部署模式進行詳細介紹
1政己、本地模式
該模式運行任務不會提交在集群中,只在本節(jié)點執(zhí)行歇由,有兩種情況
本地模式: 測試或實驗性質的本地運行模式 (單機)
運行該模式非常簡單,只需要把Spark的安裝包解壓后糊昙,改一些常用的配置即可使用赦肃,而不用啟動Spark的Master、Worker守護進程( 只有集群的Standalone方式時,才需要這兩個角色)厅各,也不用啟動Hadoop的各服務(除非你要用到HDFS)预柒。
Spark不一定非要跑在hadoop集群,可以在本地宜鸯,起多個線程的方式來指定。將Spark應用以多線程的方式直接運行在本地鸿市,一般都是為了方便調試,本地單機模式分三類:
- local:只啟動一個executor
- local[k]:啟動k個executor
- local[*]:啟動跟cpu數(shù)目相同的 executor
搭建步驟:
- 安裝java
$ sudo apt-get install openjdk-8-jre
(中間有報錯:raise IllegalArgumentException(s.split(': ', 1)[1], stackTrace)
pyspark.sql.utils.IllegalArgumentException: u'Unable to locate hive jars to connect to metastore. Please set spark.sql.hive.metastore.jars.'陌凳,網(wǎng)上提示查看jdk版本内舟,發(fā)現(xiàn)ubuntu 18.04默認是openjdk-11-jdk包(java -version提示10.0.1)。重新安裝openjdk-8-jdk版本不報錯)
- 配置jdk到環(huán)境變量
(可以用命令:sudo update-alternatives --config java來查看你的Java版本有哪些充岛,需要將哪個添加到環(huán)境變量中)
$ sudo vim /etc/profile
- 添加
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- 安裝Scala
- 安裝spark-2.3.1-bin-hadoop2.7(沒有Hadoop的環(huán)境下)
$ sudo wget -c [http://mirror.bit.edu.cn/apache/spark/spark-2.3.1/spark-2.3.1-bin-hadoop2.7.tgz](http://mirror.bit.edu.cn/apache/spark/spark-2.3.1/spark-2.3.1-bin-hadoop2.7.tgz)
$ sudo tar zxf spark-2.3.1-bin-hadoop2.7.tgz -C /usr/lib/spark
$ cd /usr/lib/spark
$ sudo ln -s spark-2.3.1-bin-hadoop2.7 spark
$ sudo vim ~/.bashrc
- 添加
export SPARK_HOME=/usr/lib/spark/spark
export PATH=SPARK_HOME/bin
export PYTHONPATH=/home/rss/anaconda2/bin
(這里我修改了python的環(huán)境變量耕蝉,使用自己的python
sudo ln -s /home/rss/anaconda2/bin/python /usr/bin/python
PATH=/usr/bin:$PATH) - 安裝成功
運行:
使用spark-shell赔硫、spark-submit、pyspark
例如使用spark-shell:
local:單機爪膊、單核運行
local[k]:啟動k個executor
local[]:啟動跟cpu數(shù)目相同的 executor*
上述情況中,local[N]與local[*]相當于用單機的多個線程來模擬spark分布式計算耘成,通常用來檢驗開發(fā)出來的程序邏輯上有沒有問題。
其中N代表可以使用N個線程撒会,每個線程擁有一個core师妙。
這些任務的線程,共享在一個進程中怔檩,可以開到蓄诽,在程序的執(zhí)行過程中只會產生一個進程,這個進程攬下了所有的任務仑氛,既是客戶提交任務的client進程闸英,又是spark的driver程序膊爪,還是spark執(zhí)行task的executor
本地模式: 測試或實驗性質的本地偽集群運行模式(單機本地模擬集群)
這種運行模式米酬,和Local[N]很像,不同的是赃额,它會在單機啟動多個進程來模擬集群下的分布式場景,而不像Local[N]這種多個線程只能在一個進程下委屈求全的共享資源芍锦。通常也是用來驗證開發(fā)出來的應用程序邏輯上有沒有問題飞盆,或者想使用Spark的計算框架而沒有太多資源。
用法:提交應用程序時使用local-cluster[x,y,z]參數(shù):x代表要生成的executor數(shù)吓歇,y和z分別代表每個executor所擁有的core和memory數(shù)城看。
$ spark-submit --master local-cluster[2,3,1024] ss.py
上面這條命令代表會使用2個executor進程,每個進程分配3個core和1G的內存测柠,來運行應用程序≮酥鳎可以看到软吐,在程序執(zhí)行過程中,會生成如下幾個進程: