1. 程式人生 > >Hadoop2.5.2叢集部署(完全分散式)

Hadoop2.5.2叢集部署(完全分散式)

環境介紹

硬體環境

CPU 4 MEM 4G 磁碟 60G 

軟體環境

OS:centos6.5版本 64位

Hadoop:hadoop2.5.2 64位

JDK: JDK 1.8.0_91

主機配置規劃

Hadoop01  172.16.1.156   (NameNode) Hadoop02  172.16.1.157     (DataNode)   Hadoop03  172.16.1.158     (DataNode)

設定主機名

這裡主機名修改不是必須條件,但是為了操作簡單,建議將主機名設定一下,需要修改調整各臺機器的hosts檔案配置,命令如下:  

如果沒有足夠的許可權,可以切換使用者為root

三臺機器統一增加以下host配置:

dd8aa2cfaa55beaa530a49a643e349bb913d3b24

配置免密碼登入SSH

1)生成金鑰: ssh-keygen -t rsa  

2)將id_dsa.pub(公鑰)追加到授權key中:

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys    

3)將認證檔案複製到另外兩臺DataNode節點上:

scp ~/.ssh/authorized_keys 172.16.1.157:~/.ssh/    

scp ~/.ssh/authorized_keys 172.16.1.158:~/.ssh/  

3)測試:

ssh hadoop02或ssh hadoop03

各節點安裝JDK

(1)檢查jdk版本、解除安裝openjdk版本

檢視目前安裝openjdk資訊:rpm -qa|grep java

0360cbce130086d484a6657c7492222bc18e473d

解除安裝以上三個檔案(需要root許可權,登入root許可權解除安裝)

rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64

rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64

rpm -e --nodeps tzdata-java-2013g-1.el6.noarch

  8c680e19bed5f5efd4f83f0b53cc6e6b8447b522   (2)選擇版本是jdk-8u91-linux-x64.gz (3)解壓安裝: 7ce92ab185ec6a7ca7fc101f38c1bf73feb594ef  (4)重新命名jdk為jdk1.8(用mv命令)   ef13f49b7f50896e3db3c57d72d3e238f3c04265  (5) 配置環境變數:vi /etc/profile加入以下三行         #JAVA_HOME           export JAVA_HOME=/home/hadoop/jdk1.8         export PATH=$JAVA_HOME/bin:$PATH     (6)執行source /etc/profile使環境變數的配置生效  (7)執行Java –version檢視jdk版本,驗證是否成功  (8) 將hadoop01機器上安裝好JDK複製到另外兩臺節點上   0023fba61d8728eea4f130a0e3cebb7a15831a9b 92e3a219aeab4019f6d707b3ab81ab138b2e9ef7

Hadoop安裝

每臺節點都要安裝

  Hadoop。 

上傳

  hadoop-2.5.2.tar.gz 

到使用者

  /home/hadoop/software 

目錄下。

 

解壓

tar -zvxf hadoop-2.5.2.tar.gz  -C /home/hadoop/

新增環境變數

vi  /etc/profile,尾部新增如下 export JAVA_HOME=/home/hadoop/jdk1.8 export HADOOP_HOME=/home/hadoop/hadoop-2.5.2 export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_YARN_HOME=$HADOOP_HOME export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop   export CLASSPATH=.:$JAVA_HOME/lib:$HADOOP_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH  99d9ea8a27d9029686a64515807325ff79f82214

設定環境變數立即生效

source /etc/profile

配置Hadoop檔案

(1) core-site.xml   <configuration>      <property>             <name>fs.defaultFS</name>             <value>hdfs://hadoop01:9000</value>      </property>      <property>             <name>hadoop.tmp.dir</name>             <value>file:/home/hadoop/hadoop-2.5.2/hadoop_tmp</value>      </property>      <property>             <name>io.file.buffer.size</name>
            <value>131072</value>
     </property> </configuration>   (2)hdfs-site.xml    <configuration>        <property>                <name>dfs.replication</name>                 <value>2</value>        </property>        <property>                 <name>dfs.namenode.secondary.http-address</name>                <value>  hadoop01   :9001</value>        </property>        <property>               <name>dfs.namenode.name.dir</name>               <value>file:  /home/hadoop/hadoop-2.5.2   /dfs/name</value>               <description>namenode上儲存hdfs元資料</description>        </property>        <property>                <name>dfs.datanode.data.dir</name>                <value>file:/  home/hadoop/hadoop-2.5.2   /dfs/data</value>                  <description>datanode上資料塊物理儲存位置</description>        </property>        <property>                <name>dfs.webhdfs.enabled</name>                 <value>true</value>        </property> </configuration>    注:訪問namenode的   webhdfs   使用50070埠,訪問datanode的webhdfs使用50075埠。要想不區分埠,直接使用namenode的IP和埠進行所有webhdfs操作,就需要在所有datanode上都設定hdfs-site.xml中dfs.webhdfs.enabled為true。       (3)mapred-site.xml <configuration>        <property>              <name>mapreduce.framework.name</name>              <value>yarn</value>       </property>       <property>              <name>mapreduce.jobhistory.address</name>              <value>hadoop01:10020</value>       </property>       <property>              <name>mapreduce.jobhistory.webapp.address</name>              <value>hadoop01:19888</value>       </property> </configuration>  jobhistory是Hadoop自帶一個歷史伺服器,記錄Mapreduce歷史作業。預設情況下,jobhistory沒有啟動,可用以下命令啟動: sbin/mr-jobhistory-daemon.sh start historyserver     (4)yarn-site.xml <configuration>        <property>               <name>yarn.nodemanager.aux-services</name>               <value>mapreduce_shuffle</value>        </property>        <property>                <name>yarn.resourcemanager.address</name>                <value>  hadoop01   :8032</value>        </property>        <property>               <name>yarn.resourcemanager.scheduler.address</name>               <value>hadoop01:8030</value>        </property>        <property>               <name>yarn.resourcemanager.resource-tracker.address</name>               <value>hadoop01:8031</value>        </property>        <property>                <name>yarn.resourcemanager.admin.address</name>                <value>hadoop01:8033</value>        </property>        <property>                <name>yarn.resourcemanager.webapp.address</name>                <value>hadoop01:8088</value>        </property> </configuration>   

(5)修改slaves檔案,新增datanode節點hostname到slaves檔案中

  hadoop01 hadoop02 (6) 

如果已經配置了JAVA_HOME環境變數,hadoop-env.sh與yarn-env.sh這兩個檔案不用修改,因為裡面配置就是:

   export JAVA_HOME=${JAVA_HOME}
 
    
     如果沒有配置JAVA_HOME環境變數,需要分別在hadoop-env.sh和yarn-env.sh中  
      
       
        
         
          
           
            
             
              
              
               手動
               
              
             
            
           
          
         
        
       
      
     新增
     
    
     JAVA_HOME 
     
     
      
       
        
         
          
           
            
            
             export JAVA_HOME=  
              
               
                
                 
                  
                   
                    
                     
                      
                       
                        
                         
                         
                          /home/hadoop/jdk1.8
                          
                          
                         
                        
                       
                      
                     
                    
                   
                  
                 
                
               
              
             
            
           
          
         
        
       
      
     
    最後,將整個hadoop-2.5.2資料夾及其子資料夾使用scp複製到兩臺Slave相同目錄中:
    
    
     
      
       
       
        4f67c73d4bd9d0d76391a4e8e069cf1acd7f937d
        
       
      
     
    
    
     
      
       
       
        e8d4ed6aa9862b21fc48ba7180a66d3fa803fa42
        
       
      
     
    
   
  
 

執行Hadoop

格式化

hdfs namenode –format   3e67d987b311dd624a3a48ea868353ce2d94eb88

啟動Hadoop

start-dfs.sh    start-yarn.sh   可以用一條命令: start-all.sh

停止Hadoop

stop-all.sh 

JPS檢視程序

master主節點程序:   1c96c36a082764975bda0619b125b4f72520b157 slave資料節點程序: a668105c8df4916145dc998acb8618fe7b6bfb75

通過瀏覽器檢視叢集執行狀態

http://172.16.1.156:50070 d7a62127ecf57d24dadf00918bc4e95311c24440
http://172.16.1.156:8088/ 8b8cbd075f8fe729c3d46173df45256daaa72bcb
http://172.16.1.156:19888
8a2d8dadf86138cab6d0c25f2f829c6d5bd02346
jobhistory是Hadoop自帶一個歷史伺服器,記錄Mapreduce歷史作業。預設情況下,jobhistory沒有啟動,可用以下命令啟動: sbin/mr-jobhistory-daemon.sh start historyserver  f0f637647312d84ff825a34cd67af66a9c7ecf9d

測試Hadoop

1)建立輸入檔案:

vi wordcount.txt   

輸入內容為: 

hello you

hello me

hello everyone

2)建立目錄

hadoop fs -mkdir /data/wordcount    

hadoop fs –mkdir /output/   

目錄/data/wordcount用來存放Hadoop自帶WordCount例子的資料檔案,執行這個MapReduce任務結果輸出到/output/wordcount目錄中。

3)上傳檔案

hadoop fs -put wordcount.txt/data/wordcount/   

4)執行wordcount程式

hadoop jar usr/local/program/Hadoop-2.5.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.1.jar wordcount /data/wordcount /output/wordcount/    

5)檢視結果

hadoop fs -text /output/wordcount/part-r-00000    

[[email protected]]# hadoop fs -text /output/wordcount/part-r-00000   everyone  1  hello  3   me    1   you   1 

搭建中遇到問題總結

問題一: 在配置環境變數過程可能遇到輸入命令ls命令不能識別問題: ls -bash: ls: command not found 原因:在設定環境變數時,編輯profile檔案沒有寫正確,將export PATH=$JAVA_HOME/bin:$PATH中冒號誤寫成分號 ,導致在命令列下ls等命令不能夠識別。 解決方案:
 export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 問題二: 在主機上啟動hadoop叢集,然後使用jps檢視主從機上程序狀態,能夠看到主機上的resourcemanager和各個從機上的nodemanager,但是過一段時間後,從機上的nodemanager就沒有了,主機上的resourcemanager還在。
原因是防火牆處於開啟狀態: 注:nodemanager啟動後要通過心跳機制定期與RM通訊,否則RM會認為NM死掉,會停止NM服務。 service 方式
開啟: service iptables start 
關閉: service iptables stop