一. 服务器准备
VMware 里安装四台 CentOS 7,需要配置如下内容
- 服务器开启开机自动联网和设置静态IP
- 修改主机名且配置 hosts 映射
- 关闭防火墙和 selinux
- 设置 4 台机器相互之间的 ssh 互信免密登陆
服务器开机自动联网和静态IP
编辑网卡设备 vi /etc/sysconfig/network-scripts/ifcfg-ens33
1 2 3 4 5 6 7 8 9 10 11
| ONBOOT=YES
BOOTPROTO=static IPADDR=192.168.44.129 GATEWAY=192.168.44.2 NETMASK=255.255.255.0 DNS1=192.168.44.2 DNS2=114.114.114.114
systemctl restart network
|
注:xshell 建立完连接后可能会卡在 [To escape to local shell, press 'Ctrl+Alt+]'] 无法操作,通过以下方式可解决此问题:vi /etc/ssh/sshd_config,找到 UseDNS yes 修改为 UseDNS no
修改主机名、配置 Hosts
1 2 3 4
| hostnamectl set-hostname hadoop01、02、03、04
hostname
|
- hosts 域名 IP 映射配置
vi /etc/hosts 添加如下配置:
1 2 3 4
| 192.168.44.129 hadoop01 192.168.44.130 hadoop02 192.168.44.131 hadoop03 192.168.44.132 hadoop04
|
关闭防火墙和selinux
1 2 3
| systemctl status firewalld systemctl stop firewalld systemctl disable firewalld.service
|
1 2
| vi /etc/selinux/config 将 SELINUX=enforcing 改为 SELINUX=disabled,保存退出,重启生效
|
设置 ssh 互信免密登陆
参考其他文章 -> Linux SSH免密登陆
二. Hadoop 安装
Hadoop 是基于 Java 平台实现的,首先需要有 JDK 环境,然后再去搭建 Hadoop 集群,需要做如下配置:
- 配置 JDK
- 下载安装 Hadoop
- 修改 Hadoop 集群配置文件
scp 同步每台机器的 Hadoop 环境变量配置和软件目录- 初始化 Hadoop 的 NameNode
- 启动 Hadoop
- 验证 Hadoop
安装JDK
需要每台服务器都装上 JDK,具体 JDK 如何安装可参考此文章 -> Linux下JDK、Eclipse安装与配置简记
安装 hadoop
至 Hadoop 官网 下载 Haoop 软件包,然后使用 xftp 上传至服务器 hadoop01 中(hadoop02-04 在修改完集群配置文件后使用 scp 命令从 hadoop01 拷贝过去即可),解压软件至 /opt ,然后配置环境变量,新增 vim /etc/profile.d/myself_env.sh 文件,添加如下内容:
1 2 3 4
| export JAVA_HOME=/opt/jdk1.8.0_261 export HADOOP_HOME=/opt/hadoop-3.2.1 export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
|
更新环境变量后使用 hadoop version 查看是否安装成功,现实如下图则说明安装成功。

Hadoop 集群配置文件修改
进入 Hadoop 软件目录 /opt/hadoop-3.2.1/etc/hadoop 下,修改如下几个配置文件
1 2 3 4 5 6 7 8 9 10 11 12
| export JAVA_HOME=/usr/java/jdk1.8.0_111 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=hadoop JAVA_HOME:指定JDK路径 HDFS_NAMENODE_USER:指定操作NameNode进程的用户 HDFS_DATANODE_USER:指定操作DataNode进程的用户 HDFS_SECONDARYNAMENODE_USER:指定操作 Secondary NameNode进程的用户,我们这里指定的用户是 root ,具体应用时,据实际情况而定。 这三个配置是hadoop3.x 为了提升安全性而引入的。 日志信息默认在 ${HADOOP_HOME}/logs 中,也可以自行配置目录。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop01:9820</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop-3.2.1/data_file</value> </property>
</configuration>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.http-address</name> <value>hadoop01:9870</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop02:9868</value> </property> </configuration>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop04:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop04:19888</value> </property> </configuration>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop03</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log.server.url</name> <value>http://hadoop04:19888/jobhistory/logs</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> </configuration>
|
1 2 3 4
| hadoop01 hadoop02 hadoop03 hadoop04
|
scp 拷贝数据至 hadoop02-04 服务器
注:需要上面的集群配置文件修改完后才可再进行拷贝,
1 2 3 4 5 6 7 8
| scp -rv /etc/profile.d/myself_env.sh root@hadoop02:/etc/profile.d/myself_env.sh scp -rv /etc/profile.d/myself_env.sh root@hadoop02:/etc/profile.d/myself_env.sh scp -rv /etc/profile.d/myself_env.sh root@hadoop02:/etc/profile.d/myself_env.sh
scp -rv $HADOOP_HOME root@hadoop02:$HADOOP_HOME scp -rv $HADOOP_HOME root@hadoop03:$HADOOP_HOME scp -rv $HADOOP_HOME root@hadoop04:$HADOOP_HOME
|
初始化 namenode
初始化目录
bin/hdfs namenode -format
注:首次启动要 format, 如果想重新 format 的话,所有机器的 data_file 目录都需要删除,否则会出问题。
启动 Hadoop
启动/关闭 HDFS
/opt/hadoop-3.2.1/sbin/start-dfs.sh or stop-dfs.sh
启动 YARN
/opt/hadoop-3.2.1/sbin/start-yarn.sh or stop-yarn.sh
启动/关闭历史服务
mapred --daemon start/stop historyserver
验证 Hadoop
NameNode 页面
http://hadoop01:9870/
SecondaryNamenode 页面
http://hadoop02:9868/
YARN 页面
http://hadoop03:8088/
JobHistory 页面
http://hadoop04:19888/
日志聚集页面
http://hadoop04:19888/jobhistory/logs
注:宿主机电脑的 hosts 文件也需要加上 hadoop01-04 的映射配置
三. 时间同步
如果服务器可以连接互联网且本身会自动同步时间,则可以不用配置。但是如果是内网无法连接互联网或者无法同步时间的时候,则需要配置下 Hadoop01-04 这几台服务器之间的时间同步,否则时间久了就会导致时间偏差,导致集群执行任务时时间不同步。尤其是如果后面还需要部署 Hbase 的话,时间同步时必须要做的,否则一旦时间出现误差,将会出现大问题。
首先先设置好 hadoop01-04 所有机器的时区:timedatectl set-timezone Asia/Shanghai
可以连接互联网时的配置
可以连接互联网,但是服务器默认没有去同步时间时,可以先 yum 安装 ntpd 服务,然后配置所有机器与互联网上的时间服务器进行时间同步。
1 2 3 4 5 6 7 8
| yum -y install ntp
systemctrl start ntpd
systemctrl status ntpd
systemctrl enable ntpd
|
内网配置 hadoop01-04 同步时间
以 hadoop01 为时间同步服务器,其他服务器以 hadoop01 时间为准进行同步,修改 hadoop01 的 /etc/ntp.conf 文件(vim),修改如下内容:
1 2 3 4 5 6 7 8 9 10 11 12
| restrict 192.168.44.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0 fudge 127.127.1.0 stratum 10
|
修改 hadoop01 下 /etc/sysconfig/ntpd 文件(vim),设置硬件与系统时间进行同步,添加一行:SYNC_HWCLOCK=yes 保存,systemctl restart ntpd 重启时间服务。
进入 hadoop02-04 服务器,添加定时任务,每隔一段时间去同步 hadoop01 时间,如下:
1 2 3 4 5 6 7 8
| crontab -e
*/1 * * * * /usr/sbin/ntpdate hadoop01
* * 1 * * /usr/sbin/ntpdate hadoop01
|
至此,hadoop02-04 服务器就会按规定的时间定期去同步 hadoop01 的时间,大功告成。