### 参考
* [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`,得到如下结果:
![](https://box.kancloud.cn/eb89c39b16cf17e14f66227e8cc6f935_587x73.png)
以上准备工作完成,下面开始搭建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>
```
![](https://box.kancloud.cn/7b141b1970c169f7c0e3d2f488af5b3b_1054x199.png)![](https://box.kancloud.cn/9e3d179f6f94ccf3b0d7ab68426c515d_944x106.png)