1. 程式人生 > >在 CentOS 7.2 下安裝 Hadoop 2.7.5 並搭建偽分散式環境的方法

在 CentOS 7.2 下安裝 Hadoop 2.7.5 並搭建偽分散式環境的方法

資源下載

一、建立 Hadoop 使用者

建立 hadoop 使用者,並分配以使用者名稱為家目錄/home/hadoop,並將其加入到sudo使用者組,建立好使用者之後,以 hadoop 使用者登入:

    sudo useradd -m hadoop -s /bin/bash
    sudo adduser hadoop sudo
    sudo passwd hadoop # 設定hadoop使用者密碼

二、安裝 JDK、Hadoop 及配置環境變數

安裝,解壓 JDK 到/usr/lib/java/路徑下,Hadoop 到/usr/local/etc/hadoop/路徑下:

    tar zxf ./hadoop-2.6.*.tar.gz 
    mv ./hadoop-2.6.* /usr/local/etc/hadoop # 將 /usr/local/etc/hadoop作為Hadoop的安裝路徑

解壓完成之後,可驗證 hadoop 的可用性:

    cd /usr/local/etc/hadoop
    ./bin/hadoop version # 檢視hadoop的版本資訊

配置環境,編輯 “/etc/profile” 檔案,在其後新增如下資訊:

export HADOOP_HOME=/usr/local/etc/hadoop
export JAVA_HOME=/usr/lib/java/jdk1.8.0
_45 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

使配置的變數生效:

source /etc/profile

三、測試一下

在此我們可以執行一個簡單的官方 Demo:

    cd `echo $HADOOP_HOME` # 到hadoop安裝路徑
    mkdir ./input
    cp ./etc/hadoop/*.xml ./input
    hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'

四、Hadoop 的偽分散式環境搭建

什麼是偽分散式?Hadoop 偽分散式模式是在一臺機器上模擬 Hadoop 分散式,單機上的分散式並不是真正的分散式,而是使用執行緒模擬的分散式。分散式和偽分散式這兩種配置也很相似,唯一不同的地方是偽分散式是在一臺機器上配置,也就是名位元組點(namenode)和資料節點(datanode)均是同一臺機器。

需要配置的檔案有core-site.xml和hdfs-site.xml這兩個檔案他們都位於${HADOOP_HOME}/etc/hadoop/資料夾下。

其中core-site.xml:

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
    <final>true</final>
  </property>

  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/ylf/hadoop_tmp</value>
  </property>
</configuration>

修改 hdfs-site.xml:

<configuration>
        <property>
      <name>dfs.namenode.name.dir</name>
      <value>/home/ylf/hadoop/dfs/namenode</value>
      <final>true</final>
    </property>      
     <property>
       <name>dfs.datanode.data.dir</name>
       <value>/home/ylf/hadoop/dfs/datanode</value>
      <final>true</final>
    </property>
    <property>
      <name>dfs.http.address</name>
      <value>localhost:50070</value>
       <description>
         The address and the base port where the dfs namenode web ui will listen on.
If the port is 0 then the server will start on a free port.
      </description>
    </property>
    <property>
      <name>dfs.replication</name>
      <value>1</value>
    </property>
    <property>
      <name>dfs.permissions</name>
      <value>false</value>
    </property>
</configuration>

修改 mapred-site.xml

<configuration>
        <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
    </property>
    <property>
      <name>mapred.job.tracker</name>
      <value>hdfs://localhost:9001</value>
    </property>
        <property>  
          <name>mapred.system.dir</name>  
          <value>file:/home/ylf/hadoop/mapred/system</value>  
          <final>true</final>  
        </property>  

        <property>  
          <name>mapred.local.dir</name>  
          <value>file:/home/ylf/hadoop/mapred/local</value>  
          <final>true</final>  
        </property> 
</configuration>

修改 yarn-site.xml:

<configuration>

<!-- Site specific YARN configuration properties -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    <description>shuffle service that needs to be set for Map Reduce to run</description>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>localhost</value>
    <description>hostname of Resource Manager</description>
  </property>
</configuration>

格式化 hdfs

進入 hadoop home 目錄

bin/hdfs namenode -format

啟動叢集

sbin/start-all.sh

輸入 jps 指令檢視程序

這裡寫圖片描述

五、啟動 HDFS

啟動 HDFS 的指令碼位於 Hadoop 目錄下的sbin資料夾中,即:

    cd `echo $HADOOP_HOME`
    ./sbin/start-dfs.sh # 啟動HDFS指令碼

在執行start-dfs.sh指令碼啟動 HDFS 時,可能出現類似如下的報錯內容:

    localhost: Error: JAVA_HOME is not set and could not be found.

很明顯,是JAVA_HOME沒找到,這是因為在hadoop-env.sh指令碼中有個
JAVA_HOME=${JAVA_HOME},所以只需將${JAVA_HOME}替換成你的 JDK 的路徑即可解決:

    echo $JAVA_HOME # /usr/lib/java/jdk1.*.*_**
    vim ./etc/hadoop/hadoop-env.sh # 將‘export JAVA_HOME=${JAVA_HOME}’欄位替換成‘export JAVA_HOME=/usr/lib/java/jdk1.*.*_**’即可

再次執行

`echo $HADOOP_HOME`/sbin/start-all.sh

可以執行以下命令判斷是否啟動:

jps

對應的啟動,自然也有關閉咯:

 `echo $HADOOP_HOME`/sbin/stop-dfs.sh

六、執行偽分散式例項

以上的 “四、測試一下” 只是使用的是本機的源生檔案執行的測試 Demo 例項。既然搭建好了偽分散式的環境,那就使用分散式上儲存(HDFS)的資料來進行一次 Demo 測試:

先將資料來源搞定,也就是仿照 “四” 中的 Demo 一樣,新建一個資料夾作為資料來源目錄,並新增一些資料:

    hdfs dfs -mkdir /input # 這裡的檔名必須要以‘/’開頭,暫時只瞭解是hdfs是以絕對路徑為基礎,因為沒有 ‘-cd’這樣的命令支援 
    hdfs dfs -put `echo $HADOOP_HOME`/etc/hadoop/*.xml /input

也可以檢視此時新建的input目錄裡面有什麼:

    hdfs dfs -ls /
    hdfs dfs -ls /input 

再次執行如之前執行的那個 Demo

    hadoop jar /usr/local/etc/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /input /output 'dfs[a-z.]+'

再次檢視 HDFS 中的目錄:

    hdfs dfs -ls /
    hdfs dfs -cat /output*

參考資料