天天看點

Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

spark on yarn搭建

一、hadoop叢集搭建

1. 解壓

如未指出,以下使用者均以hadoop使用者運作指令

cd /data/soft
tar –xvzf hadoop-.tar.gz –C /bigdata
mv hadoop- hadoop
           

2. 修改配置 hadoop-env.sh檔案

cd /bigdata/hadoop/etc/hadoop
vim hadoop-env.sh
           

修改:

為:

export JAVA_HOME=/bigdata/jdk
           

儲存退出。

3. 修改配置檔案core-site.xml

添加如下:

<property>
        <name>fs.defaultFS</name>
        <value>hdfs://bigdata1:8020</value>
</property>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/bigdata/hadoop/storage/tmp/${user.name}</value>
</property>
           

4. 修改hdfs-site.xml檔案

添加内容如下:

<property>
   <name>dfs.namenode.name.dir</name>
   <value>/bigdata/hadoop/storage/name/${user.name},/data/dfs-storage/name/${user.name}</value>
</property>
<property>
   <name>dfs.datanode.data.dir</name>
   <value>/bigdata/hadoop/storage/data/${user.name}</value>
</property>
<property>
   <name>dfs.replication</name>
   <value>2</value>
</property>
<property>
   <name>dfs.secondary.http.address</name>
   <value>bigdata1:50090</value>
</property>
<property>
   <name>dfs.namenode.http-address</name>
   <value>bigdata1:50070</value>
</property>
           

如果你的伺服器挂載了兩塊硬碟可以設定兩個路徑,以逗号隔開,這樣namenode的資料将儲存兩份,如果其中一份硬碟壞了,便可使用備份的資料進行恢複。

5. 修改mapred-site.xml 檔案

mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
           

修改内容如下:

<property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
</property>
           

6. 修改yarn-site.xml檔案

添加内容如下:

<property>
  <name>yarn.resourcemanager.hostname</name>
  <value>bigdata1</value>
</property>
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
           

7. 修改salves檔案

vim salves
           

添加内容如下:

bigdata2
bigdata3
bigdata4
           

8. 修改日志存儲路徑

vim $HADOOP_HOME/etc/hadoop
           

修改HADOOP_LOG_DIR為:

9. 複制節點

将hadoop-2.6.5檔案夾複制到bigdata2、bigdata3、bigdata4節點中去

cd /bigdata
scp –r hadoop hadoop@bigdata2:$PWD
scp –r hadoop hadoop@bigdata3:$PWD
scp –r hadoop hadoop@bigdata4:$PWD
           

10. 設定環境變量

在bigdata1伺服器執行如下指令:

sudo vim /etc/profile
           

添加如下内容:

export HADOOP_HOME=/bigdata/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
           

11. 格式化namenode

12. 驗證

1)、驗證hdfs

在bigdata1啟動hdfs,輸入指令:

然後輸入:

jps
           
Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

在bigdata2、bigdata3、bigdata4輸入指令:

jps
           
Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

測試檔案上傳:

cd ~
vim test
           

輸入一些單詞,以空格隔開。儲存上傳至hdfs中。

hadoop fs –put test /
hadoop fs –ls /
           
Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

2)、驗證yarn

在bigdata1啟動yarn,使用指令:

出入jps指令檢視程序:

Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

在bigdata2、bigdata3、bigdata4輸入jps指令可檢視到:

Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

3)、mapreduce測試

cd $HADOOP_HOME
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-.jar wordcount /test /testout
           
Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

二、scala安裝

1. 版本說明

由于livy僅支援scala2.10版本編譯的spark,是以scala版本選擇為scala2.10.6。

2. 解壓

cd /date/soft
tar -xvf scala-.tgz -C /bigdata
mv scala- scala
           

3. 配置環境變量

sudo vim /etc/profile
           

檔案末尾添加:

export SCALA_HOME=/bigdata/scala
export PATH=$PATH:$SCALA_HOME/bin
           

儲存退出。

4. 驗證

source /etc/profile
scala
           
Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

三、 安裝Apache-Maven

1. 解壓maven

cd /data/soft   
tar -xvzf apache-maven--bin.tar.gz -C /bigdata
mv apache-maven- maven
           

2. 設定環境變量

sudo vim /etc/profile
           

在檔案末尾添加:

export MAVEN_HOME=/bigdata/maven
export PATH=$PATH:$MAVEN_HOME/bin
           

儲存退出。

3. 驗證

source /etc/profile
mvn –version
           

顯示如下内容:

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)

Maven home: /bigdata/maven

Java version: 1.7.0_79, vendor: Oracle Corporation

Java home: /bigdata/jdk/jre

Default locale: en_US, platform encoding: UTF-8

OS name: “linux”, version: “3.10.0-327.el7.x86_64”, arch: “amd64”, family: “unix”

四、 spark on yarn編譯安裝

1. 編譯說明

livy目前版本隻支援scala2.10編譯的spark版本,且spark2.0以後僅提供基于scala2.11的預編譯版本,是以需基于scala2.10手動編譯spark2.0.1,是以采用可聯通外網的linux伺服器進行編譯spark,不過目前github主幹上的livy已經支援scala2.11編譯的spark了。

2. 環境準備

maven3.3.9

jdk1.7+

3. 解壓spark

上傳至本地可聯網伺服器/home/hadoop目錄解壓:

cd /data/soft
tar -xvzf spark-.tgz -C /bigdata
mv /bigdata/spark- /bigdata/spark
           

4. 編譯

1)、設定maven編譯記憶體:

注:如果不設定編譯過程導緻記憶體溢出。

2)、設定編譯scala的版本

cd /bigdata/spark
./dev/change-version-to-.sh
           

注:該指令将所有pom.xml檔案的中scala版本依賴改成2.10版本,相應的也有change-version-to-2.11.sh的檔案,該檔案将所有的scala依賴更改為2.11版本。如果編譯前不執行該指令,編譯出錯,錯誤如下:

Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

3)、設定json4s的jar包版本

cd /bigdata/spark
vim pom.xml
           

搜尋:/json4s

修改前:

Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

修改後:

Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

注:

當spark整合livy的時候,如果不修改json4s的版本的話,由于使用預設的版本為3.2.11,導緻整合失敗,是以在編譯過程中需要更改該jar包的版本号為3.2.10。如果使用3.2.11版本,livy整合spark錯誤資訊如下:

Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

4)、編譯:

編譯有兩種方式。

方式一:

cd /bigdata/spark
mvn -Psparkr -Pyarn -Phadoop- -Dhadoop.version= -Phive -Phive-thriftserver -Dscala- -DskipTests clean package
           

直接在spark目錄下進行編譯,這樣導緻的編譯後的檔案和源碼全都在同一個包内,且編譯後的jar包全部存放在各個子項目的target檔案夾下,不推薦使用。

方式二:

執行spark自帶的編譯腳本

cd /bigdata/spark
./dev/make-distribution.sh --name custom-spark --tgz -Psparkr -Pyarn -Phadoop- -Dhadoop.version= -Phive -Phive-thriftserver -Dscala- -DskipTests
           

編譯結果将在編譯目錄下生成可分布部署的壓縮包:

spark-2.0.1-bin-custom-spark.tgz

建議使用方式二進行編譯。

編譯參數說明:

編譯參數 參數說明
-Psparkr: 支援sparkR
-Pyarn: 支援yarn
-Phadoop-2.6 支援hadoop版本
-Phadoop.version=2.6.5 支援hadoop的具體版本
-Phive 支援hive
-Phive-thriftserver 支援thriftserver釋出sparksql server
-Dscala-2.10 基于scala編譯版本
-DskipTests 編譯過程忽略測試類
Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

至此spark編譯成功。

注:編譯過程常常因為網絡原因導緻編譯失敗,隻要重新運作編譯代碼即可,耐心等待,總會成功。

5. 無法聯網環境編譯spark

可以在聯網的環境下編譯成功spark,如果采用方式二編譯的spark,可以将該分布式部署包上傳到不可聯網的環境下進行部署。如果為了追求最佳性能,希望能在無法聯網的環境下也編譯成功spark,可以進行如下操作:

1)、将編譯成功spark的linux環境下的maven本地倉庫打包

檢視本地倉庫的位置。此處的設定為:/home/hadoop/.m2/repository

cd /home/hadoop/.m2/repository
tar –xvcf repository.spark.tar.gz repository
           

2)、上傳至不可聯網的叢集伺服器

a、如果本地伺服器能夠聯通叢集伺服器,直接使用如下指令:

scp repository.spark.tar.gz 使用者名@主機名或ip:存放路徑
           

b、如果無法聯通,可以借助secureCRT工具,從本地linux環境将相應的軟體包下載下傳至可聯通叢集伺服器器bigdata1的系統環境中,然後借助secureCRT工具上傳至叢集伺服器。

c、如果未安裝secureCRT工具,可以使用ftp伺服器進行進行拉取。首先在本地linux伺服器安裝ftpd服務,具體安裝步驟請自行查閱資料。

本次使用方法a直接上傳至叢集伺服器。

3)、覆寫maven倉庫

檢視叢集maven倉庫

未設定,未預設存儲路徑: $HOME/.m2/repository

将上傳的到叢集伺服器的repository.tar.gz解壓到該目錄并覆寫repository:

cd $HOME/.m2
tar -xvzf /data/soft/repository.spark.tar.gz –C .
find ~/.m2/repository -name _remote.repositories |xargs rm –rf
           
注:如果不執行find ~/.m2/repository -name _remote.repositories |xargs rm –rf該指令直接進行編譯,maven依舊會從遠端伺服器更新版本,而無法編譯。主要是因為maven的repository中的每個jar包所在目錄都會存在一個這樣的檔案:_maven.repositories。這個檔案存放着原始repository的相關資訊,由于移動了repository倉庫,編譯過程中,maven發現原始記錄的repository資訊與實際不一緻,便會試着去更新相關的pom檔案。
是以執行該指令,删除所有的_maven.repositories檔案,便可阻止maven更新。
           

4)、叢集編譯

cd /bigdata/
tar -xvf /date/soft/spark-.tar -C .
mv spark- spark
cd spark
           

編譯前的設定參照前文設定。

執行mvn指令進行編譯。使用./dev/make-distribution.sh該腳本編譯始終要下載下傳些檔案,導緻無法編譯,可能還需要拷貝maven的什麼設定才行,具體沒有研究。

mvn -Psparkr -Pyarn -Phadoop- -Dhadoop.version= -Phive -Phive-thriftserver -Dscala- -DskipTests clean package
           

6. 配置spark-env.conf

cd /bigdata/spark/conf
mv spark-env.sh.template spark-env.sh
vim spark-env.sh
           

檔案末尾添加如下内容:

export JAVA_HOME=/bigdata/jdk
export SCALA_HOME=/bigdata/scala
export HADOOP_HOME=/bigdata/hadoop
           

如果/etc/profile設定了也可以跳過此步驟

7. 修改日志存儲路徑

添加以下内容:

8. 配置/etc/profile

sudo vim /etc/profile
           

檔案末尾添加以下内容:

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
export SPARK_HOME=/bigdata/spark
           

儲存退出。

9. 驗證

source /etc/profile
cd /bigdata/spark
           

運作Pi測試:

./bin/spark-submit --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster\ --driver-memory 2g \ --executor-memory 3g \ --executor-cores 3 \ examples/jars/spark-examples_2.10-2.0.1.jar \ 10

主節點程序:

Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

子節點程序:

Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

子節點會出現ApplicationMaster、ExecutorLauncher、CoarseGraineExecutorBackend相關程序,ApplicationMaster就相當于driver端了,一個sparkContext在叢集中對應生成一個ApplicationMaster。随着任務結束,程序最終消失。

輸出結果:

Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

./bin/spark-submit –class org.apache.spark.examples.SparkPi \

–master yarn \

–deploy-mode client \

–driver-memory 2g \

–executor-memory 3g \

–executor-cores 3 \

examples/jars/spark-examples_2.10-2.0.1.jar \

10

client模式,那spark-submit就相當于driver端了,結果可以直接在控制台看到。輸出結果:

Spark2.0.1 on yarn with hue 叢集搭建部署(二)spark on yarn搭建

限水準有限,哪裡說的不對,歡迎拍磚,互相學習,互相進步

繼續閱讀