Spark on Yarn集群配置

--------"道路是曲折的,前途是光明的。"
  最近又涉及到了hadoop以及spark的安裝,之前課題設(shè)計中有要求安裝過hadoop,所以這里直接把hadoop的安裝過程以及初入手時出現(xiàn)的問題copy過程,以備份和記錄。歡迎交流學(xué)習(xí):)

1.環(huán)境要求

操作系統(tǒng):ubuntu14.04 LTS 64位
Spark版本:spark-1.6.0-bin-hadoop2.6
hadoop版本:hadoop2.6.0
scala版本:scala-2.10.4
java版本:java1.8.0_111

2.環(huán)境準(zhǔn)備

1)修改主機名

目的:方便區(qū)分集群中各臺機器的名字
我們將搭建1個master,2個slave,在每臺物理機上修改主機名,命令如下:
$ sudo vim /etc/hostname
在master上修改為master,其中一個slave上修改為slave1,另一個修改為slave2。
重啟后可看到主機名的更改。

2) 配置hosts

在每臺主機上修改host文件
$ vim /etc/hosts
根據(jù)自己的ip地址配置如下:
211.87.225.107 master
211.87.225.108 slave1
211.87.225.109 slave2
注意:如果一開始把用戶名設(shè)置的就是master(最好不要這樣設(shè)置),則在此處注意注釋掉127.0.1.1 master。
配置之后ping一下用戶名看是否生效
$ ping slave1 -c 3    #只ping3次,否則要按Ctrl+c中斷
$ ping slave2 -c 3

3) SSH 免密碼登錄

目的:使各臺機器之間可以無密碼ssh。
其原理可參考如下:ssh免密碼登錄原理

a.安裝Openssh server
$ sudo apt-get install openssh-server
b.在所有機器生成私鑰和公鑰(以便每臺機器之間都可以免密碼登錄)
在每臺機器上都執(zhí)行
$ ssh-keygen -t rsa #一路回車
c.需要讓機器間都能相互訪問,就把每臺機器上的id_rsa.pub發(fā)給master節(jié)點,傳輸公鑰可以用scp來傳輸。
$ scp ~/.ssh/id_rsa.pub ubuntu@master:~/.ssh/id_rsa.pub.slave1
$ scp ~/.ssh/id_rsa.pub ubuntu@master:~/.ssh/id_rsa.pub.slave2
d.在master上,將所有公鑰加到用于認(rèn)證的公鑰文件authorized_keys中
$ cat ~/.ssh/id_rsa.pub* >> ~/.ssh/authorized_keys
e.將公鑰文件authorized_keys分發(fā)給每臺slave
$ scp ~/.ssh/authorized_keys ubuntu@slave1:~/.ssh/
$ scp ~/.ssh/authorized_keys ubuntu@slave2:~/.ssh/
d.在每臺機器上驗證SSH無密碼通信
$ ssh master
$ ssh slave1
$ ssh slave2
一開始測試的時候可能需要輸入yes,把ip地址加入到know_hosts內(nèi)。
e.如果登陸測試不成功,則可能需要修改文件authorized_keys的權(quán)限(權(quán)限的設(shè)置非常重要,因為不安全的設(shè)置安全設(shè)置,會讓你不能使用RSA功能 )
$ chmod 600 ~/.ssh/authorized_keys

4) 安裝java環(huán)境

這一步中主要是配置java環(huán)境變量。
oracle官網(wǎng)下載最新版 Java 就可以,我下載的是jdk-8u111-linux-x64.tar.gz,spark官網(wǎng)表示只要是6以上的版本都可以。
根據(jù)自己的需要在合適的目錄下直接解壓,比如我的目錄是~/workspace.
$ tar -zxvf jdk-8u111-linux-x64.tar.gz
$ sudo vim ~/.bashrc   #修改環(huán)境變量
添加下列內(nèi)容,注意將home路徑替換成你自己的:
export JAVA_HOME=/home/ubuntu/workspace/jdk1.8.0_111
export JRE_HOME=/home/ubuntu/workspace/jdk1.8.0_111/jre
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
注意linux中環(huán)境變量之間用:隔開,而不是,。
$ source ~/.bashrc #生效環(huán)境變量
$ java -version #驗證 Java 是否安裝成功如果打印出如下版本信息,則說明安裝成功
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
若出現(xiàn)版本仍為openJDK7,可參考我之前的一篇文章ubuntu14.04安裝jdk1.8.0_111

5)安裝 Scala

Scala是Spark的原生語言,其底層實現(xiàn)是用的scala語言。官方要求 Scala 版本為 2.10.x,注意不要下錯版本,我這里下了 2.10.4,官方下載地址。
同樣在~/workspace中解壓
$ tar -zxvf scala-2.10.4.tgz
mv scala-2.10.4 scala #重命名scala-2.10.4文件(也可忽略,注意修改環(huán)境變量時的命名即可)
$ sudo vim ~/.bashrc   #修改環(huán)境變量
添加內(nèi)容:
export PATH=$PATH:/home/ubuntu/workspace/scala/bin
注意把路徑換成你自己的安裝路徑。
$ source ~/.bashrc #生效環(huán)境變量
$ scala -version  #驗證 scala 是否安裝成功,如果打印出如下版本信息,則說明安裝成功
Scala code runner version 2.10.4 -- Copyright 2002-2013, LAMP/EPFL

3.安裝hadoop并進行配置

1)安裝Hadoop2.6.0,

a.下載并校驗
下載可以通過http://mirror.bit.edu.cn/apache/hadoop/common/或者http://mirrors.cnnic.cn/apache/hadoop/common/下載,下載時請下載hadoop-2.x.y.tar.gz這個格式的文件,這是編譯好的。另外還要下載hadoop-2.x.y.tar.gz.mds,該文件包含了檢驗值可用于檢查hadoop-2.x.y.tar.gz的完整性,否則若文件發(fā)生了損壞或下載不完整,Hadoop將無法正常運行。
本文文件通過瀏覽器下載,默認(rèn)保存在“Downloads”目錄中(若不是請自行更改
tar命令的相應(yīng)目錄)
$ cat ~/Downloads/hadoop-2.6.0.tar.gz.mds | grep 'MD5' #列出md5檢驗值
$ md5sum ~/Downloads/hadoop-2.6.0.tar.gz | tr "a-z" "A-Z" #計算md5值,并轉(zhuǎn)化為大寫,方便比較
ERROR******:
如果兩個md5值不同。檢查一下自己是不是兩個文件都下載了。當(dāng)時安裝時不太仔細(xì)。漏下載了一個文件,導(dǎo)致md5值不同。
b.安裝
我們選擇將Hadoop安裝至/home/ubuntu/workspace/中:
$ sudo tar -zxf ~/Downloads/hadoop-2.6.0.tar.gz -C /home/ubuntu/workspace/ #解壓至~/worksapce文件夾中
$ cd ~/worksapce #進入文件目錄
$ sudo mv ./hadoop-2.6.0/ ./hadoop #將文件夾名改為hadoop
c.檢查hadoop
$ cd ~/worksapce/hadoop
$ ./bin/hadoop version
若hadoop安裝成功會顯示成功的版本信息。
d.配置環(huán)境變量(不執(zhí)行此步驟當(dāng)輸入hdfs命令時會出現(xiàn)無此命令),將Hadoop安裝目錄加入PATH變量中,這樣就可以在任意目錄中直接使用hadoop、hdfs等命令了。
$ sudo vim ~/.bashrc
添加如下內(nèi)容:
export PATH=$PATH:/home/ubuntu/workspace/hadoop/bin:/home/ubuntu/workspace/hadoop/sbin
$ source ~/.bashrc #使變量配置生效

2)配置集群/分布式環(huán)境

hadoop配置文件分為兩類:一類是只讀類型的默認(rèn)文件(src/core/core-default.xml、src/hdfs/hdfs-default.xml、src/mapred/mapred-default.xml、
conf/mapred-queues.xml);另一類是定位(site-specific)設(shè)置,也就是集群
/分布式模式需要修改的配置文件。這里在/home/ubuntu/workspace/hadoop/etc/hadoop僅設(shè)置了正常啟動所必須的設(shè)置項:datanodes、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml以滿足實驗要求。
首先需要修改的是hadoop_env.sh,把JAVA_HOME=$JAVA_HOME,修改為
JAVA_HOME=/home/ubuntu/workspace/jdk1.8.0_111 #[你的java路徑]
否則會在啟動時報錯找不到JAVA_HOME.

a.修改配置文件中的slaves,本教程讓master節(jié)點僅作為
Master使用,因此將文件中原來的localhost刪除,只添加內(nèi)容:
slave1
slave2
(一定要注意修改這里)
b.通過gedit編輯修改配置文件core-site.xml —— gedit ./etc/hadoop/core-site.xml,注意,是出現(xiàn)修改的界面而不是直接去編輯的界面,一定要理清自己所在的目錄。否則會出現(xiàn)如下問題:


目錄正確后修改內(nèi)容如下:

<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000/</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/ubuntu/workspace/hadoop/tmp</value> </property> </configuration>
c.文件hdfs-site.xml,dfs.replication一般設(shè)為3,根據(jù)自己的需要設(shè)置即可,如果有兩個slave節(jié)點,則設(shè)置為2即可。

`<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/ubuntu/workspace/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>

    <value>file:/home/ubuntu/workspace/hadoop/dfs/data</value>
</property>
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>

</configuration>d.文件mapred-site.xml(需要重命名,默認(rèn)文件名為mapred-site.xml.template),然后配置修改如下: ![](http://upload-images.jianshu.io/upload_images/3496624-59a917d3b38ed7fc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>e.文件yarn-site.xml,修改配置如下:<configuration>
<property>
  <name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
</configuration>我們可以在http://master:19888 下面查看hadoop的歷史信息。 f.配置好后,將master上的/home/ubuntu/workspace/hadoop文件夾分發(fā)到各個slave節(jié)點上。在master節(jié)點上執(zhí)行:$ cd ~/workspace$ tar -zcf ~/hadoop.master.tar.gz ./hadoop   #先壓縮再分發(fā)$ cd ~$ scp ./hadoop.master.tar.gz slave1:/home/ubuntu同樣也需要向slave2分發(fā)。 g.在slave節(jié)點上執(zhí)行:$ sudo rm -r home/ubuntu/workspace/hadoop #刪掉舊的(如果存在)$ sudo tar -zxf ~/hadoop.master.tar.gz -C /home/ubuntu/workspace #文件夾存放在slave節(jié)點的~/workspace目錄下`
注意目錄一定要和master節(jié)點的一致,不然易出錯

3)啟動hadoop

首次啟動需要先在master節(jié)點執(zhí)行namenode的格式化:
$ hdfs namenode -format #首次運行需要執(zhí)行初始化,之后不需要
注意:只首次初始化即可,因為如果多次啟動會導(dǎo)致master和slaves的namenodeID不同,從而會導(dǎo)致datanode節(jié)點無法啟動。
Tip:
namespaceID是文件系統(tǒng)的唯一標(biāo)識符,是在文件系統(tǒng)初次格式化時生成的。
其目錄位于/the path to hadoop/hadoop/dfs/name/current的VERSION中。
接著可以啟動hadoop了,啟動需要在master節(jié)點上進行:
$ sbin/start-dfs.sh
$ sbin/start-yarn.sh
$ sbin/mr-jobhistory-daemon.sh start historyserver #可查看歷史信息
通過命令jps可以查看各個節(jié)點所啟動的進程。正確的話,在master節(jié)點上可以看到Namenode、ResourceManager、SecondryNamenode、JobHistoryServer進程,如下所示:
3385 Jps
2912 SecondaryNameNode
3064 ResourceManager
2702 NameNode
3347 JobHistoryServer
在slave節(jié)點上會看到Jps、datanode、NodeManager進程,如下所示:
2902 DataNode
3055 NodeManager
3189 Jps
另外還需要在namenode節(jié)點上通過命令hdfs dfsadmin -report(報告文件系統(tǒng)的基本信息和統(tǒng)計信息)查看DataNode是否正常啟動,如果Live datanodes不為0,則說明集群啟動成功。例如本實驗共有2個Datanodes,成功顯示會出現(xiàn):live datanodes (2):等信息。
或者在瀏覽器中輸入 http://master:8088 ,應(yīng)該有 hadoop 的管理界面出來了,并能看到 slave1 和 slave2 節(jié)點。

4.安裝并配置Spark

1)下載Spark

進入官方下載地址下載Spark。我下載的是 spark-1.6.0-bin-hadoop2.6.tgz。
在~/workspace目錄下解壓
$ tar -zxvf spark-1.6.0-bin-hadoop2.6.tgz
$ mv spark-1.6.0-bin-hadoop2.6 spark #原來的文件名太長了,修改為spark
修改環(huán)境變量
$ sudo vim ~/.bashrc
加入內(nèi)容:
export PATH=$PATH:/home/ubuntu/workspace/spark/bin
$ source ~/.bashrc #生效環(huán)境變量

2)配置 Spark

$ cd ~/workspace/spark/conf #進入spark配置目錄
$ cp spark-env.sh.template spark-env.sh #復(fù)制配置模板
$ vim spark-env.sh #添加配置內(nèi)容
在spark-env.sh末尾添加以下內(nèi)容(這是我的配置,你可以自行修改):
export SCALA_HOME=/home/ubuntu/workspace/scala
export JAVA_HOME=/home/ubuntu/workspace/jdk1.8.0_111
export HADOOP_HOME=/home/ubuntu/workspace/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
SPARK_MASTER_IP=master
SPARK_LOCAL_DIRS=/home/ubuntu/workspace/spark
SPARK_DRIVER_MEMORY=1G
注:在設(shè)置Worker進程的CPU個數(shù)和內(nèi)存大小,要注意機器的實際硬件條件,如果配置的超過當(dāng)前Worker節(jié)點的硬件條件,Worker進程會啟動失敗。
$ vim slaves在slaves文件下填上slave主機名:
slave1
slave2
為了也可以觀察到spark集群上的歷史信息,我們還需要配置spark-default.conf
$ cp spark-defaults.conf.template spark-defaults.conf #復(fù)制配置模板
進行如下修改:
spark.eventLog.enabled true #是否記錄Spark事件,用于應(yīng)用程序在完成后重構(gòu)webUI
spark.eventLog.dir hdfs://master:9000/user/ubuntu/sparkhistorylogs #保存日志相關(guān)信息的路徑,可以是hdfs://開頭的HDFS路徑,也可以是file://開頭的本地路徑,都需要提前創(chuàng)建.
spark.eventLog.compress true #是否壓縮記錄Spark事件,前提spark.eventLog.enabled為true,默認(rèn)使用的是snappy
之后還需要繼續(xù)修改spark-env.sh,加入如下內(nèi)容:
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://master:9000/user/ubuntu/sparkhistorylogs"
參數(shù)描述:
spark.history.ui.port=18080 調(diào)整WEBUI訪問的端口號為18080;
spark.history.fs.logDirectory=hdfs://master:9000/user/ubuntu/sparkhistorylogs 配置了該屬性后,在start-history-server.sh時就無需再顯示的指定路徑;
spark.history.retainedApplications=3 指定保存Application歷史記錄的個數(shù),如果超過這個值,舊的應(yīng)用程序信息將被刪除。
注意:設(shè)置的目錄必須存在,可以先創(chuàng)建,不然在啟動歷史記錄時無法啟動,報錯如下:
failed to launch org.apache.spark.deploy.history.HistoryServer: at org.apache.spark.deploy.history.FsHistoryProvider.<init>(FsHistoryProvider.scala:49) ... 6 more full log in /home/ubuntu/workspace/spark/logs/spark-ubuntu-org.apache.spark.deploy.history.HistoryServer-1-master.out
---------------------------------------
將配置好的spark文件夾分發(fā)給所有slaves吧
$ scp -r ~/workspace/spark ubuntu@slave1:~/workspace/

3)啟動Spark

$ sbin/start-all.sh
$ sbin/start-history-server.sh
驗證 Spark 是否安裝成功,用jps檢查,
在 master 上應(yīng)該有以下幾個進程:
$ jps
3385 Jps
2912 SecondaryNameNode
7805 Master
3064 ResourceManager
2702 NameNode
3347 JobHistoryServer
3774 HistoryServer
在 slave 上應(yīng)該有以下幾個進程:
$ jps
2902 DataNode
3055 NodeManager
3189 Jps
3858 Worker
進入Spark的Web管理頁面: http://master:8080可以看slaves信息;
提交spark應(yīng)用程序并運行后,進入http://master:18080可以看到歷史信息。

4)關(guān)閉spark

sbin/stop-all.sh
sbin/stop-history-server.sh #關(guān)閉歷史記錄

參考:
Spark官網(wǎng)
linux公社-spark on yarn集群搭建
給力星-h(huán)adoop集群配置

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容