1. 程式人生 > >spark+hadoop (yarn模式)

spark+hadoop (yarn模式)


最近畢設需要用到 Spark 叢集,所以就記錄下了部署的過程。我們知道 Spark 官方提供了三種叢集部署方案: Standalone, Mesos, YARN。其中 Standalone 最為方便,本文主要講述結合 YARN 的部署方案。

軟體環境:

Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic x86_64)
Hadoop: 2.6.0
Spark: 1.3.0

0 寫在前面

本例中的演示均為非 root 許可權,所以有些命令列需要加 sudo,如果你是 root 身份執行,請忽略 sudo。下載安裝的軟體建議都放在 home 目錄之上,比如~/workspace

中,這樣比較方便,以免許可權問題帶來不必要的麻煩。

1. 環境準備

修改主機名

我們將搭建1個master,2個slave的叢集方案。首先修改主機名vi /etc/hostname,在master上修改為master,其中一個slave上修改為slave1,另一個同理。

配置hosts

在每臺主機上修改host檔案

vi /etc/hosts

10.1.1.107      master
10.1.1.108      slave1
10.1.1.109      slave2

配置之後ping一下使用者名稱看是否生效

ping slave1
ping slave2

2.SSH 免密碼登入 , 若是scp命令許可權否認可以通過拷貝來操作 , 下面紅色部分有記載

安裝Openssh server

sudo apt-get install openssh-server

在所有機器上都生成私鑰和公鑰

ssh-keygen -t rsa   #一路回車

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

scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/id_rsa.pub.slave1

在master上,將所有公鑰加到用於認證的公鑰檔案authorized_keys

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

將公鑰檔案authorized_keys分發給每臺slave

scp ~/.ssh/authorized_keys spark@slave1:~/.ssh/

在每臺機子上驗證SSH無密碼通訊

ssh master
ssh slave1
ssh slave2

如果登陸測試不成功,則可能需要修改檔案authorized_keys的許可權(許可權的設定非常重要,因為不安全的設定安全設定,會讓你不能使用RSA功能 )

chmod 600 ~/.ssh/authorized_keys

3.安裝 Java

官網下載最新版 Java 就可以,Spark官方說明 Java 只要是6以上的版本都可以,我下的是 jdk-7u75-linux-x64.gz
~/workspace目錄下直接解壓

tar -zxvf jdk-7u75-linux-x64.gz

修改環境變數sudo vi /etc/profile,新增下列內容,注意將home路徑替換成你的

export WORK_SPACE=/home/spark/workspace/
export JAVA_HOME=$WORK_SPACE/jdk1.7.0_75
export JRE_HOME=/home/spark/work/jdk1.7.0_75/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         #如果打印出如下版本資訊,則說明安裝成功
java version "1.7.0_75"
Java(TM) SE Runtime Environment (build 1.7.0_75-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.75-b04, mixed mode)

4.安裝 Scala

Spark官方要求 Scala 版本為 2.10.x,注意不要下錯版本,我這裡下了 2.10.4,官方下載地址(可惡的天朝大區域網下載 Scala 龜速一般)。

同樣我們在~/workspace中解壓

tar -zxvf scala-2.10.4.tgz

再次修改環境變數sudo vi /etc/profile,新增以下內容:

export SCALA_HOME=$WORK_SPACE/scala-2.10.4
export PATH=$PATH:$SCALA_HOME/bin

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

$ source /etc/profile   #生效環境變數
$ scala -version        #如果打印出如下版本資訊,則說明安裝成功
Scala code runner version 2.10.4 -- Copyright 2002-2013, LAMP/EPFL

5.安裝配置 Hadoop YARN

下載解壓

官網下載 hadoop2.6.0 版本,這裡給個我們學校的映象下載地址

同樣我們在~/workspace中解壓

tar -zxvf hadoop-2.6.0.tar.gz

配置 Hadoop

cd ~/workspace/hadoop-2.6.0/etc/hadoop進入hadoop配置目錄,需要配置有以下7個檔案:hadoop-env.shyarn-env.shslavescore-site.xmlhdfs-site.xmlmaprd-site.xmlyarn-site.xml

  1. hadoop-env.sh中配置JAVA_HOME

    # The java implementation to use.
    export JAVA_HOME=/home/spark/workspace/jdk1.7.0_75
    
  2. yarn-env.sh中配置JAVA_HOME

    # some Java parameters
    export JAVA_HOME=/home/spark/workspace/jdk1.7.0_75
    
  3. slaves中配置slave節點的ip或者host,

    slave1
    slave2
    
  4. 修改core-site.xml

    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://master:9000/</value>
        </property>
        <property>
             <name>hadoop.tmp.dir</name>
             <value>file:/home/spark/workspace/hadoop-2.6.0/tmp</value>
        </property>
    </configuration>
    
  5. 修改hdfs-site.xml

    <configuration>
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>master:9001</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/home/spark/workspace/hadoop-2.6.0/dfs/name</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/home/spark/workspace/hadoop-2.6.0/dfs/data</value>
        </property>
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
    </configuration>
    
  6. 修改mapred-site.xml

    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>
    
  7. 修改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>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>
    </configuration>
    

將配置好的hadoop-2.6.0資料夾分發給所有slaves吧

scp -r ~/workspace/hadoop-2.6.0 spark@slave1:~/workspace/

啟動 Hadoop

在 master 上執行以下操作,就可以啟動 hadoop 了。

cd ~/workspace/hadoop-2.6.0     #進入hadoop目錄bin/hadoop namenode -format     #格式化namenode在這一步咯 , 因為在上面的ssh配置時許可權還是不能通過 , 不能與slave1和slave2  ssh通訊
這一步已經解決 , 只需將master上的公鑰檔案id_rsa.pub拷貝到slave1和slave2上並重新命名為
authorized_keys即可 , 這是在虛擬機器下出現的問題 , 但是真實環境中還需要試驗scp命令來拷貝公鑰檔案

sbin/start-dfs.sh               #啟動dfs 
這裡會出現permission denied問題 , 但是卻在slave1和slave2中成功啟動了DataNode和NodeManager

sbin/start-yarn.sh              #啟動yarn

驗證 Hadoop 是否安裝成功

可以通過jps命令檢視各個節點啟動的程序是否正常。在 master 上應該有以下幾個程序:

$ jps  #run on master
3407 SecondaryNameNode
3218 NameNode

上面兩個沒有成功顯示出來 , 由於在上面紅色部分的問題 , 但是通過http://master:8088成功顯示介面


3552 ResourceManager
3910 Jps

在每個slave上應該有以下幾個程序:

$ jps   #run on slaves
2072 NodeManager
2213 Jps
1962 DataNode

或者在瀏覽器中輸入 http://master:8088 ,應該有 hadoop 的管理介面出來了,並能看到 slave1 和 slave2 節點。

6.Spark安裝

下載解壓

~/workspace目錄下解壓

tar -zxvf spark-1.3.0-bin-hadoop2.4.tgz
mv spark-1.3.0-bin-hadoop2.4 spark-1.3.0    #原來的檔名太長了,修改下

配置 Spark

cd ~/workspace/spark-1.3.0/conf    #進入spark配置目錄
cp spark-env.sh.template spark-env.sh   #從配置模板複製
vi spark-env.sh     #新增配置內容

spark-env.sh末尾新增以下內容(這是我的配置,你可以自行修改):

export SCALA_HOME=/home/spark/workspace/scala-2.10.4
export JAVA_HOME=/home/spark/workspace/jdk1.7.0_75
export HADOOP_HOME=/home/spark/workspace/hadoop-2.6.0
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
SPARK_MASTER_IP=master
SPARK_LOCAL_DIRS=/home/spark/workspace/spark-1.3.0
SPARK_DRIVER_MEMORY=1G

注:在設定Worker程序的CPU個數和記憶體大小,要注意機器的實際硬體條件,如果配置的超過當前Worker節點的硬體條件,Worker程序會啟動失敗。

vi slaves在slaves檔案下填上slave主機名:

slave1
slave2

將配置好的spark-1.3.0資料夾分發給所有slaves吧

scp -r ~/workspace/spark-1.3.0 spark@slave1:~/workspace/

啟動Spark

在spark安裝目錄下執行下面命令才行 , 目前的master安裝目錄在/opt/spark-2.0.0-bin-hadoop2.7/

sbin/start-all.sh

驗證 Spark 是否安裝成功

jps檢查,在 master 上應該有以下幾個程序:

$ jps
7949 Jps
7328 SecondaryNameNode
7805 Master
7137 NameNode
7475 ResourceManager

在 slave 上應該有以下幾個程序:

$jps
3132 DataNode
3759 Worker
3858 Jps
3231 NodeManager

執行示例

#本地模式兩執行緒執行
./bin/run-example SparkPi 10 --master local[2]

#Spark Standalone 叢集模式執行
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master spark://master:7077 \
  lib/spark-examples-1.3.0-hadoop2.4.0.jar \
  100

#Spark on YARN 叢集上 yarn-cluster 模式執行
./bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master yarn-cluster \  # can also be `yarn-client`
    lib/spark-examples*.jar \
    10

注意 Spark on YARN 支援兩種執行模式,分別為yarn-clusteryarn-client,具體的區別可以看這篇博文,從廣義上講,yarn-cluster適用於生產環境;而yarn-client適用於互動和除錯,也就是希望快速地看到application的輸出。

相關推薦

spark+hadoop (yarn模式)

最近畢設需要用到 Spark 叢集,所以就記錄下了部署的過程。我們知道 Spark 官方提供了三種叢集部署方案: Standalone, Mesos, YARN。其中 Standalone 最為方便,本文主要講述結合 YARN 的部署方案。 軟體環境: Ubuntu

Spark on YARN模式的安裝(spark-1.6.1-bin-hadoop2.6.tgz + hadoop-2.6.0.tar.gz)(master、slave1和slave2)(博主推薦)

說白了   Spark on YARN模式的安裝,它是非常的簡單,只需要下載編譯好Spark安裝包,在一臺帶有Hadoop YARN客戶端的的機器上執行即可。    Spark on YARN分為兩種: YARN cluster(YARN standalone,0.9版本以前)和 YA

Spark】篇---Sparkyarn模式兩種提交任務方式

方式 div -s and clas client 命令 yarn 模式 一、前述 Spark可以和Yarn整合,將Application提交到Yarn上運行,和StandAlone提交模式一樣,Yarn也有兩種提交任務的方式。 二、具體 1、yarn

spark on yarn模式下內存資源管理(筆記2)

warn 計算 nta 堆內存 註意 layout led -o exc 1.spark 2.2內存占用計算公式 https://blog.csdn.net/lingbo229/article/details/80914283 2.spark on yarn內存分配*

sparkYARN模式或Client模式提交任務不成功(application state: ACCEPTED)

應該是yarn的記憶體資源不夠 cd $HADOOP_HOME/bin 然後檢視yarn程序 yarn application -list 然後殺死任務 yarn application -kill application_1437456051228_1725

spark應用yarn模式提交多個應用,一個Running,其它處於accepted狀態

這篇文章解決我們的問題:https://blog.csdn.net/dandykang/article/details/48160927 以前只是開發,現在到了一家大資料剛起步公司,需要提交spark應用到yarn,每次只能執行一個,處於Running狀態,其它處於Accepted狀

Sparkyarn模式兩種提交任務方式

轉自:https://www.cnblogs.com/LHWorldBlog/p/8414342.html 一、前述 Spark可以和Yarn整合,將Application提交到Yarn上執行,和StandAlone提交模式一樣,Yarn也有兩種提交任務的方式。 二、具體  

Spark篇】---Sparkyarn模式兩種提交任務方式

一、前述Spark可以和Yarn整合,將Application提交到Yarn上執行,和StandAlone提交模式一樣,Yarn也有兩種提交任務的方式。二、具體           1、yarn-client提交任務方式配置         在client節點配置中spark

大資料之Spark(八)--- Spark閉包處理,Spark的應用的部署模式Spark叢集的模式,啟動Spark On Yarn模式Spark的高可用配置

一、Spark閉包處理 ------------------------------------------------------------ RDD,resilient distributed dataset,彈性(容錯)分散式資料集。 分割槽列表,fun

Sparkyarn模式兩種提交任務方式(yarn-client與yarn-cluster)

Spark可以和Yarn整合,將Application提交到Yarn上執行,和StandAlone提交模式一樣,Yarn也有兩種提交任務的方式。 1.yarn-client提交任務方式 配置 在client節點配置中spark-en

超圖大資料產品spark on yarn模式使用

本文介紹超圖大資料產品spark元件,iServer產品中的分散式分析服務,如何在部署好的spark叢集,hadoop叢集中採用spark on yarn模式提交任務進行空間大資料相關的分析。 一、環境 1. Ubuntu server 16,三個節點的hadoop叢集和spar

Spark on yarn模式的引數設定即調優

1 啟動方式 執行命令./spark-shell --master yarn預設執行的是client模式。 執行./spark-shell --master yarn-client或者./spark-shell --master yarn --deploy-m

spark on yarn模式裡需要有時手工釋放linux記憶體

歡迎您的加入! 微信公眾號平臺: 大資料躺過的坑 微信公眾號平臺: 人工智慧躺過的坑 大資料和人工智慧躺過的坑(總群): 161156071 更多QQ技術分群,詳情請見:http://www.cnblogs.com/zls

spark on yarn模式下掃描帶有kerberos的hbase

我上一篇寫了關於如何在spark中直接訪問有kerberos的hbase,現在我們需要對hbase進行全表的分散式掃描,在無kerberos的情況下通過sparkcontext的newApiHadoopRDD就可以達到目的,但有了kerberos的限制,這個方法就不行了,

關於sparkyarn模式的測試

額。。。本人菜雞一隻,強行記錄點東西,分享一下,也怕自己腦子不好使,忘記了~如果有說錯的,還請大家指出批評!!前言:spark的執行模式有很多,通過--master這樣的引數來設定的,現在spark已經有2.3.0的版本了,執行模式有mesos,yarn,local,更好的是

自己的HADOOP平臺(三):Mysql+hive遠端模式+Spark on Yarn

Spark和hive配置較為簡單,為了方便Spark對資料的使用與測試,因此在搭建Spark on Yarn模式的同時,也把Mysql + Hive一起搭建完成,並且配置Hive對Spark的支援,讓Spark也能像Hive一樣操作資料。 前期準備

spark-yarn 模式 jar包優化

spark 大數據 hadoop yarn在yarn模式下,會上傳jar包到yarn來執行spark程序,如果每次都上傳,很耗時間,而且如果是阿裏雲的機器,上傳很慢,180m的jar要上傳十幾分鐘,所以要提前上傳到hdfs中去。spark支持如下幾個參數spark.yarn.jars:只能指定具體jar包,在

Spark on yarn的兩種模式 yarn-cluster 和 yarn-client

然而 技術 負責 blog 作業 mage 申請 .com contain 從深層次的含義講,yarn-cluster和yarn-client模式的區別其實就是Application Master進程的區別,yarn-cluster模式下,driver運行在AM(Appli

Spark運行模式_基於YARN的Resource Manager的Client模式(集群)

發的 資源 使用 由於 ack 生成 clust 均衡 ont 現在越來越多的場景,都是Spark跑在Hadoop集群中,所以為了做到資源能夠均衡調度,會使用YARN來做為Spark的Cluster Manager,來為Spark的應用程序分配資源。 在執行Spark應

Spark的分散式執行模式 Local,Standalone, Spark on Mesos, Spark on Yarn, Kubernetes

Spark的分散式執行模式 Local,Standalone, Spark on Mesos, Spark on Yarn, Kubernetes Local模式 Standalone模式 Spark on Mesos模式 Spark on Yarn