一、基础环境配置
1. 按照左侧虚拟机名称修改对应主机名(分别为master、slave1、slave2,使用hostnamectl命令)。
操作环境:master、slave1、slave2
[root@~]# hostnamectl set-hostname master
[root@ ~]# hostname
master
[root@ ~]# bash
hostnamectl set-hostname slave1
bash
hostnamectl set-hostname slave2
bash
2.修改host文件添加左侧master、slave1、slave2节点IP与主机名映射(使用内网IP)。
操作环境:master、slave1、slave2
echo "172.18.13.157 master" >> /etc/hosts
echo "172.18.13.156 slave1" >> /etc/hosts
echo "172.18.32.47 slave2" >> /etc/hosts
3. 时区更改为上海时间(CST+0800时区)。
操作环境:master、slave1、slave2
echo "TZ='Asia/Shanghai'; export TZ" >> /etc/profile
source /etc/profile
date -R
4. 环境已经安装NTP,修改master节点NTP配置,设置master为本地时间服务器,屏蔽默认server,服务器层级设为10。
操作环境:master
vim /etc/ntp.conf
# 注释掉
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst
# 添加以下内容
server 127.127.1.0
fudge 127.127.1.0 stratum 10
5. 开启NTP服务。
操作环境:master
systemctl start ntpd.service
6. 添加定时任务--在早十-晚五时间段内每隔半个小时同步一次本地服务器时间(24小时制、使用用户root任务调度crontab,服务器地址使用主机名)。
操作环境:slave1、slave2
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
# 方式一:
crontab -e
*/30 10-17 * * * /usr/sbin/ntpdate master
# 方式二:
echo "*/30 10-17 * * * /usr/sbin/ntpdate master" >> /var/spool/cron/root
7. 主节点生成公钥文件id_rsa.pub(数字签名RSA,用户root,主机名master)。
操作环境:master
ssh-keygen
8. 建立master使用root用户ssh访问localhost免密登录。
操作环境:master
# 将本机的公钥复制到授权列表文件authorized_keys中
ssh-copy-id -i /root/.ssh/id_rsa.pub localhost
# 验证
ssh master
exit
ssh localhost
exit
9. 建立master使用root用户到slave1的ssh免密登录访问。
操作环境:master
ssh-copy-id -i /root/.ssh/id_rsa.pub slave1
10. 建立master使用root用户到slave2的ssh免密登录访问。
操作环境:master
ssh-copy-id -i /root/.ssh/id_rsa.pub slave2
11. 将jdk安装包解压到/usr/java目录(安装包存放于/usr/package277/,路径自行创建,解压后文件夹为默认名称,其他安装同理)。
操作环境:master、slave1、slave2
mkdir -p /usr/java
cd /usr/package277/
tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/java/
12. 配置系统环境变量JAVA_HOME,同时将JDK安装路径中bin目录加入PATH系统变量,注意生效变量,查看JDK版本。
操作环境:master、slave1、slave2
vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_221
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
java -version# 分发给slave1和slave2
scp -r /usr/java root@slave1:/usr/
scp -r /usr/java root@slave2:/usr/scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/
二、Hadoop集群搭建
1. 将Hadoop安装包解压到指定路径/usr/hadoop(安装包存放于/usr/package277/)
操作环境:master、slave1、slave2
mkdir -p /usr/hadoop
cd /usr/package277/
tar -zxvf hadoop-2.7.7.tar.gz -C /usr/hadoop/
2.配置环境变量HADOOP_HOME,将Hadoop安装路径中bin目录和sbin目录加入PATH系统变量,注意生效变量
操作环境:master、slave1、slave2
vim /etc/profile
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
hadoop version
# 分发给slave1和slave2
scp -r /usr/hadoop root@slave1:/usr/
scp -r /usr/hadoop root@slave2:/usr/scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/
3.配置Hadoop运行环境JAVA_HOME
操作环境:master、slave1、slave2
cd /usr/hadoop/hadoop-2.7.7/etc/hadoop
vim hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_221
4.设置全局参数,指定HDFS上NameNode地址为master,端口默认为9000
操作环境:master、slave1、slave2
5.指定临时存储目录为本地/root/hadoopData/tmp(要求为绝对路径,下同)
操作环境:master、slave1、slave2
vim core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoopData/tmp</value>
</property>
6.设置HDFS参数,指定备份文本数量为2
操作环境:master、slave1、slave2
7.设置HDFS参数,指定NN存放元数据信息路径为本地/root/hadoopData/name;指定DN存放元数据信息路径为本地/root/hadoopData/data(要求为绝对路径)
操作环境:master、slave1、slave2
8.设置HDFS参数,关闭hadoop集群权限校验(安全配置),允许其他用户连接集群;指定datanode之间通过域名方式进行通信
操作环境:master、slave1、slave2
#dfs.replication 数据块的副本数量
#dfs.namenode.name.dir NameNode在本地文件系统中持久存储命名空间和事务日志的路径
#dfs.datanode.data.dir DataNode在本地文件系统中存放块的路径
#dfs.permissions 集群权限系统校验
#dfs.datanode.use.datanode.hostname datanode之间通过域名方式通信
vim hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/hadoopData/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/hadoopData/data</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.datanode.use.datanode.hostname</name>
<value>true</value>
</property>
9.设置YARN运行环境$JAVA_HOME参数
操作环境:master、slave1、slave2
# 方式一
echo "export JAVA_HOME=/usr/java/jdk1.8.0_221" >> yarn-env.sh
# 方式二
vim yarn-env.sh
23 export JAVA_HOME=/usr/java/jdk1.8.0_221
10.设置YARN核心参数,指定ResourceManager进程所在主机为master,端口为18141;指定mapreduce 获取数据的方式为mapreduce_shuffle
操作环境:master、slave1、slave2
#yarn.resourcemanager.admin.address 用于指定RM管理界面的地址(主机:端口)
#yarn.nodemanager.aux-services mapreduce 获取数据的方式,指定在进行mapreduce作业时,yarn使用mapreduce_shuffle混洗技术。这个混洗技术是hadoop的一个核心技术,非常重要。
#yarn.nodemanager.auxservices.mapreduce.shuffle.class 用于指定混洗技术对应的字节码文件,值为org.apache.hadoop.mapred.ShuffleHandler
vim yarn-site.xml
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
11.设置计算框架参数,指定MR运行在yarn上
操作环境:master、slave1、slave2
# mapreduce.framework.name 指定执行MapReduce作业的运行时框架。属性值可以是local,classic或yarn。
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
12.设置节点文件,要求master为主节点; slave1、slave2为子节点
操作环境:master、slave1、slave2
vim master
mastervim slaves
slave1
slave2
# 分发给slave1和slave2
scp -r /usr/hadoop root@slave1:/usr/
scp -r /usr/hadoop root@slave2:/usr/
13.对文件系统进行格式化
操作环境:master
特别注意:只在master节点进行一次,首次启动Hadoop集群之前首先对文件系统进行格式化。
hdfs namenode -format
14.启动Hadoop集群查看各节点服务
操作环境:slave1、slave2
# 在master节点启动
# start-dfs.sh start-yarn.sh
start-all.sh
15.查看集群运行状态是否正常
操作环境:master
hdfs dfsadmin -report