由于最近學(xué)習(xí)大數(shù)據(jù)開發(fā),spark作為分布式內(nèi)存計算框架赦拘,當(dāng)前十分火熱,因此作為首選學(xué)習(xí)技術(shù)之一躺同。Spark官方提供了三種集群部署方案: Standalone, Mesos, Yarn丸逸。其中 Standalone 為Spark本身提供的集群模式蹋艺,搭建過程可以參考官網(wǎng),本文介紹Spark on Yarn集群部署過程黄刚。使用3臺普通機器搭建Spark集群。
- 軟件環(huán)境
Ubuntu 16.04 LTS
Scala-2.10.6
Hadoop-2.7.2
spark-1.6.1-bin-hadoop2.6
Java-1.8.0_77
- 硬件環(huán)境:
一個Master節(jié)點,一個Slave節(jié)點
Intel? Core? i5-2310 CPU @ 2.90GHz × 4
4G內(nèi)存
500G硬盤
一個Slave節(jié)點
Intel? Core? i3-2100 CPU @ 3.10GHz × 4
4G內(nèi)存
500G硬盤
一畏邢、配置/etc/hosts及免密碼登錄
本文下載安裝的軟件都放在 home 目錄下检吆。
-
主機hosts文件配置
在每臺主機上修改host文件
sudo vim /etc/hosts 218.199.92.225 fang-ubuntu(Master) 218.199.92.226 fei-ubuntu(Slave) 218.199.92.227 kun-ubuntu(Slave) 127.0.0.1 localhost 127.0.1.1 localhost
** 注:若此地未配置蹭沛,或者未配置正確會導(dǎo)致集群啟動不正常或者失敗(nodemanager did not stop gracefully after 5 seconds )**
配置之后ping一下各機器名稱檢查是否生效咆贬,例如ssh hadoop@fei-ubuntu
- 配置SSH 免密碼登錄
-
如果沒有安裝ssh斟或,需要安裝Openssh server萝挤,命令為:
sudo apt-get install openssh-server。
-
在所有機器上都生成私鑰和公鑰
ssh-keygen -t rsa #一路回車
-
需要讓機器間都能相互訪問端蛆,就把每個機子上的id_rsa.pub發(fā)給master節(jié)點酥泛,傳輸公鑰可以用scp來傳輸。
scp ~/.ssh/id_rsa.pub hadoop@fang-ubuntu:~/.ssh/id_rsa.pub.slave1
-
在master上呆躲,將所有公鑰加到用于認(rèn)證的公鑰文件authorized_keys中
cat ~/.ssh/id_rsa.pub* >> ~/.ssh/authorized_keys
-
將公鑰文件authorized_keys分發(fā)給每臺slave
scp ~/.ssh/authorized_keys hadoop@kun-ubuntu:~/.ssh/
在每臺機子上驗證SSH無密碼登錄
在終端中輸入登錄命令捶索,例如:ssh hadoop@fang-ubuntu 如果直接登錄成功而不需要登錄密碼腥例,則表示設(shè)置正確;如果登錄不成功璃弄,即仍然需要登錄密碼构回,則可能需要修改文件authorized_keys的權(quán)限疏咐。
注:.ssh 文件夾的權(quán)限必須為700凳鬓,authorized_keys文件權(quán)限必須為600
使用如下命令改變文件夾權(quán)限:chmod 600 ~/.ssh/authorized_keys
二患民、安裝 Java
從官網(wǎng)下載最新版 Java垦梆,Spark官方說明 Java 只要是6以上的版本都可以托猩,本文使用的是 jdk-8u91-linux-x64.tar.gz。
在下載目錄下直接解壓tar -zcvf jdk-8u91-linux-x64.tar.gz并復(fù)制文件到/usr/lib/jvm中赦肃,命令如下:
sudo cp -r jdk1.8.0_77 /usr/lib/jvm(如果沒有jvm文件夾公浪,則手動創(chuàng)建一個)
修改環(huán)境變量 /etc/profile欠气,添加下列內(nèi)容:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_77
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
然后使環(huán)境變量生效,并驗證 Java 是否安裝成功
$ source /etc/profile #生效環(huán)境變量
$ java -version #如果打印出如下版本信息队塘,則說明安裝成功
三憔古、安裝 Scala
Spark官方要求 Scala 版本為 2.10.x淋袖,注意不要下錯版本,我這里下了 2.10.6同樣我們在~/中解壓
tar -zcvf scala-2.10.6.tar.gz
再次修改環(huán)境變量sudo vim /etc/profile灸芳,添加以下內(nèi)容:
export SCALA_HOME=/home/hadoop/scala-2.10.6
export PATH=$PATH:$SCALA_HOME/bin
同樣的方法使環(huán)境變量生效拜姿,并驗證 scala 是否安裝成功
$ source /etc/profile #生效環(huán)境變量
$ scala -version #如果打印出如下版本信息蕊肥,則說明安裝成功蛤肌。
四裸准、安裝配置 Hadoop YARN
從官網(wǎng)下載 hadoop2.7.2版本,在用戶根目錄解壓tar -zcvf hadoop-2.7.2.tar.gz
再次修改環(huán)境變量sudo vim /etc/profile赔硫,添加以下內(nèi)容:
export HADOOP_HOME=/home/hadoop/hadoop-2.7.2
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export YARN_HOME=/home/hadoop/hadoop-2.7.2
export YARN_CONF_DIR=${YARN_HOME}/etc/hadoop
同樣的方法使環(huán)境變量生效
$ source /etc/profile #生效環(huán)境變量
注:有時候修改了/etc/profile文件爪膊,執(zhí)行命令source之后還是不能達(dá)到正常的效果,則需要重新機器峦阁,看問題是否能解決耘成。
配置 Hadoop瘪菌,cd ~/hadoop-2.7.2/etc/hadoop進(jìn)入hadoop配置目錄,需要配置有以下7個文件:
hadoop-env.sh茧彤,yarn-env.sh疆栏,slaves,core-site.xml珠洗,hdfs-site.xml许蓖,maprd-site.xml调衰,yarn-site.xml。
在hadoop-env.sh中配置JAVA_HOME
# The java implementation to use.
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_77
在yarn-env.sh中配置JAVA_HOME
# some Java parameters
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_77
在slaves中配置slave節(jié)點的ip或者h(yuǎn)ost米酬,
fei-ubuntu
kun-ubuntu
修改core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://fang-ubuntu:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop-2.7.2/tmp</value>
</property>
</configuration>
修改hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>fang-ubuntu:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop-2.7.2/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop-2.7.2/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
修改mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml
<configuration>
<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>fang-ubuntu:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>fang-ubuntu:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>fang-ubuntu:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>fang-ubuntu:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>fang-ubuntu:8088</value>
</property>
</configuration>
將配置好的hadoop-2.7.2文件夾分發(fā)給所有slaves節(jié)點
scp -r ~/hadoop-2.6.0 hadoop@fei-ubuntu:~/
啟動 Hadoop
在 master節(jié)點上執(zhí)行以下操作加派,就可以啟動 hadoop 了芍锦。
cd ~/hadoop-2.7.2 #進(jìn)入hadoop目錄
bin/hadoop namenode -format #格式化namenode
注:若格式化之后重新修改了配置文件飞盆,重新格式化之前需要刪除tmp,dfs车胡,logs文件夾照瘾。
sbin/start-dfs.sh #啟動dfs
sbin/start-yarn.sh #啟動yarn
驗證 Hadoop 是否安裝成功析命,可以通過jps命令查看各個節(jié)點啟動的進(jìn)程是否正常逃默。
在 master 上應(yīng)該有以下幾個進(jìn)程:
在每個slave上應(yīng)該有以下幾個進(jìn)程:
在瀏覽器中輸入 http://fang-ubuntu:8088 完域,可以看到hadoop 的管理界面吟税。
五、Spark安裝
下載解壓肖抱,進(jìn)入官方下載地址下載最新版 Spark异旧。我下載的是 spark-1.6.1-bin-hadoop2.6.tar.gz吮蛹。
在~/目錄下解壓
tar -zcvf spark-1.6.1-bin-hadoop2.6.tar.gz
配置 Spark
cd ~spark-1.6.1-bin-hadoop2.6/conf #進(jìn)入spark配置目錄
cp spark-env.sh.template spark-env.sh #從配置模板復(fù)制
vim spark-env.sh #添加配置內(nèi)容
在spark-env.sh末尾添加以下內(nèi)容(這是我的配置,你可以自行修改):
export SPARK_HOME=/home/hadoop/spark-1.6.1-bin-hadoop2.6
export SCALA_HOME=/home/hadoop/scala-2.10.6
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_77
export HADOOP_HOME=/home/hadoop/hadoop-2.7.2
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SCALA_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$YARN_HOME/etc/hadoop
export SPARK_MASTER_IP=218.199.92.227
SPARK_LOCAL_DIRS=/home/haodop/spark-1.6.1-bin-hadoop2.6
SPARK_DRIVER_MEMORY=1G
export SPARK_LIBARY_PATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$HADOOP_HOME/lib/native
注:在設(shè)置Worker進(jìn)程的CPU個數(shù)和內(nèi)存大小术荤,要注意機器的實際硬件條件然低,如果配置的超過當(dāng)前Worker節(jié)點的硬件條件务唐,Worker進(jìn)程會啟動失敗带兜。
vim slaves在slaves文件下填上slave主機名:
fei-ubuntu
kun-ubuntu
將配置好的spark-1.6.1-bin-hadoop2.6文件夾分發(fā)給所有slaves吧
scp -r ~/spark-1.6.1-bin-hadoop2.6 hadoop@kun-ubuntu:~/
啟動Spark
sbin/start-all.sh
驗證 Spark 是否安裝成功
主節(jié)點上啟動了Master進(jìn)程:
在 slave 上啟動了Worker進(jìn)程:
進(jìn)入Spark的Web管理頁面:http://fang-ubuntu:8080
六刑巧、運行示例
本例以集群模式運行SparkPi實例程序(deploy-mode 設(shè)置為cluster)
./bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master yarn --deploy-mode cluster
--driver-memory 1G --executor-memory 1G
--executor-cores 1 lib/spark-examples-1.6.1-hadoop2.6.0.jar 40
任務(wù)提交時web界面
作業(yè)運行完成web界面
注意 Spark on YARN 支持兩種運行模式啊楚,分別為yarn-cluster和yarn-client恭理,yarn-cluster適用于生產(chǎn)環(huán)境郭变;而yarn-client適用于交互和調(diào)試,因為能在客戶端終端看到程序輸出周伦∥椿模客戶端模式實例和上面集群模式運行過程類似片排,在此不在贅述。
The End