Spark on Yarn集羣搭建

因爲最近學習大數據開發,spark做爲分佈式內存計算框架,當前十分火熱,所以做爲首選學習技術之一。Spark官方提供了三種集羣部署方案: Standalone, Mesos, Yarn。其中 Standalone 爲spark自己提供的集羣模式,搭建過程能夠參考官網,本文介紹Spark on Yarn集羣部署過程。使用3臺普通機器搭建Spark集羣,html

軟件環境:java

Ubuntu 16.04 LTSnode

Ubuntu 16.04 LTSlinux

CentOS7web

Scala-2.10.6apache

Hadoop-2.7.2ubuntu

spark-1.6.1-bin-hadoop2.6vim

Java-1.8.0_77centos

硬件環境:瀏覽器

一個Master節點

Intel® Core™ i5-2310 CPU @ 2.90GHz × 4

4G內存

300G硬盤

兩個Slave節點

Intel® Core™ i3-2100 CPU @ 3.10GHz × 4

4G內存

500G硬盤

1、配置/etc/hosts及免密碼登陸,時間同步/主機名修改

本文下載安裝的軟件都放在 home 目錄下。

1. 主機hosts文件配置

在每臺主機上修改host文件

 

sudo vim /etc/hosts

218.199.92.227 fang-ubuntu1(Master)

218.199.92.226 fang-centos(Slave)

218.199.92.225  fang-Lenovo(Slave)

127.0.0.1 localhost

127.0.1.1 localhost

注:若此地未配置,或者未配置正確會致使集羣啓動不正常或者失敗(nodemanager did not stop gracefully after 5 seconds )

配置以後ping一下各機器名稱檢查是否生效,例如ssh fang@fang-centos。

2. 配置SSH 免密碼登陸

若是沒有安裝ssh,須要安裝Openssh server,命令爲sudo apt-get install openssh-server。

1) 在全部機器上都生成私鑰和公鑰

ssh-keygen -t rsa  #一路回車

2) 須要讓機器間都能相互訪問,就把每一個機子上的id_rsa.pub發給master節點,傳輸公鑰能夠用scp來傳輸。

scp ~/.ssh/id_rsa.pub fang@fang-ubuntu1:~/.ssh/id_rsa.pub.slave1

3) 在master上,將全部公鑰加到用於認證的公鑰文件authorized_keys中

cat ~/.ssh/id_rsa.pub* >> ~/.ssh/authorized_keys

4) 將公鑰文件authorized_keys分發給每臺slave

scp ~/.ssh/authorized_keys fang@fang-centos:~/.ssh/

或者 ssh-copy-id -i ~/.ssh/id_rsa.pub t@slave2  分發公鑰(注意:目的ip後面不須要加具體路徑!)

5) 在每臺機子上驗證SSH無密碼登陸

 

在終端中輸入登陸命令,例如:ssh fang@fang-centos 若是直接登陸成功而不須要登陸密碼,則表示設置正確;若是登陸不成功,即仍然須要登陸密碼,則可能須要修改文件authorized_keys的權限。

注:.ssh 文件夾的權限必須爲700,authorized_keys文件權限必須爲600

使用以下命令改變文件夾權限:chmod 600 ~/.ssh/authorized_keys

四、設置文件和目錄權限:

設置authorized_keys權限
$ chmod 600 authorized_keys 
設置.ssh目錄權限
$ chmod 700 -R .ssh

 

要保證.ssh和authorized_keys都只有用戶本身有寫權限。不然驗證無效。(今天就是遇到這個問題,找了很久問題所在),其實仔細想一想,這樣作是爲了避免會出現系統漏洞。

2、安裝 Java

從官網下載最新版 Java,Spark官方說明 Java 只要是6以上的版本均可以,本文使用的是 jdk-8u91-linux-x64.tar.gz。

在下載目錄下直接解壓tar -zcvf jdk-8u91-linux-x64.tar.gz並複製文件到/usr/lib/jvm中,命令以下:

    sudo cp -r jdk1.8.0_77 /usr/lib/jvm(若是沒有jvm文件夾,則手動建立一個),修改環境變量sudo vim /etc/profile,添加下列內容:

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

而後使環境變量生效,並驗證 Java 是否安裝成功

$ source /etc/profile  #生效環境變量
    $ java -version   #若是打印出以下版本信息,則說明安裝成功

 

3、安裝 Scala

Spark官方要求 Scala 版本爲 2.10.x,注意不要下錯版本,我這裏下了 2.10.6一樣咱們在~/中解壓

tar -zcvf scala-2.10.6.tar.gz

再次修改環境變量sudo vim /etc/profile,添加如下內容:

export SCALA_HOME=/home/fang/scala-2.10.6
    export PATH=$PATH:$SCALA_HOME/bin

一樣的方法使環境變量生效,並驗證 scala 是否安裝成功

$ source /etc/profile  #生效環境變量
    $ scala -version        #若是打印出以下版本信息,則說明安裝成功。

4、安裝配置 Hadoop YARN

從官網下載 hadoop2.7.2版本,在用戶根目錄解壓tar -zcvf hadoop-2.7.2.tar.gz

再次修改環境變量sudo vim /etc/profile,添加如下內容:

export HADOOP_HOME=/home/fang/hadoop-2.7.2

export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop

export YARN_HOME=/home/fang/hadoop-2.7.2

export YARN_CONF_DIR=${YARN_HOME}/etc/hadoop

一樣的方法使環境變量生效

$ source /etc/profile  #生效環境變量

注:有時候修改了/etc/profile文件,執行命令source以後仍是不能達到正常的效果,則須要從新機器,看問題是否能解決。

配置 Hadoop,cd  ~/hadoop-2.7.2/etc/hadoop進入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節點的ip或者host,

fang-centos

fang-Lenovo

 

修改core-site.xml

fs.defaultFS:hadoop namenode地址

dfs.replication:副本數量

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://fang-ubuntu1:9000/</value> 
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/home/fang//hadoop-2.7.2/tmp</value>
    </property>
</configuration>

修改hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>fang-ubuntu1:9001</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/fang/hadoop-2.7.2/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/fang/hadoop-2.7.2/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
</configuration>

修改mapred-site.xml

mapred 運行在yarn上

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

修改yarn-site.xml

yarn集羣配置

<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-ubuntu1:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>fang-ubuntu1:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>fang-ubuntu1:8035</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>fang-ubuntu1:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>fang-ubuntu1:8088</value>
    </property>
</configuration>

將配置好的hadoop-2.7.2文件夾分發給全部slaves節點

scp -r ~/hadoop-2.6.0 fang@fang-centos:~/

啓動 Hadoop
在 master節點上執行如下操做,就能夠啓動 hadoop 了。

cd ~/hadoop-2.7.2    #進入hadoop目錄
bin/hadoop namenode -format    #格式化namenode

注:若格式化以後從新修改了配置文件,從新格式化以前須要刪除tmp,dfs,logs文件夾。
sbin/start-dfs.sh              #啓動dfs 查看namenode:http://ip:50070/
sbin/start-yarn.sh              #啓動yarn

驗證 Hadoop 是否安裝成功,能夠經過jps命令查看各個節點啓動的進程是否正常。

在 master 上應該有如下幾個進程:

在每一個slave上應該有如下幾個進程:

在瀏覽器中輸入 http://fang-ubuntu1:8088 ,能夠看到hadoop 的管理界面。

 

5、Spark安裝

下載解壓,進入官方下載地址下載最新版 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    #進入spark配置目錄

cp spark-env.sh.template spark-env.sh  #從配置模板複製

vim spark-env.sh    #添加配置內容

在spark-env.sh末尾添加如下內容(這是個人配置,你能夠自行修改):

export SPARK_HOME=/home/fang/spark-1.6.1-bin-hadoop2.6

export SCALA_HOME=/home/fang/scala-2.10.6

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_77

export HADOOP_HOME=/home/fang/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/fang/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

注:在設置Worker進程的CPU個數和內存大小,要注意機器的實際硬件條件,若是配置的超過當前Worker節點的硬件條件,Worker進程會啓動失敗。

vim slaves在slaves文件下填上slave主機名:

slave1
slave2

將配置好的spark-1.6.1-bin-hadoop2.6文件夾分發給全部slaves吧

scp -r ~/spark-1.6.1-bin-hadoop2.6 fang@fang-cenos:~/

啓動Spark ,sbin/start-all.sh

驗證 Spark 是否安裝成功
主節點上啓動了Master進程:

在 slave 上啓動了Worker進程:

 

進入Spark的Web管理頁面:http://fang-ubuntu1:8080

 

6、運行示例

本例以集羣模式運行SparkPi實例程序(deploy-mode 設置爲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

 

任務提交時web界面

 

做業運行完成web界面

 

注意 Spark on YARN 支持兩種運行模式,分別爲yarn-cluster和yarn-client,yarn-cluster適用於生產環境;而yarn-client適用於交互和調試,由於能在客戶端終端看到程序輸出。客戶端模式實例和上面集羣模式運行過程相似,在此不在贅述。

部署結束後,提交spark工程,提示使用內置hadoop

「The pre-built 32-bit i386-Linux native hadoop library is available as part of the hadoop distribution and is located in the lib/native directory​」

 

需本地從新編譯

從新checkout source code

svn checkout http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.1.0-beta/

加上編譯native的選項,編譯時會根據當前的操做系統架構來生產相應的native庫

mvn package -Pdist,native -DskipTests -Dtar

再去native文件下查看全部的file type,已經都是64位版的了,替換線上文件,WARNING消除

 

代碼測試:

word count

1,先上傳一個文本文件

hadoop fs -put ./derby.log  file

2,確認上傳成功?從hdfs下載文件

t@ubuntu:~/source/spark$ hadoop fs -get hdfs://192.168.1.166:9000/user/t/file derby.log

hdoop uri相關

hadoop hdfs uri詳解

1、hdfs基本命令:
hadoop fs -cmd <args>
選項:
cmd: 具體的操做,基本上與UNIX的命令行相同
args: 參數

2、hdfs資源uri格式:
用法:scheme://authority/path
選項:
scheme–>協議名,file或hdfs
authority–>namenode主機名
path–>路徑
範例:hdfs://localhost:54310/user/hadoop/test.txt
假設已經在/home/hadoop/hadoop-1.1.1/conf/core-site.xml裏配置了fs.default.name=hdfs://localhost:54310,則僅使用/user/hadoop/test.txt便可。hdfs默認工做目錄爲/user/$USER,$USER是當前的登陸用戶名。

3、hdfs命令範例
hadoop fs -mkdir /user/hadoop
hadoop fs -ls /user
hadoop fs -lsr /user(遞歸的)
hadoop fs -put test.txt /user/hadoop(複製到hdfs://localhost:54310/user/hadoop目錄下,首先要建立當前目錄)
hadoop fs -get /user/hadoop/test.txt .(複製test.txt文件到本地當前目錄下)
hadoop fs -cat /user/hadoop/test.txt
hadoop fs -tail /user/hadoop/test.txt(查看最後1000字節)
hadoop fs -rm /user/hadoop/test.txt
hadoop fs -help ls(查看ls命令的幫助文檔)
相關文章
相關標籤/搜索