hadoop安裝
在Apache Hadoop主頁的下載頁面https://hadoop.apache.org/releases.html選擇版本進行下載:
下載下來的是壓縮包:
將壓縮包使用Xftp上傳hadoop-1的/usr目錄下:
執行命令:
1 # tar -zxvf hadoop-2.7.7.tar.gz
解壓完成后會在/usr目錄下生成hadoop-2.7.7目錄:

然后設置環境變量:
1 # vim /etc/profile
在profile文件末尾添加:
1 export HADOOP_HOME=/usr/hadoop-2.7.7 2 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

保存文件,然后執行:
1 # source /etc/profile
此時即可直接使用hadoop命令:

啟動hadoop有三種安裝模式:本地模式、偽分布式模式、分布式模式。
本地模式
本地模式只需要修改/usr/hadoop-2.7.7/etc/hadoop/hadoop-env.sh文件,設置JAVA_HOME即可。
在hadoop-1上面進行本地模式配置,在終端使用vim打開該文件:
1 # vim hadoop-2.7.7/etc/hadoop/hadoop-env.sh
找到export JAVA_HOME=${JAVA_HOME}一行,將該行注釋掉,然后添加一行:
1 export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64

本地模式即配置完成。
由於本地模式沒有HDFS,所以只能使用本地數據測試MapReduce程序。
在/home目錄下創建temp目錄,在temp目錄中創建一個test.txt文件:
1 # mkdir /home/temp 2 # vim /home/temp/test.txt
在test.txt文件中寫入如下測試內容:
1 this is a example 2 hello world hello bob hello everyone
執行命令進入MapReduce示例程序目錄:
1 # cd /usr/hadoop-2.7.7/share/hadoop/mapreduce
查看目錄下的內容,執行命令:
1 # ls -l

其中hadoop-mapreduce-examples-2.7.7.jar就是要來用測試的jar包,測試執行如下:
1 # hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /home/temp/test.txt /home/temp/mcl
測試結果會生成在/home/temp/mcl目錄下,執行命令查看結果:
1 # cat /home/temp/mcl/part-r-00000
可以看到每個單詞的統計結果數據。
偽分布式模式
偽分布式模式是在單機上,模擬一個分布式的環境,具備Hadoop的所有功能。
配置文件路徑:/usr/hadoop-2.7.7/etc/hadoop/
首先配置的文件是hadoop-env.sh,與本地模式一樣,配置好JAVA_HOME參數即可。
然后配置的兩個文件是hdfs-site.xml和core-site.xml,這兩個文件作用是配置HDFS的一些屬性。
在hdfs-site.xml文件中配置(數據冗余級別設置為1):
在core-site.xml文件中配置(namenode的地址和HDFS數據保存的目錄,默認是Linux的tmp目錄):
其中tmp目錄要手動創建:
1 # mkdir /usr/hadoop-2.7.7/tmp
接下來配置的兩個文件是mapred-site.xml和yarn-site.xml,這兩個文件的作用是配置mapreduce使用yarn容器和yarn的一些屬性。
現在目錄中沒有mapred-site.xml文件,但是有一個mapred-site.xml.template文件,所以在/usr/hadoop-2.7.7/etc/hadoop路徑下執行命令:
1 # cp mapred-site.xml.template mapred-site.xml
然后在拷貝的mapred-site.xml文件中添加配置(ResourceManager的地址):

在yarn-site.xml文件中配置(NodeManager運行MR任務的方式):

最后對namenode進行格式化,執行命令:
1 # hdfs namenode -format
只要看到信息中有一句關鍵:
common.Storage: Storage directory /usr/hadoop-2.7.7/tmp/dfs/name has been successfully formatted.
則格式化成功:

啟動hadoop,執行/usr/hadoop-2.7.7/sbin目錄下的啟動腳本:
1 # start-all.sh
完成后信息無報錯:

執行jps命令查看進程如下:

則啟動完成。
打開瀏覽器,輸入http://192.168.44.128:50070,即可打開hdfs的web頁面:

點擊Datanodes可以看到數據節點為hadoop-1:

測試wordcount驗證是否成功:
創建hadoop的wordCountInput用來上傳test.txt文件,執行命令:
1 # hadoop fs -mkdir /wordCountInput
目錄創建完成后,將/home/temp/test.txt文件上傳該目錄,執行命令:
1 # hadoop fs -put /home/temp/test.txt /wordCountInput
查看文件是否上傳,執行命令:
1 # hadoop fs -ls /wordCountInput

然后使用hadoop-mapreduce-examples-2.7.7.jar測試執行如下:
1 # hadoop jar /usr/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /wordCountInput/test.txt /wordCountOutput

等待計算完成,查看wordCountOutput目錄下的文件,執行命令:
1 # hadoop fs -ls /wordCountOutput
可以看到計算結果文件已經生成:

查看結果數據,執行命令:
1 # hadoop fs -cat /wordCountOutput/part-r-00000
test.txt文件中各個單詞的統計數據如下:

停止進程執行命令:
1 # stop-all.sh
等下stop完成,執行jps命令可以看到進程已經全部關閉:

完全分布式模式
是真正的分布式環境,具備生產條件。
完全分布式模式與偽分布式模式的區別就在於配置文件配置內容不同,namenode與datanode分別部署在不同的服務器上。
以下使用hadoop-1、hadoop-2和hadoop-3三台服務器搭建一個完全分布式集群,其中hadoop-1為namenode節點,其余兩台為datanode節點。
在hadoop-1服務器上:
首先配置hadoop-env.sh文件,配置好JAVA_HOME參數。
然后配置hdfs-site.xml文件,將冗余級別改為3:
接下來core-site.xml文件,內容不需要修改:
接下來mapred-site.xml文件,內容不需要修改:
接下來yarn-site.xml 文件,內容不需要修改:
最后slaves文件中的localhost,改成hadoop-2和hadoop-3:
修改完成之后,將以上文件全部拷貝到hadoop-2和hadoop-3的相應目錄下無需做其他修改。
hadoop重置
因為之前搭建偽分布式模式時,格式化過hadoop-1的namenode,所以此處需要進行重置。
首先要刪除/usr/hadoop-2.7.7/logs目錄中的所有文件
1 # rm -r *

然后重新格式化namenode:
1 # hdfs namenode -format

然后執行啟動:

然后使用命令jps,查看三台服務器的進程如下:
hadoop-1:

hadoop-2:

hadoop-3:

打開瀏覽器,輸入http://192.168.44.128:50070,即可打開hdfs的web頁面:

點擊Datanodes可以看到數據節點為hadoop-2和hadoop-3:

本地模式一般情況下不用,開發可以使用偽分布式模式或者資源充足情況下使用完全分布式模式。
文中的配置文件參數都是最簡化的配置,實際情況應該按照需求進行配置。