(一) 從零開始搭建Spark Standalone集群環境搭建


本文主要講解spark 環境的搭建

主機配置  4核8線程,主頻3.4G,16G內存

虛擬環境: VMWare

虛擬環境系統:Ubuntu 14.10

虛擬機運行環境:

  • jdk-1.7.0_79(64bit)
  • hadoop-2.6.0.tar.gz
  • scala-2.10.4.tar
  • spark-1.5.0-bin -hadoop-2.6.0.tgz

(一)樣本虛擬機的搭建

1)虛擬機安裝ubuntu,每個分配3G內存,完成后后輸入如下命令來獲得root權限:

  #sudo passwd 

2)ubuntu下源的更改:

  #sudo gedit /etc/apt/sources.list

   找到一個還用的源替換掉 /etc/apt/sources.list中原來的內容

  執行更新:

  #sudo apt-get update

3)安裝ssh,以便遠程登錄

  ssh-client : 本機作為客戶機通過ssh鏈接遠程的服務器

  ssh-server:本機作為遠程服務器,可以被客戶機鏈接

  #sudo apt-get install ssh-client

  注意上述命令可能出現問題   “依賴 :openssh-client (= 1:6.6p1-2ubuntu1)”

  使用 這條命令即可解決: #sudo apt-get install ssh-client= 1:6.6p1-2ubuntu1

  接下來安裝#sudo apt-get install ssh-server (或者 apt-get install openssh-server)

4)查看ssh服務是否啟動

  #ps -e |grep ssh

  顯現出sshd 則說明安裝成功

5)更新vim

  #sudo apt-get remove vim

  #sudo apt-get install vim

6)修改/etc/ssh/sshd_config  文件,使得本機允許遠程連接,現在即可通過putty,xshell等連接該機

   # Authentication:
  LoginGraceTime 120
  PermitRootLogin yes
  StrictModes yes

7)修改host主機名

  #vi  /etc/hostname 將該文件該為spark1

  然后 #vi /ect/hosts 改成與上述文件相同的名字 

  重啟  #hostname 查看是否生效

 8)注意虛擬機的網絡設置為橋接

  #ifconfig 可來查看網絡狀態

 9)根據求查看是否需要固定IP

  設置靜態IP方法如下:

  #sudo vim /etc/network/interfaces

  #修改如下部分:

  auto eth0
  iface eth0 inet static
  address 192.168.0.117
  gateway 192.168.0.1 #這個地址你要確認下 網關是不是這個地址
  netmask 255.255.255.0
  network 192.168.0.0
  broadcast 192.168.0.255

  因為以前是dhcp解析,所以會自動分配dns服務器地址,而一旦設置為靜態ip后就沒有自動獲取到的dns服務器了,設置靜態IP地址后,再重啟后就無法解析域名。想重新設置一下DNS,有兩個辦法:

  •  通過/etc/network/interfaces,在它的最后增加一句:

    dns-nameservers 8.8.8.8

    8.8.8.8是Google提供的DNS服務,這里只是舉一個例子,你也可以改成電信運營商的DNS。重啟后DNS就生效了。

  •  通過修改:

    /etc/resolvconf/resolv.conf.d/base(這個文件默認是空的)

    在里面插入:
    nameserver 8.8.8.8
    nameserver 8.8.4.4

    如果有多個DNS就一行一個,修改好保存,然后執行resolvconf -u再看/etc/resolv.conf,最下面就多了2行:

    nameserver 8.8.8.8
    nameserver 8.8.4.4

  可以看到我們的設置已經加上了,然后再ping一個域名,當時就可以解析了,無需重啟。

  以上測試在我這里測試可想行不通,最后還是沒有修改,完全是橋接,DHCP自動獲取的,好在學校內部重啟后IP地址是不變的,所以暫時先這樣了,以后變了再改

 10)關閉防火牆 #ufw disable

 11)安裝jdk

  下載對應版本的JDK,切記X64為64位系統X86_64為64位系統,否則為32位

  解壓tar -zxvf jdk1.7.0_79 -C /usr/lib

  配置環境變量 #vi /etc/priofile ,添加如下字段

  export JAVA_HOME=/usr/lib/jdk1.7.0_79

  export PATH=$JAVA_HOME/bin:$PATH

  export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

  使改動生效 source /etc/profile

  驗證 java-version

12)安裝scala

  方法類似於java,上傳scala2.10.4包,解壓,#tar -zxvf  scala-2.10.4.tgz -C /usr/lib/scala

  到/etc/profile里配置路徑:

  export SCALA_HOME=/usr/lib/scala/scala-2.10.4

  export PATH=$PATH:${SCALA_HOME}/bin

  輸入如下命令使得配置生效#source /etc/profile

  驗證 #scala -version

13)克隆該樣本機,克隆出4個備份,然后分別配置每個機器的主機名與IP地址。

  改玩后自行測試看每個機器是否正確

14)設置ssh免密碼連接(注意公鑰匯總的命名)

  這里參考http://www.cnblogs.com/shishanyuan/p/4701510.html

15)下載hadoop-2.6.0_x64.tar.gz包 ,將該包解壓到/app/hadoop/文件夾下,並在切換到#cd /app/hadoop/hadoop-2.6.0/,創建三個文件夾#mkdir tmp #mkdir name #mkdir data  

16)接下來要配置hadoop環境變量

    首先切換到 #cd /app/hadoop/hadoop-2.6.0/etc/hadoop,打開如下文件#vi hadoop-env.sh,加入如下路徑:

    export JAVA_HOME=/usr/lib/ivm/jdk1.7.0_79

    export PATH=$PATH:/app/hadoop/hadoop-2.6.0/bin

    配置好后輸入# source hadoop-env.sh使得配置生效,接下來#hadoop version測試是否配置成功。

17)配置yarn-env.sh

    在/app/hadoop/hadoop-2.6.0/etc/hadoop打開配置文件yarn-env.sh

    #cd /app/hadoop/hadoop-2.6.0/etc/hadoop

    #sudo vi yarn-env.sh

    加入配置內容,設置JAVA_HOME路徑

    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79

    使用source yarn-env.sh使之生效

18)配置core-site.xml  

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://spark1:9000</value>
  </property>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://spark1:9000</value>
  </property>
  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/app/hadoop/hadoop-2.6.0/tmp</value>
    <description>Abase for other temporary directories.</description>
  </property>
  <property>
    <name>hadoop.proxyuser.hduser.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.hduser.groups</name>
    <value>*</value>
  </property>
</configuration>

19)配置hdfs-site.xml

<configuration>
  <property>
   <name>dfs.namenode.secondary.http-address</name>
   <value>spark1:9001</value>
  </property>
  <property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/app/hadoop/hadoop-2.6.0/name</value>
  </property>
  <property>
   <name>dfs.datanode.data.dir</name>
   <value>file:/app/hadoop/hadoop-2.6.0/data</value>
  </property>
  <property>
   <name>dfs.replication</name>
   <value>2</value>
  </property>
  <property>
   <name>dfs.webhdfs.enabled</name>
   <value>true</value>
  </property>
</configuration>

20)配置mapred-site.xml,一般情況下,只有一個mapred-site.xml.template ,# cp mapred-site.xml.template mapred-site.xml復制出來一份即可:

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>spark1:10020</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>spark1:19888</value>
  </property>
</configuration>

21)配置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>spark1:8032</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>spark1:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>spark1:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>spark1:8033</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>spark1:8088</value>
  </property>
</configuration>

22)配置slaves

    #vi slaves

    在slaves里加入:    

    spark1
    spark2
    spark3
    spark4

23)用scp分別向各個節點分發配置好的hadoop

    在個個slave里建立對應的文件目錄 /app/hadoop/, spark1切換到/app/hadoop目錄下

    # scp hadoop-2.6.0 root@spark2:/app/hadoop

    # scp hadoop-2.6.0 root@spark3:/app/hadoop

    # scp hadoop-2.6.0 root@spark4:/app/hadoop

24)格式化namenode

    #cd /app/hadoop/hadoop-2.6.0

    #hadoop namenode -format

25)啟動hdfs

    $cd /app/hadoop/hadoop-2.6.0/sbin

    $./start-dfs.sh

      啟動hdfs時候,報如下錯誤:Error: Cannot find configuration directory: /etc/hadoop,則應該在 /etc/profile里加入如下配置:

    #hadoop

    export HADOOP_HOME=/app/hadoop/hadoop-2.6.0
    export YARN_HOME=/app/hadoop/hadoop-2.6.0
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

    並且#source etc/profile 使得其生效

    若slave中部分datanode沒啟動,則#./stop-all.sh,然后刪除所有節點中的tmp,name,data三個文件夾,重新建立新的空文件夾

    格式化namenode #hadoop namenode -format,現在啟動應該正常了!

 26)驗證hdfs是否成功啟動

    #jps ,此時在spark1上面運行的進程有:NameNode、SecondaryNameNode和DataNode

    

    spark2-spark4上運行的有DataNode

    

25)啟動yarn

    #cd /app/hadoop/hadoop-2.6.0/sbin

    #./start-yarn.sh

    此時在spark1上的進程有:NameNode、SecondaryNameNode、DataNode、NodeManager和ResourceManager

    

    spark2-spark4上的進程有:DataNode NodeManager

    至此,hadoop安裝已經完成!!!接下來就是spark的安裝!

27)跑一下hadoop附帶的例子來測試是否安裝成功,下面以wordcount為例。

 

28)首先到spark官網下載hadoop2.6對應的安裝包,spark1.5.0-bin-hadoop2.6.tgz,上傳到/ooon,解壓縮# tar -zxvf  spark1.5.0-bin-hadoop2.6.tgz  -C  /app/hadoop,切換到spark主目錄,#cd  /app/hadoop/spark-1.5.0-bin-hadoop-2.6.0

29)配置spark的環境變量, 打開配置文件/etc/profile, 定義SPARK_HOME並把spark路徑加入到PATH參數中

    SPARK_HOME=/app/hadoop/spark-1.5.0

    PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

30)配置conf/spark-env.sh

    # conf/ 

    #cp  spark-env.sh.template  spark-env.sh

    #vi spark-env.sh

    在最后介入如下內容:

    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79

    export SPARK_MASTER_IP=spark1 (注意這里有個坑,若是你的IDE環境搭建在spark1以外的機器上,這里最好直接寫成spark1的IP172.21.75.100,血淚史)

    export SPARK_MASTER_PORT=7077

    export SPARK_WORKER_CORES=1

    export SPARK_WORKER_INSTANCES=1

    export SPARK_WORKER_MEMORY=1g

    source spark-env.sh使得配置生效。

31)配置slaves,如下

    

32)scp分發到各個節點

    #cd /app/hadoop

    #scp  -r spark-1.5.0-bin-hadoop-2.6.0 root@spark2:/app/hadoop

    #scp  -r spark-1.5.0-bin-hadoop-2.6.0 root@spark3:/app/hadoop 

    #scp  -r spark-1.5.0-bin-hadoop-2.6.0 root@spark3:/app/hadoop  

    接下來啟動spark

    #cd  sbin

    #./start-all.sh

     spark1的進程有:

    

    spark2-spark4的進程有:

    

    現在spark也裝好了!!!

33)在瀏覽器中輸入地址172.21.75.102:8080,可以看到集群的狀態

 

34)驗證客戶端連接

  進入hadoop1節點,進入spark的bin目錄,使用spark-shell連接集群

  $cd /app/hadoop/spark-1.1.0/bin

  $./spark-shell --master spark://spark1:7077 --executor-memory 500m

  在命令中只指定了內存大小並沒有指定核數,所以該客戶端將占用該集群所有核並在每個節點分配500M內存,  下圖可見其分配情況

  

  現在,我們已經通過spark-shell連接到了集群,現在就可以運行一下spark的示例wordcount

35)運行wordcound

  首先上傳數據到hdfs,#hadoop fs -mkdir -p  /usr/hadoop/testdata

  $./spark-shell --master spark://spark1:7077 --executor-memory 512m --driver-memory 500m

  接下來在shark-shell里鍵入如下代碼執行wordcount的計算

scala>val rdd=sc.textFile("hdfs://hadoop1:9000/user/hadoop/testdata/core-site.xml")

scala>rdd.cache()

scala>val wordcount=rdd.flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_)

scala>wordcount.take(10)

scala>val wordsort=wordcount.map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))

scala>wordsort.take(10)

   結果如下:Array[(String, Int)] = Array(("",100), (the,7), (</property>,6), (<property>,6), (under,3), (in,3), (License,3), (this,2), (-->,2), (file.,2))

 35)最后需要注意的是學校的IP變化后的處理

  除了 /etc/hosts 需要處理外,另外 spark-env.sh  也需要制定spark-master 的IP

  source spark-env.sh使得配置生效。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM