一. 集群规划
1.1 集群节点分配
注意 : 可以根据自己电脑配置调整 , 如果配置比较低就少配置几台子节点
主机名 | 主机IP |
---|---|
master | 192.168.100.100 |
slave1 | 192.168.100.101 |
slave2 | 192.168.100.102 |
slave3 | 192.168.100.1003 |
1.2 软件版本
软件名称 | 软件版本 |
---|---|
Java | 1.8.0_152 |
Centos | CentOS-7-x64-1708 |
Hadoop | 2.7.7 |
1.3 各软件安装路径
软件名 | 安装路径 |
---|---|
Hadoop | /opt/SoftWare/Hadoop/ |
Java | /opt/SoftWare/Java/ |
二. 各主机基础软件安装及操作
特别注意 : 四台主机均按照下面步骤安装基础软件工具
2.1 openssh安装,便于远程上传文件
[root@master ~]# yum -y install openssh-clients
2.2 同步时间工具
#安装ntpdate工具
[root@master ~]# yum -y install ntp ntpdate
#设置与网络时间同步
[root@master ~]# ntpdate cn.pool.ntp.org
#系统时间写入硬件时间
[root@master ~]# hwclock --systohc
2.3 文件上传(rz)下载(sz)工具
可以在Xshell工具中通过rz调出上传文件的窗口进行文件上传,也可以通过sz 文件名下载
某一个文件
[root@master ~]# yum -y install lrzsz
2.4 安装网络下载工具 wget
[root@test ~]# yum -y install wget
2.5 关闭防火墙
注意 : 我们只需要执行关闭防火墙以及禁止开机启动防火墙的命令即可!
#查看防火墙开启状态
[root@test ~]# systemctl status firewalld
#关闭防火墙
[root@test ~]# systemctl stop firewalld
#禁止开机启动防火墙
[root@test ~]# systemctl disable firewalld
#开启防火墙
[root@test ~]# systemctl start firewalld
#设置开机启动防火墙
[root@test ~]# systemctl enable firewalld
#重启防火墙
[root@test ~]# systemctl restart firewalld
三. 配置SSH免密码登录
注意 : 四台主机均按照步骤2安装基础软件工具
3.1 修改hosts文件
注意 : 添加以下内容,是四台主机都需要添加的
[root@master ~]# vi /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.100 master
192.168.100.101 slave1
192.168.100.102 slave2
192.168.100.103 slave3
3.2 配置SSH免密登录
3.2.1 创建.ssh目录
- 在每台机器的root目录下创建一个.ssh 文件夹
[root@master ~]# mkdir .ssh
- 每台机器均进入~/.ssh 目录进行操作
[root@master ~]# cd ~/.ssh
3.2.2 创建公钥和秘钥
- 在每台机器的root目录下创建一个.ssh 文件夹
[root@master ~]# mkdir .ssh
- 每台机器均进入~/.ssh 目录进行操作
[root@master ~]# cd ~/.ssh
- 输入以下命令,一路回车,用以产生公钥和秘钥
[root@master .ssh]# ssh-keygen -t rsa -P ''
- 出现以下信息说明生成成功
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:6YO1h1emM9gcWvv9OT6ftHxLnjP9u8p25x1o30oq3No root@master
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| |
| . |
| S o o |
| + O * . |
| . B.X. o.+.|
| +o=+=**%|
| .oEo*^^|
+----[SHA256]-----+
3.2.3 合并公钥文件
- 将每台机器上的id_rsa.pub公钥内容复制到authorized_keys文件中
[root@master .ssh]# cp id_rsa.pub authorized_keys
-
将所有的authorized_keys文件进行合并(最简单的方法是将其余三台slave主机的文件内容追加到master主机上)
注意 : 这个是在三台机器上分别执行的 , 注意下面的主机名
[root@slave1 .ssh]# cat ~/.ssh/authorized_keys | ssh root@master 'cat >>
~/.ssh/authorized_keys'
[root@slave2 .ssh]# cat ~/.ssh/authorized_keys | ssh root@master 'cat >>
~/.ssh/authorized_keys'
[root@slave3 .ssh]# cat ~/.ssh/authorized_keys | ssh root@master 'cat >>
~/.ssh/authorized_keys
- 查看master上的authorized_keys文件内容,类似如下即可
ssh-rsAAAAB3NzaC1yc2EAAAADAQABAAABAQC5iw8+LlLxo0d77uaTChOKKJqfMHzp2jgzqV2hFAneFXqqWmr
36Z4/FrMUPenmdss19bP4Up9G7PGbJu29yZDvkDwlmuqnVajYyDOsCl7PPXPWXMIlxMGUHgSXLnQQi6QnWp04vJKD37s0EbiRTd0ZYCSQefzJcZ8jbQ7bLYt6jtil7FfUupTdHTeexKKd8Mq3K7YFZHumKvhzs6wWiM+n41jANS083ss3O38YmAdO2cU0w1BhLVvJhdzd6fNG3RXVCXI2v0XxCUHiqI9Oewl2qPOfKzeyy09bJxo371Ezjmt8GMrkA/Ecepkvx1392qwNzC9bSPLfbnPWVo2gIxe4mMaFqCFJ root@master
40ssh-AAAAB3NzaC1yc2EAAAADAQABAAABAQC3CkB3Jejavt+yFphsbciktWciJmbcUBOv3ZLPVLW18ZxXGZK
41vG50EPXo/4By7P6IRW0wCa5YuckQEW+q6kmSatxqJ8e/K9a1mAk13N4f7V7M71Nn8IkujlF3gHYjKrmnEWpGJCy425YBURzywIQTRArlIac1xj2SeM6q+gTMV9WrAKJupIRHli+W0kHVaYHNdKl7KMUT4KVrSl+h4wFwAd7Tcyj7JIbU43cCCL6o/v/LqGFwpcJfbfUsuKJJho+tImh41j7mSXR8kRbTSZkcq5K+iANrANwOHZ58tV5KXmMQjuVq7aJ985C1446hHssB6zq/zjAxpxAyQIeE8Incc8U8ix root@slave1
45ssh-AAAAB3NzaC1yc2EAAAADAQABAAABAQC//uaMbzbkYqxdgZJSdq+gdQYldzMQ7D3SxsUaNO5oVnVOszw
46+mbNnmL8vp1EUUehabQHPCAvCmLKUPXzfcxlyJEF/pnY77u4ySwsRVEpHvsDZbrclgCOrS6hW00sSx303KHLOgX47T70LfrmnohfUhvTxajzLXT+C8f5ZfTZ8meKD73HKl16jRwZQ8YhW9GUyuCkgQTGtKtTKPsRUd9LpAc/7/u8xvvv48NvTYPxgyTJcUMzGSOHh8J3upI54ykY0FgBkjs1fCUaDalxAgsHw9B1iyx706WbcT6ymiQVMKGnnnM6k2KPvUvfD490swVfUSG+4ZsYSRHRTgWuiBbHoIr7DVd root@slave2
50ssh-AAAAB3NzaC1yc2EAAAADAQABAAABAQDDTzTTdGRTd1zts3m7uKobcgRom4lVyF9EdNOdbBWMucYjbCs
51BgP1ideDDQed2TyBj3Szz3Yx6h1L4McGmATY/D9qRLml26VW/x0Tod8JYkqOQpQL9knLW2cwITnhLzq5VDugOix5206r/uweP3Zed9CO7ld3jUxJJNZCYpsNz+eUKq9SWM5+ehUu9pfZZu9zUk7Q01js3uCHzu1AhsajgNzgB4+YLLcc53dHBfxGg4ix5wuaF82PlEEh70hTdfRkq8pqPMZ+FIQtTgfD5XllKTcnPItUY23hc7Umx4I3ujOd810vzffWYK07c54Otv1r7LEcYtYqbZ6zIvII+M775iRkzQX root@slave3
3.2.4 分发 authorized_keys 文件
- 将master上的authorized_keys文件分发到其他主机上
[root@master .ssh]# scp ~/.ssh/authorized_keys root@slave1:~/.ssh/
[root@master .ssh]# scp ~/.ssh/authorized_keys root@slave2:~/.ssh/
[root@master .ssh]# scp ~/.ssh/authorized_keys root@slave3:~/.ssh/
3.2.5 测试免密登录
- 每台机器之间进行ssh免密码登录操作,包括自己与自己
[root@master ~]# ssh master
[root@master ~]# ssh slave1
[root@slave1 ~]# ssh master
[root@master ~]# ssh slave2
[root@slave2 ~]# ssh master
[root@master ~]# ssh slave3
[root@slave3 ~]# ssh master
[root@master ~]# ssh slave1
[root@slave1 ~]# ssh slave1
[root@slave1 ~]# ssh slave2
[root@slave2 ~]# ssh slave1
[root@slave1 ~]# ssh slave3
[root@slave3 ~]# ssh slave1
[root@slave1 ~]# ssh slave2
[root@slave2 ~]# ssh slave2
[root@slave2 ~]# ssh slave3
[root@slave3 ~]# ssh slave2
[root@slave2 ~]# ssh slave3
[root@slave3 ~]# ssh slave2
[root@slave2 ~]# ssh slave3
[root@slave3 ~]# ssh slave3
四. 安装配置Java环境并测试
注意 : 所有主机都需要配置Java环境
4.1 下载jdk
下载地址 :https://repo.huaweicloud.com/java/jdk/8u152-b16/jdk-8u152-linux-x64.tar.gz
4.2 卸载其他jdk
如果centos中已经安装的有jdk,则需要先卸载当前jdk,重新安装新的jdk
4.2.1 查询当前所有安装的jdk版本
[root@master ~]# rpm -qa|grep jdk
如果什么都没有展示说明没有已安装的jdk,则无需卸载,如果出现以下jdk,则卸载之
copy-jdk-configs-2.2-3.el7.noarch
java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64
java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64
4.2.2 卸载jdk
-
使用下面的方法卸载即可 [参考]
[root@master ~]# yum -y remove copy-jdk-configs-2.2-3.el7.noarch [root@master ~]# yum -y remove java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64 [root@master ~]# yum -y remove java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64
-
再次查询当前所有安装的jdk版本
[root@master ~]# rpm -qa|grep jdk
4.3 开始安装jdk
4.3.1 在master主节点上创建指定目录
[root@master ~]# mkdir -p /opt/SoftWare/Java
[root@master ~]# mkdir -p /opt/SoftWare/Hadoop
4.3.2 解压
- 进入到Java目录
[root@master ~]# cd /opt/SoftWare/Java
- 使用rz命令从windows主机上传jdk压缩包到master节点
[root@master Java]# rz
- 解压到当前目录
[root@master Java]# tar -zxvf jdk-8u152-linux-x64.tar.gz
4.3.3 配置环境变量
- 打开 profile文件
[root@master Java]# vi /etc/profile
- 在文件的末尾追加以下内容
export JAVA_HOME=/opt/SoftWare/Java/jdk1.8.0_152
export JRE_HOME=/opt/SoftWare/Java/jdk1.8.0_152/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
- 使刚才的设置生效
[root@master Java]# source /etc/profile
- 检测是否配置成功
[root@master Java]# java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
五. 安装配置Hadoop并配置
5.1 下载Hadoop安装包
下载地址 https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.ta
5.2 上传至master节点
- 上传Hadoop安装包
[root@master ~]# cd /opt/SoftWare/Hadoop
[root@master Hadoop]# rz
- 解压
[root@master Hadoop]# tar -zxvf hadoop-2.7.7.tar.gz
5.3 创建目录
5.3.1 进入解压后的Hadoop根目录
[root@master Hadoop]# cd hadoop-2.7.7
5.3.2 创建以下目录
# 创建hadoop 缓存文件目录
[root@master hadoop-2.7.7]# mkdir tmp
# 创建hadoop 日志文件目录
[root@master hadoop-2.7.7]# mkdir logs
# 创建hadoop NameNode数据目录
[root@master hadoop-2.7.7]# mkdir -p hdfs/name
# 创建hadoop DataNode数据目录
[root@master hadoop-2.7.7]# mkdir -p hdfs/data
5.4 修改配置
5.4.1 修改hadoop-env.sh文件
[root@master hadoop-2.7.7]# vi etc/hadoop/hadoop-env.sh
#修改JAVA_HOME为以下内容,否则容易出现Hadoop无法启动问题
export JAVA_HOME=/opt/SoftWare/Java/jdk1.8.0_152
5.4.2 修改yarn-env.sh文件
[root@master hadoop-2.7.7]# vi etc/hadoop/yarn-env.sh
#修改JAVA_HOME为以下内容
export JAVA_HOME=/opt/SoftWare/Java/jdk1.8.0_152
5.4.3 编辑slaves文件
#该文件用于记录本集群有哪些数据节点
[root@master hadoop-2.7.7]# vi etc/hadoop/slaves
#删除该文件中原来的内容,添加以下内容
slave1
slave2
slave3
5.4.4 修改core-site.xml文件
- 打开 core-site.xml 文件
[root@master hadoop-2.7.7]# vi etc/hadoop/core-site.xml
- 将下面的内容添加到 core-site.xml 文件
<!--在<configuration></configuration>中间添加一下内容-->
<property>
<name>fs.defaultFS</name><!--定义Hadoop Master的URI和端口-->
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name><!--hadoop的临时存储目录-->
<value>file:/opt/SoftWare/Hadoop/hadoop-2.7.7/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name><!--用作序列化文件处理时读写buffer的大小-->
<value>131702</value>
</property>
5.4.5 修改hdfs-site.xml文件
- 打开 hdfs-site.xml 文件
[root@master hadoop-2.7.7]# vi etc/hadoop/hdfs-site.xml
- 将下面的内容添加到 hdfs-site.xml
在中间添加一下内容
<!--在<configuration></configuration>中间添加一下内容-->
<property><!--namenode节点数据存储目录-->
<name>dfs.namenode.name.dir</name>
<value>file:/opt/SoftWare/Hadoop/hadoop-2.7.7/hdfs/name</value>
</property>
<property><!--datanode数据存储目录-->
<name>dfs.datanode.data.dir</name>
<value>file:/opt/SoftWare/Hadoop/hadoop-2.7.7/hdfs/data</value>
</property>
<property><!--指定DataNode存储block的副本数量,不大于DataNode的个数就行,默认为3-->
<name>dfs.replication</name>
<value>2</value>
</property>
<property><!--指定master的http协议访问地址-->
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property><!--指定master的https协议访问地址-->
<name>dfs.namenode.secondary.https-address</name>
<value>192.168.10.250:50091</value>
</property>
<property><!--必须设置为true,否则就不能通过web访问hdfs上的文件信息-->
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
5.4.6 修改yarn-site.xml文件
- 打开 yarn-site.xml 文件
[root@master hadoop-2.7.7]# vi etc/hadoop/yarn-site.xml
- 将下面的内容添加到 yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
5.4.7 修改mapred-site.xml文件
- 这个文件并不存在,先复制再打开
#使用cp命令复制一份出来,不要自己创建
[root@master hadoop-2.7.7]# cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
[root@master hadoop-2.7.7]# vi etc/hadoop/mapred-site.xml
- 添加下面的内容
<property><!--使用yarn运行mapreduce程序-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property><!--MapReduce JobHistory Server地址-->
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property><!--MapReduce JobHistory Server Web界面地址-->
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
5.5 分发Hadoop文件
- 将master节点上的Hadoop目录远程拷贝到其他slave节点
[root@master hadoop-2.7.7]# scp -r /opt/SoftWare/Hadoop root@slave1:/opt/SoftWare/
[root@master hadoop-2.7.7]# scp -r /opt/SoftWare/Hadoop root@slave2:/opt/SoftWare/
[root@master hadoop-2.7.7]# scp -r /opt/SoftWare/Hadoop root@slave3:/opt/SoftWare/
5.6 修改环境变量
- 编辑 /etc/profile 文件
[root@master hadoop-2.7.7]# vi /etc/profile
- 添加以下内容
#添加以下内容
export HADOOP_HOME=/opt/SoftWare/Hadoop/hadoop-2.7.7
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
export YARN_LOG_DIR=$HADOOP_LOG_DIR
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
- 使设置生效
[root@master hadoop-2.7.7]# source /etc/profile
5.7 格式化Hadoop
注意 : 这个只需要在 master节点上执行即可, 其他的不需要执行!
不要重复格式化 ! 如果需要重复格式化, 先把之前创建的hdsf目录下的name 和data 目录删除,然后再重新创建!
- 执行下面的命令
[root@master hadoop-2.7.7]# bin/hdfs namenode -format
- 在最后出现以下内容说明格式化成功
18/03/01 10:07:59 INFO namenode.FSImage: Allocated new BlockPoolId: BP-1057357071-192.168.100.100-1519870079201
18/03/01 10:07:59 INFO common.Storage: Storage directory /opt/SoftWare/Hadoop/hadoop-2.7.7/hdfs/name has been successfully formatted.
18/03/01 10:07:59 INFO namenode.FSImageFormatProtobuf: Saving image file /opt/SoftWare/Hadoop/hadoop-2.7.7/hdfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
18/03/01 10:07:59 INFO namenode.FSImageFormatProtobuf: Image file /opt/SoftWare/Hadoop/hadoop-2.7.7/hdfs/name/current/fsimage.ckpt_0000000000000000000 of size 321 bytes saved in 0 seconds.
18/03/01 10:07:59 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
18/03/01 10:07:59 INFO util.ExitUtil: Exiting with status 0
18/03/01 10:07:59 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/192.168.100.100
************************************************************/
注意上面的第二行最后的successfully formatted
5.8 启动Hadoop集群
5.8.1 启动HDFS
- 按照新版要求,不建议直接使用start-all.sh命令
[root@master hadoop-2.7.7]# sbin/start-dfs.sh
- 然后会在控制台打印以下信息
Starting namenodes on [master]
master: starting namenode, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/hadoop-rootnamenode-master.out
slave1: starting datanode, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/hadoop-rootdatanode-slave1.out
slave2: starting datanode, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/hadoop-rootdatanode-slave2.out
slave3: starting datanode, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/hadoop-rootdatanode-slave3.out
Starting secondary namenodes [master]
master: starting secondarynamenode, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/hadooproot-secondarynamenode-master.out
5.8.2 启动Yarn
- 执行 start-yarn.sh
[root@master hadoop-2.7.7]# sbin/start-yarn.sh
- 然后会在控制台打印以下信息
starting yarn daemons
starting resourcemanager, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/yarn-rootresourcemanager-master.out
slave2: starting nodemanager, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/yarn-rootnodemanager-slave2.out
slave3: starting nodemanager, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/yarn-rootnodemanager-slave3.out
slave1: starting nodemanager, logging to /opt/SoftWare/Hadoop/hadoop-2.7.7/logs/yarn-rootnodemanager-slave1.out
5.9 检测集群是否搭建成功
5.9.1 在 Master上执行
[root@master hadoop-2.7.7]# jps
44658 ResourceManager
44509 SecondaryNameNode
44318 NameNode
44958 Jps
5.9.2 在 slave节点上执行
[root@slave1 ~]# jps
2262 DataNode
2360 NodeManager
2461 Jps
5.9.3 使用WEB界面访问
- 在浏览器地址栏中输入http://192.168.100.100:50070 即可