Linux系統中Hadoop的安裝和單機、僞分佈式配置

根據前面一篇Linux系統安裝的文章,我們使用的是烏班圖系統,所以下面的Hadoop就是在Ubuntu 14.04版本下安裝的。

安裝:

    Hadoop 可以通過 http://mirror.bit.edu.cn/apache/hadoop/common/ 或者 http://mirrors.cnnic.cn/apache/hadoop/common/ 下載,一般選擇下載最新的穩定版本,即下載 “stable” 下的 hadoop-2.x.y.tar.gz 這個格式的文件,這是編譯好的,另一個包含 src 的則是 Hadoop 源代碼,需要進行編譯纔可使用。下載完 Hadoop 文件後一般就可以直接使用。這裏需要強調的一點是,Hadoop的壓縮文件是默認在Linux系統裏面下載的,而不是下載在Windows系統中的,因爲如果用虛擬機運行的Linux系統,則虛擬機Linux系統裏面的文件跟Windows系統中的文件是不能互相訪問的,需要通過一定手段讓其能夠互相訪問,目前不做說明。

    我們選擇將 Hadoop 安裝至 /usr/local/ 中:

    sudo tar -zxf ~/下載/hadoop-2.7.2.tar.gz -C /usr/local    # 解壓到/usr/local中
    cd /usr/local/
    sudo mv ./hadoop-2.7.2/ ./hadoop            # 將文件夾名改爲hadoop
    sudo chown -R hadoop ./hadoop       # 修改文件權限
    Hadoop 解壓後即可使用。輸入如下命令來檢查 Hadoop 是否可用,成功則會顯示 Hadoop 版本信息:
cd /usr/local/hadoop
./bin/hadoop version

配置:

    單機模式: 

    Hadoop 默認模式爲非分佈式模式(本地模式),無需進行其他配置即可運行。非分佈式即單 Java 進程,方便進行調試。

可以執行例子來感受下 Hadoop 的運行。Hadoop 附帶了豐富的例子(運行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。

    在此選擇運行 grep 例子,我們將 input 文件夾中的所有文件作爲輸入,篩選當中符合正則表達式 dfs[a-z.]+ 的單詞並統計出現的次數,最後輸出結果到 output 文件夾中。

cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input   # 將配置文件作爲輸入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/*          # 查看運行結果

    執行成功後如下所示,輸出了作業的相關信息,輸出的結果是符合正則的單詞 dfsadmin 出現了1次:

    Hadoop 默認不會覆蓋結果文件,因此再次運行上面實例會提示出錯,需要先將./output刪除:

rm -r ./output

    僞分佈式模式:

     Hadoop 可以在單節點上以僞分佈式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節點既作爲 NameNode 也作爲 DataNode,同時,讀取的是 HDFS 中的文件。Hadoop 的配置文件位於 /usr/local/hadoop/etc/hadoop/ 中,僞分佈式需要修改2個配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每個配置以聲明 property 的 name 和 value 的方式來實現。修改配置文件 core-site.xml (通過 gedit或者vim 編輯: gedit ./etc/hadoop/core-site.xml),將當中<configuration></configuration>加入以下內容:

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

      同樣的對於修改hdfs-site.xml也是一樣的方法,加入以下內容即可:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/data</value>
    </property>
</configuration>

    配置完成後,執行 NameNode 的格式化:

./bin/hdfs namenode -format

    初始化成功的話,會看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若爲 “Exitting with status 1” 則是出錯。


    接着開啓 NameNode 和 DataNode 守護進程:

./sbin/start-dfs.sh  #start-dfs.sh是個完整的可執行文件,中間沒有空格

    這中間可能會有讓輸入yes or no的情況,直接輸入y即可。

    啓動完成後,可以通過命令jps來判斷是否成功啓動,若成功啓動則會列出如下進程: “NameNode”、”DataNode” 和 “SecondaryNameNode”(如果 SecondaryNameNode 沒有啓動,請運行 sbin/stop-dfs.sh 關閉進程,然後再次嘗試啓動嘗試)。如果沒有 NameNode 或 DataNode ,那就是配置不成功,請仔細檢查之前步驟,或通過查看啓動日誌排查原因。


    成功啓動後,可以訪問 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,可以在線查看 HDFS 中的文件。

實例:

      運行Hadoop僞分佈實例,要使用 HDFS,首先需要在 HDFS 中創建用戶目錄:

./bin/hdfs dfs -mkdir -p /user/hadoop

        接着將 ./etc/hadoop 中的 xml 文件作爲輸入文件複製到分佈式文件系統中,即將 /usr/local/hadoop/etc/hadoop 複製到分佈式文件系統中的 /user/hadoop/input 中。使用的是 hadoop 用戶,並且已創建相應的用戶目錄 /user/hadoop ,因此在命令中就可以使用相對路徑如 input,其對應的絕對路徑就是 /user/hadoop/input:

./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input

        複製完成後,可以通過如下命令查看文件列表:

./bin/hdfs dfs -ls input

        僞分佈式運行 MapReduce 作業的方式跟單機模式相同,區別在於僞分佈式讀取的是HDFS中的文件:

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

        查看運行結果的命令(查看的是位於 HDFS 中的輸出結果):

./bin/hdfs dfs -cat output/*

        當然也可以將運行結果取回到本地:

rm -r ./output    # 先刪除本地的 output 文件夾(如果存在)
./bin/hdfs dfs -get output ./output     # 將 HDFS 上的 output 文件夾拷貝到本機
cat ./output/*

       最後關閉Hadoop:

./sbin/stop-dfs.sh

        或者用更簡單的方法(在任一個目錄下都可以運行):

stop-all.sh















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章