[大數據]-hadoop2.8和spark2.1徹底分佈式搭建

1、前期準備工做:

1.安裝包的準備:

2.輔助工具安裝包:

  • Putty:一個十分簡潔的連接服務器的工具。由於虛擬機太卡了長期在上面操做的話會卡到爆。用Putty能夠在主機用一個終端來操做虛擬機。
  • FlashFxp:用於在宿主機上傳和下載虛擬機的文件,固然VMware安裝了tools以後能夠隨意拖拽很方便,可是仍是考慮到卡爆的問題,虛擬機啓動後咱們徹底無論他,就看成服務器來用。

3.系統基本配置:(未說明則均在主機rzxmaster上操做)

   第一步:安裝VMware,建立虛擬機Master,安裝Vim,Mysql(mysql也能夠暫且不裝,可是考慮到後面組件的擴展仍是先安上)。html

   第二步:克隆虛擬機(選擇徹底克隆)rzxmater,分別命名爲rzxslave1,rzxslave2(這裏的命名能夠自行修改)。而後啓動三個虛擬機。 java

      • 分別修改hostsname主機名。(這裏實例修改rzxmaster這臺機器的主機名)。
      • 輸入: sudo vim /etc/hostname 回車進入hostname文件的編輯。
      • 在hostname文件輸入: rzxmaster 另外兩臺機器同理修改保存退出便可。
      • 輸入: source /etc/hostname 使配置當即生效。關閉終端從新打開便可看到主機名已經改變了。

   第四步:靜態Ip設置:node

      • 靜態IP設置:http://blog.csdn.net/lv18092081172/article/details/52081859這篇博文介紹的很詳細,可是其中有部分問題,不知道是16.0和14.0版本差別的問題仍是教程自己的問題,一個是網絡重啓以後DNS配置丟失的問題。每次重啓以後會發現配置的DNS文件恢復成了127.0.0.1這個問題是因爲interface,networkManager兩種網絡管理衝突形成的。解決方法就是在編輯連接的時候將DNS也一塊兒編輯。這樣就不用再編輯DNS的配置文件。以下圖所示:
      
      其餘步驟按博文所說就能夠完成靜態IP的配置。

   第五步:hosts配置,特別強調主機名稱不要含有下劃線"_",最好是純英文。 由於hadoopXML配置的時候部分value不能有下劃線,會報錯。mysql

    • 修改hosts:添加主機名和IP的對應,目的是爲了使用主機名的時候可以定位(經過IP)到不一樣的機器。
      • 輸入: sudo vim /etc/hosts
      • 把三臺機器的IP和主機名對應填入hosts文件,實例以下所示。填寫完以後保存退出。
      • 192.168.8.137        rzxmaster
        192.168.8.136        rzxslave1
        192.168.8.138        rzxslave2
      • 輸入: source /etc/hosts 使配置當即生效。
      • 輸入: ping rzxslave1 能夠查看輸出是否有對應的IP地址,這裏先不考慮弄否ping通。實例以下:

       

  第六步:SSH免密碼登陸:linux

    • 1 sudo apt-get update //更新源
      2 sudo apt-get install openssh-server //安裝ssh服務器
      3 sudo ps -e |grep ssh //查看ssh服務是否啓動
      4 sudo service ssh start //開啓ssh服務
      5 ssh-keygen -t rsa //生成公鑰密鑰 一路enter就好了
      6 cat /home/cxin/.ssh/id_rsa.pub >>/home/cxin/.ssh/authorized_keys //將公鑰添加到用戶公鑰文件。

      ssh的配置比較簡單教程也不少。不外乎以上幾條命令。在三臺機子上都進行了以下操做以後,要是rzxmaster免密碼登陸到rzxslave1,rzxslave2。須要把master的公鑰放到slave1,2的authorized_keys文件中,這裏只須要拷貝而後打開rzxslave1,2的authorized_keys文件粘貼上便可。保存以後重啓虛擬機。重啓以後在rzxmaster,輸入 ssh rzxslave1  若是不須要密碼就能登錄到rzxslave1說明成功,同理實驗rzxslave2。rzxmaster能夠登陸到全部slave節點則SSH設置完畢。
      web

2、集羣搭建

經過前面的準備工做咱們已經獲取到了全部須要的安裝包,設置好了靜態IP,配好了ssh免密碼登陸,接下就是集羣的安裝了。首先我全部的包都是安裝在當前用戶的根目錄下,也就是終端打開的目錄(通常是: /home/username username是當前的用戶名),這個目錄是當親前用戶的工做空間我把這個目錄的位置記做 basePath=/home/username .這個basePath能夠根據本身的喜愛安裝到別的目錄下。(basePath=="~"==/home/cxin,我這裏的basePath=/home/cxin)sql

三臺虛擬機分別以下:rzxmaster是主節點(datanode),rzxslave1,rzxslave2是分支節點(namenode)shell

  192.168.8.137        rzxmasterapache

       192.168.8.136        rzxslave1ubuntu

  192.168.8.138        rzxslave2

了方便管理這裏在主目錄建了三個文件夾:Java,spark,hadoop. mkdir Java spark hadoop 

如今將jdk,hadoop,scala,spark的安裝包分別傳到路徑basePath/Java,basePath/hadoop,basePah/spark下,(scala和spark的壓縮包都放在spark文件夾下)。

1.Jdk配置:

  • cxin@rzxmaster:~$ cd ~
    cxin@rzxmaster:~$ pwd
    /home/cxin
    cxin@rzxmaster:~$ cd Java/
    cxin@rzxmaster:~/Java$ tar -zxvf jdk-8u11-linux-x64.tar.gz
    cxin@rzxmaster:~/Java$ mv jdk-8u11-linux-x64 jdk1.8
    cxin@rzxmaster:~/Java$ ls
    jdk1.8
    cxin@rzxmaster:~/Java$ cd jdk1.8/
    cxin@rzxmaster:~/Java/jdk1.8$ ls
    bin        include         lib      README.html  THIRDPARTYLICENSEREADME-JAVAFX.txt
    COPYRIGHT  javafx-src.zip  LICENSE  release      THIRDPARTYLICENSEREADME.txt
    db         jre             man      src.zip
    cxin@rzxmaster:~/Java/jdk1.8$ pwd
    /home/cxin/Java/jdk1.8

    解壓並修改了名稱,pwd命令獲取到了JAVA_HOME路徑: /home/cxin/Java/jdk1.8 下面配置環境變量:

  • sudo vim /etc/profile 在文件末尾添加以下代碼:
  • #java
    export JAVA_HOME=/home/cxin/Java/jdk1.8
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
  • 保存退出以後:輸入 source /etc/profile 使配置當即生效。 

  • java -version 查看是否配置成功,結果以下圖,則成功,不然檢查配置是否存在問題。  
  • 至此jdk已經配置完成了。

2.Hadoop配置:

  • 解壓並修更名稱.(過程同jdk同樣)
  • 配置環境變量:sudo vim /etc/profile ,添加以下代碼:
  • #Hadoop
    export HADOOP_HOME=/home/cxin/hadoop
    export CLASSPATH=.:$HADOOP_HOME/lib:$CLASSPATH
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    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_ROOT_LOGGER=INFO,console
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
  • 保存退出,輸入 source /etc/profile
  • 修改hadoop的四個配置文件: cd hadoop/etc/hadoop 新版本的配置文件在etc/hadoop目錄下,配置分兩2個部分:Hadoop守護進程(Hadoop Daemons)的環境配置和守護進程的詳細配置。
    • hadoop-env.sh:hadoop守護進程[Hadoop守護進程指NameNode/DataNode 和JobTracker/TaskTrackerJobTracker/TaskTracker是較低版本的資源管理調度模式,已經被yarn所取代。]的運行環境配置,這裏只設置JAVA_HOME。編輯hadoop-env.sh並添加以下代碼: export JAVA_HOME=/home/cxin/Java/jdk1.8 
    • core-site.xml:
    • <configuration>
              <!-- 指定hdfs的namenode爲rzxmaster -->
              <property>
                <name>fs.defaultFS</name>
                <value>hdfs://rzxmaster:9000</value>
              </property>
              <!-- Size of read/write buffer used in SequenceFiles. -->
              <property>
                 <name>io.file.buffer.size</name>
                 <value>131072</value>
             </property>
              <!-- 指定hadoop臨時目錄,自行建立 -->
              <property>
                  <name>hadoop.tmp.dir</name>
                  <value>/home/cxin/hadoop/tmp</value>
              </property>
      </configuration>
    • hdfs-site.xml:配置namenode和datanode存儲命名空間和log的路徑
    • <configuration>
          <!-- 備份數:默認爲3-->
           <property>
              <name>dfs.replication</name>
               <value>2</value>
           </property>
          <!-- namenode-->
           <property>
               <name>dfs.namenode.name.dir</name>
               <value>file:/home/cxin/hadoop/dfs/name</value>
           </property>
          <!-- datanode-->
           <property>
               <name>dfs.datanode.data.dir</name>
               <value>file:/home/cxin/hadoop/dfs/data</value>
           </property>
          <!--權限控制:false:不作控制即開放給他用戶訪問 -->
           <property>
               <name>dfs.permissions</name>
               <value>false</value>
           </property>
       </configuration>
    • mapred-site.xml:配置MapReduce。
    • <configuration>
          <!-- mapreduce任務執行框架爲yarn-->
          <property>
               <name>mapreduce.framework.name</name>
               <value>yarn</value>
          </property>
          <!-- mapreduce任務記錄訪問地址-->
          <property>
                <name>mapreduce.jobhistory.address</name>
                <value>rzxmaster:10020</value>
           </property>
          <property>                 
                 <name>mapreduce.jobhistory.webapp.address</name>
                  <value>rzxmaster:19888</value>
           </property>
      </configuration>

      其中還有不少具體應用須要的配置暫且不作配置。參數以下:

      mapreduce.map.memory.mb           1536                   Larger resource limit for maps.
      mapreduce.map.java.opts -Xmx1024M Larger heap-size for child jvms of maps.
      mapreduce.reduce.memory.mb 3072 Larger resource limit for reduces.
      mapreduce.reduce.java.opts -Xmx2560M Larger heap-size for child jvms of reduces.
      mapreduce.task.io.sort.mb 512 Higher memory-limit while sorting data for efficiency.
      mapreduce.task.io.sort.factor 100 More streams merged at once while sorting files.
      mapreduce.reduce.shuffle.parallelcopies  50 Higher number of parallel copies run by reduces to fetch outputs from very large number of maps.

 

    • yarn-site.xml:配置resourcesmanager和nodemanager
    • <configuration>
          <property>
              <description>The hostname of the RM.</description>
                <name>yarn.resourcemanager.address</name>
               <value>rzxmaster:8032</value>
           </property>
           <property>
                       <name>yarn.resourcemanager.scheduler.address</name>
                      <value>rzxmaster:8030</value>
           </property>
           <property>
                      <name>yarn.resourcemanager.resource-tracker.address</name>
                       <value>rzxmaster:8031</value>
           </property>
           <property>                 
         <name>yarn.resourcemanager.admin.address</name> <value>rzxmaster:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>rzxmaster:8088</value> </property> <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> </configuration>
    • slaves:配置集羣的DataNode節點,這些節點是slaves,NameNode是Master。在conf/slaves文件中列出全部slave的主機名或者IP地址,一行一個。配置以下:
    • rzxslave1
      rzxslave2
  • 以上的操做把基本的配置工做都完成了。至此已經完成了hadoop和jdk的配置,將Java和hadoop文件夾發送到其餘節點的主機上。(使用scp命令)
  • cxin@rzxmaster:~/hadoop/etc/hadoop$ cd ~
    cxin@rzxmaster:~$ ls
    Desktop    Downloads         hadoop  Music     Public  Templates  
    Documents  examples.desktop  Java    Pictures  spark   Videos     
    //將java目錄發送到rzxslave1主機的主目錄下
    cxin@rzxmaster:~$ scp -r Java cxin@rzxslave1:/home/cxin/
    //將hadoop目錄發送到rzxslave1主機的主目錄下
    cxin@rzxmaster:~$ scp -r hadoop cxin@rzxslave1:/home/cxin/
  • 同理將java,hadoop發送到rzxslave2目錄下。 
  • 最後一步在rzxslave1,rzxslave2環境變量中添加上rzxmaster中配置的java,hadoop的環境變量(可直接複製粘貼,由於三臺機器的配置路徑是相同的)
  • 至此,hadoop集羣就搭建完成了。

3.hadoop集羣啓動:(pwd=/home/cxin/hadoop)

  • 格式化文件系統:/bin/hdfs namenode -format 
  • 啓動服務: sbin/satrt-all.sh 
  • 查看服務: jps 結果以下:則說明服務啓動成功。(具體是否啓動還要按啓動日誌是否報錯,有時候未啓動成功守護進程也會存在)
    • master:rzxmaster
    • 16002 Jps
      7764 NameNode
      7992 SecondaryNameNode
      8152 ResourceManager
    • slave:rzxslave1,rzxslave2
    • 4529 NodeManager
      6968 Jps
      4383 DataNode
  • 頁面訪問:192.168.8.137:8088,若是啓動成功能夠看到存活的節點以下:
  •  訪問50070端口:192.168.8.137:50070
  •  

4.Spark配置:

spark是依賴與scala和java,hadoop的,前面配置好了java,hadoop,這裏須要配置scala和spark的環境以及spark的詳細信息。

  • scala和spark的環境變量配置:(前面已經將scala和spark的安裝包放到了spark文件夾下)
    • 解壓縮並重命名(參考jdk的配置),結果以下:
    • 配置環境變量 vim /etc/profile ,添加以下代碼
    • #scala
      export SCALA_HOME=/home/cxin/spark/scala2.11.8
      export PATH=$SCALA_HOME/bin:$PATH
      #spark
      export SPARK_HOME=/home/cxin/spark/spark2.1
    • 保存退出,輸入 scala 以下圖則證實sala配置成功  
  • spark的詳細配置:修改spark的配置文件(spark根目錄的conf目錄下: pwd=/home/cxin/spark/spark2.1/conf )
    • spark-env.sh:spark執行任務的環境配置,須要根據本身的機器配置來設置,內存和核心數配置的時候主要不要超出虛擬機的配置,尤爲是存在默認值的配置須要仔細查看,修改。
    • export SPARK_DIST_CLASSPATH=$(/home/cxin/hadoop/bin/hadoop classpath)
      #rzx----config
      SPARK_LOCAL_DIRS=/home/cxin/spark/spark2.1/local #配置spark的local目錄
      SPARK_MASTER_IP=rzxmaster #master節點ip或hostname
      SPARK_MASTER_WEBUI_PORT=8085 #web頁面端口
      
      #export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=4" #spark-shell啓動使用核數
      SPARK_WORKER_CORES=1 #Worker的cpu核數
      SPARK_WORKER_MEMORY=512m #worker內存大小
      SPARK_WORKER_DIR=/home/cxin/spark/spark2.1/worker #worker目錄
      SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.appDataTtl=604800" #worker自動清理及清理時間間隔
      SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://rzxmaster:9000/spark/history" #history server頁面端口>、備份數、log日誌在HDFS的位置
      SPARK_LOG_DIR=/home/cxin/spark/spark2.1/logs #配置Spark的log日誌
      JAVA_HOME=/home/cxin/Java/jdk1.8 #配置java路徑
      SCALA_HOME=/home/cxin/spark/scala2.11.8 #配置scala路徑
      HADOOP_HOME=/home/cxin/hadoop/lib/native #配置hadoop的lib路徑
      HADOOP_CONF_DIR=/home/cxin/hadoop/etc/hadoop/ #配置hadoop的配置路徑
    • spark-default.conf:
    • spark.master                     spark://rzxmaster:7077
      spark.eventLog.enabled           true
      spark.eventLog.dir               hdfs://rzxmaster:9000/spark/history
      spark.serializer                 org.apache.spark.serializer.KryoSerializer
      spark.driver.memory              1g
      spark.executor.extraJavaOptions  -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
    • slaves:配置worker節點
    • rzxmaster
      rzxslave1
      rzxslave2
  • 至此spark已經配置完成了,將spark文件夾(包含scala和spark)發送到其餘節點:
    • scp -r spark cxin@rzxslave1:/home/cxin
    • scp -r spark cxin@rzxslave2:/home/cxin
  • 在slave節點配置scala,spark的環境變量,最終三臺主機的環境變量配置以下:
  • #java
    export JAVA_HOME=/home/cxin/Java/jdk1.8
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    #Hadoop
    export HADOOP_HOME=/home/cxin/hadoop
    export CLASSPATH=.:$HADOOP_HOME/lib:$CLASSPATH
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    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_ROOT_LOGGER=INFO,console
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
    #scala
    export SCALA_HOME=/home/cxin/spark/scala2.11.8
    export PATH=$SCALA_HOME/bin:$PATH
    #spark
    export SPARK_HOME=/home/cxin/spark/spark2.1
    export PATH=$SPARK_HOME/bin:$PATH
  • 啓動spark服務: sbin/start-all.sh 
  • 查看服務(rzxmaster): jps 因爲在配置文件slaves中添加了rzxmaster,因此在此處有一個Worker進程。
  • 查看服務(rzxslave1,rzxslave2): jps 

  • 頁面查看:訪問192.168.8.137:8085(8085端口是設置在spark-env.sh中的SPARK_MASTER_WEBUI_PORT,可自行設置),結果以下:則說明成功了.
  • spark示例運行: ./bin/run-example SparkPi 2>&1 | grep "Pi is roughly" 計算圓周率。以下圖所示

  • 在8085端口能夠看到運行的任務:
  • 至此說明spark配置成功,固然其餘的內容須要在使用的時候去排除bug,若是出現問題須要查看日誌信息找到問題出現的緣由,而後修改配置。

5.配置總結:

在配置的過程當中出現了不少的問題,包括:namenode,datanode啓動失敗,僞成功(存在守護線程可是實際服務爲啓動),spak-shell啓動失敗爆出資源沒法分配。因爲在配置的時候沒有作好問題的記錄,因此這裏列不出具體的異常信息。這裏一部分異常是因爲IP的設置和hosts中的配置不對應,一部分是ssh鏈接失敗,資源配置沒有根據虛擬機的配置作匹配。建議不要屢次格式化namenode,每次格式化都會生成一個clusterID,多個clusterID致使啓動報錯,如需格式化就必須清除dfs/name,dfs/data下的文件。

hadoop,spark只是基礎組建,提供文件系統和數據運算,hadoop生態還包括hive,habse,kafka...等數據存儲和分析的組件,後面能夠在此基礎上一步步安裝。

相關文章
相關標籤/搜索