### 參考
* [VMware安裝Centos7超詳細過程(圖文)](https://blog.csdn.net/babyxue/article/details/80970526)
* [hadoop集群搭建(超詳細版)](https://blog.csdn.net/code__online/article/details/80178032)
* [ Hadoop集群環境搭建](https://blog.51cto.com/13670314/2164603)
### 集群搭建
歸納下環境準備:
1. vmware安裝centos,并克隆多臺虛機,配置靜態IP
在此不再贅述,參考教程1,可完全實現;
2. 配置IP和hostname之間的映射,檢測互相是否可以ping通;
備注幾個關鍵點:
2.1 `hostname master`配置臨時的節點別名;
2.2 `vi /etc/sysconfig/network`中`HOSTNAME=master`重啟后可永久生效;
2.3 `hostname`與`ip`的映射關系配置在`/etc/hosts`,
```bash
192.168.111.150 master
192.168.111.151 slave1
192.168.111.152 slave2
192.168.111.153 slave3
```
3. JDK安裝
3.1 檢查JDK的版本,`java -version`
3.2 如果顯示有openjdk需要先卸載,再安裝Oracle的jdk(其他版本的jdk對hadoop的一些命令不是很支持
3.3 `rpm -qa | grep java`查看java安裝包信息
3.4 `rpm -e --nodeps java-1.7.0-openjdk-xxxxx`卸載對應的java包
3.5 tar java安裝包到`/usr/java/jdk1.8.0_161`,然后配置環境變量,打開`/etc/profile`,
```bash
export JAVA_HOME=/usr/java/jdk1.8.0_161/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JRE_HOME=$JAVA_HOME/jre
```
通過`source /etc/profile`重置生效,`java -version`,得到如下結果:

以上準備工作完成,下面開始搭建hadoop
### 搭建hadoop
#### 服務器功能規劃
| master | slave1 | slave2
| --- | --- |--- |--- |
| NameNode | SecondNameNode | ResourceManage |
| DataNoe| DataNoe | DataNoe
|NodeManager|NodeManager|NodeManager
|History Server||
#### 解壓hadoop
切換到/opt/modules/app/hadoop-2.7.3/etc/hadoop目錄,配置該目錄下的Hadoop JDK路徑即修改hadoop-env.sh、mapred-env.sh、yarn-env.sh文件中的JDK路徑
#### 修改配置文件
`core-site.xml`
```xml
<configuration>
<property>
<!-- NameNode的地址-->
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<property>
<!-- NameNode和DataNode的數據文件都會存在這個目錄下的對應子目錄下。應該保證此目錄是存在的,如果不存在,先創建-->
<name>hadoop.tmp.dir</name>
<value>/opt/modules/app/hadoop-2.7.3/data/tmp
</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>
</configuration>
```
`hdfs-site.xml`
```xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
</configuration>
```
配置slaves,slaves文件是指定HDFS上有哪些DataNode節點
```
master
slave1
slave2
```
配置yarn-site.xml
```xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>slave2</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
</configuration>
```
`mapred-site.xml`
```xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
```
