本文使用的軟件環(huán)境同第一篇,另增加了hadoop的環(huán)境:
- Linux 4.4.0-62-generic #83-Ubuntu x86_64 GNU/Linux
- java version "1.8.0_101" Java(TM) SE Runtime Environment (build 1.8.0_101-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
- Spark 2.1.0 built for Hadoop 2.7.3
- Hadoop 2.7.3
另外扯一句題外話,由于hadoop體系的復(fù)雜,我會從最簡單的層級來配置,多余的配置項不會列出。
所有機器的jdk、spark、hadoop版本,目錄位置都相同。
1 hadoop配置
配置的基礎(chǔ)是集群主機到從機的無密碼ssh登錄,spark需要hdfs和yarn集群同時運行。在官方文檔上一句話提及了這一點:
These configs are used to write to HDFS and connect to the YARN ResourceManager.
這是一個坑,很多文章都沒有強調(diào)hdfs集群配置的重要性。
1.1 hadoop核心配置
這一步主要參考Hadoop集群配置官方文檔。
進入<HADOOP_DIR>/etc/hadoop/目錄,為了讓hadoop系列服務(wù)能夠啟動,首先需要修改hadoop-env.sh文件,指定JDK的目錄所在。JAVA_HOME這個變量如果在.bashrc中export了,hadoop執(zhí)行腳本時還是不行的,所以要在hadoop自己的配置文件中指定。無論主從機都需要。
接著修改hadoop的一些核心配置,修改同目錄下的core-site.xml文件,指定hdfs的NameNode的位置:

這個配置也是主從機都需要的。
1.2 hdfs集群配置
接著配置hdfs集群,需要修改同目錄下的hdfs-site.xml文件,這個主從機有所不同,對于namenode,需要指定namenode存放文件的路徑:

對于datanode,需要指定datanode存放文件的路徑:

然后需要在各個機器上建立好指定的目錄。
修改同目錄下的slaves文件,將從機名稱一機一行寫入。
在主機<HADOOP_DIR>下執(zhí)行Name Node的初始化及集群的啟動腳本:
./bin/hdfs namenode -format
./sbin/start-dfs.sh
需要檢驗一下hdfs集群是否成功,這里再次說明,不要相信jps的輸出,即便jps的輸出完備,各種角色都列出了,也不一定說明集群能正常運行了,只有從web控制臺看到主從機的信息才算配置正常了。
hdfs的默認web端口在50070,用瀏覽器訪問Name Node的50070端口就可以看到結(jié)果:

Live Nodes可以點開看每個slave機器的信息。
1.3 yarn集群配置
修改同目錄下的yarn-site.xml文件,設(shè)定yarn.resourcemanager.hostname為Resource Manager主機名,主從機都需要:

在主機<HADOOP_DIR>下執(zhí)行Yarn的啟動腳本
./sbin/start-yarn.sh
yarn的web控制臺默認端口是8088,訪問Resouce Manager所在主機的8088端口就可以看到y(tǒng)arn的集群情況:

2 spark配置
修改<SPARK_DIR>/conf目錄下的spark-env.sh文件,將HADOOP_CONF_DIR變量指定到hadoop配置文件目錄并導(dǎo)出。

這個配置的修改是所有spark所在主機都要的。
由于之前已經(jīng)搭建過了獨立模式的集群,也為了控制臺執(zhí)行spark命令行時少輸入點參數(shù),還需要修改同目錄下的
spark-defaults.conf文件,將spark.master指定為yarn,同時修改默認的部署方式,將spark.submit.deployMode指定為cluster。這個修改也要應(yīng)用到所有的spark中:
3 運行
在集群中任意機器上執(zhí)行以下測試看看結(jié)果:

在spark-submit運行過程中,yarn的web控制臺
Applications界面會進行展示:
點擊
Tracking UI欄中的鏈接,就可以看到熟悉的spark作業(yè)運行界面,這個界面只有spark作業(yè)運行期可以看到。
如果需要中止運行,需要在yarn的web控制臺
Applications界面通過Application ID一列中的鏈接進入Application的詳情界面,在左上角有個Kill Application按鈕: