環(huán)境準備
服務器集群
我用的CentOS-6.6版本的4個虛擬機,主機名為node01、node02、node03、node04,另外我會使用hadoop用戶搭建集群(生產環(huán)境中root用戶不是可以任意使用的)
關于虛擬機的安裝可以參考以下兩篇文章:
在Windows中安裝一臺Linux虛擬機
通過已有的虛擬機克隆四臺虛擬機給集群中的每個虛擬機都創(chuàng)建一個hadoop用戶,并賦予sudoer權限
參考:
Linux用戶管理常用命令
Linux給普通用戶賦予sudoer權限每臺虛擬機都需安裝JDK
參考在Linux中安裝JDK集群中的所有虛擬機可以兩兩之間免秘鑰登錄以及可以登錄自身
參考配置各臺虛擬機之間免秘鑰登錄集群中的所有虛擬機的時間同步
參考Linux集群系統(tǒng)時間同步hadoop安裝包
下載地址:https://mirrors.aliyun.com/apache/hadoop/common/
我用的hadoop2.6.5
1. 集群規(guī)劃

2. 安裝步驟
(1) 把hadoop安裝包上傳到服務器并解壓
tar zxvf hadoop-2.6.5.tar.gz -C /home/hadoop/apps/
(2) 修改 hadoop-env.sh、mapred-env.sh、yarn-env.sh 這三個配置文件,添加JAVA_HOME
hadoop的配置文件在HADOOP_HOME/etc/hadoop/下
export JAVA_HOME=/usr/local/jdk1.8.0_73
(3) 修改 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoopdata</value>
</property>
</configuration>
(4) 修改 hdfs-site.xml
<configuration>
<!--
這兩個配置用于指定namenode和datanode存放數(shù)據(jù)的位置
如果不指定,數(shù)據(jù)會存放到core-site.xml中配hadoop.tmp.dir目錄下
-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/hadoopdata/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hadoopdata/data</value>
</property>
<!--配置數(shù)據(jù)副本數(shù),不要超過datanode節(jié)點數(shù)-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--指定secondarynamenode所在節(jié)點-->
<property>
<name>dfs.secondary.http.address</name>
<value>node02:50090</value>
</property>
</configuration>
(5) 修改 mapred-site.xml
集群中只有mapred-site.xml.template,可以從這個文件進行復制
cp mapred-site.xml.template mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(6) 修改 yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node03</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
(7) 修改 slaves 配置文件,指定DataNode所在的節(jié)點
node02
node03
node04
(8) 把hadoop安裝包分發(fā)給其他節(jié)點
[hadoop@node01 hadoop]# scp -r /home/hadoop/apps/hadoop-2.6.5 node02:/home/hadoop/apps/
[hadoop@node01 hadoop]# scp -r /home/hadoop/apps/hadoop-2.6.5 node03:/home/hadoop/apps/
[hadoop@node01 hadoop]# scp -r /home/hadoop/apps/hadoop-2.6.5 node04:/home/hadoop/apps/
(9) 給每個節(jié)點配置HADOOP_HOME環(huán)境變量
vim ~/.bash_profile
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
(10) 在namenode主節(jié)點(node01)上格式化文件系統(tǒng)
[hadoop@node01 ~]# hdfs namenode -format
看到以下信息說明格式化成功:

(11) 在namenode主節(jié)點(node01)上啟動hdfs系統(tǒng)
[hadoop@node01 ~]# start-dfs.sh
(12) 在resourcemanager所在節(jié)點(node03)上啟動yarn
[hadoop@node03 ~]# start -yarn.sh
3. 驗證集群是否搭建成功
(1) 查看進程是否全部啟動
[hadoop@node01 ~]# jps
4000 NameNode
4281 Jps
[hadoop@node02 ~]# jps
3442 SecondaryNameNode
3289 DataNode
3375 NodeManager
3647 Jps
[hadoop@node03 ~]# jps
2945 DataNode
3019 ResourceManager
3118 NodeManager
3919 Jps
[hadoop@node04 ~]# jps
2899 DataNode
2984 NodeManager
3149 Jps
(2) 訪問WEB頁面


(3) 執(zhí)行hdfs命令或運行一個mapreduce程序測試
# 上傳一個文件
[hadoop@node01 ~]# hdfs dfs -put ./install.log /
# 執(zhí)行一個mapreduce例子程序
[hadoop@node01 mapreduce]# pwd
/home/hadoop/apps/hadoop-2.6.5/share/hadoop/mapreduce
[root@node02 mapreduce]# hadoop jar hadoop-mapreduce-examples-2.6.5.jar pi 5 5
文件上傳成功:

任務成功運行:


到這里,hadoop完全分布式集群就已經(jīng)搭建成功了!
4. 如果hadoop集群需要重裝,按以下步驟進行
(1) 刪除每個機器中的hadoop日志
日志默認在HADOOP_HOME/logs下,如果不刪除,日志文件會越積累越多,占用磁盤
(2) 刪除原來的namenode和datanode產生的數(shù)據(jù)和文件
刪除你配置的hadoop.tmp.dir這個目錄,如果你配置了dfs.datanode.data.dir和dfs.datanode.name.dir這兩個配置,那么把這兩個配置對應的目錄也刪除