“傻瓜式”基于 Centos 7.x 搭建 Hadoop 2.7.x 完全分布式集群(非HA)

搭建 Hadoop 集群

1、前提准备

1.1 准备3台虚拟机

本次搭建环境采用 Centos 7.x

1.2 配置静态IP

如果不会配置的读者,可以参考本链接进行配置
静态IP配置

1.3 修改主机

为了方便称号每台主机,需要配置主机映射(每一台主机执行相同操作)
(如果读者对于 [root@hadoop102 ~] 中的 hadoop102 有疑问,可以参考静态IP配置中的相关内容进行阅读并配置)

hadoop102:

[root@hadoop102 ~]# vim /etc/hosts

添加如下内容:(读者根据自己的IP和名称对应即可)

192.168.200.102 hadoop102
192.168.200.103 hadoop103
192.168.200.104 hadoop104

hadoop103:

[root@hadoop103 ~]# vim /etc/hosts
192.168.200.102 hadoop102
192.168.200.103 hadoop103
192.168.200.104 hadoop104

hadoop104:

[root@hadoop104 ~]# vim /etc/hosts
192.168.200.102 hadoop102
192.168.200.103 hadoop103
192.168.200.104 hadoop104

1.4 关闭防火墙

每台主机都需要关闭防火墙(以 hadoop102 主机为例)

# 这个操作关闭当前主机防火墙,下次重启是无效
[root@hadoop102 ~]# systemctl stop firewalld
# 永久关闭防火墙
[root@hadoop102 ~]# systemctl disable firewalld

1.5 创建文件夹

为了方便管理资料,可以创建文件夹来清晰管理
以下操作每个主机都需要执行 (以 hadoop102 为例)

# /opt/module 目录管理解压缩文件
[root@hadoop102 ~]# mkdir /opt/module
# /opt/software 目录管理上传资料
[root@hadoop102 ~]# mkdir /opt/software

1.6 集群时间同步

要确保每台主机时间都是同步。最简单的方式使用 ntpd 服务进行联网同步因特网时间,也可以物理配置进行每台主机(以其中一台主机为准)相关同步时间。(查看每台主机的时间 data,ntpd 服务可以使用 yum 进行在线安装,然后启动 ntpd 服务)

2、安装 JDK

每台主机都需要执行安装 JDK 操作 (以 hadoop102 为例)

2.1 卸载自带 JDK

2.1.1 查看是否自带 JDK
[root@hadoop102 ~]# rpm -qa | grep java

如果存在 rpm 包,需要删除。(简单来说就是执行上述命令,出现的结果列表,都需要删除)
删除命令:

# --nodeps 没有依赖,强制删除
# -e 删除
[root@hadoop102 ~]# rpm --nodeps -e 软件包名

2.2 上传 JDK 包

无论采用什么方式,只要上传 JDK 包到 /opt/software 目录即可
本次搭建环境采用 SecureCRT 上传文件工具
进入 /opt/software 目录,执行 alt + p 命令,把目标包拖进来即可。

[root@hadoop102 software]# ls 
jdk-8u144-linux-x64.tar.gz

2.3 解压 JDK

把 JDK 解压到 /opt/module

# tar 命令
# -zxvf 参数解压
# -C 解压到指定目录
[root@hadoop102 software]# tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/

2.4 配置 JAVA_HOME

2.4.1 获取 JDK 家目录
[root@hadoop102 ~]# cd /opt/module/jdk1.8.0_144/
[root@hadoop102 jdk1.8.0_144]# pwd
/opt/module/jdk1.8.0_144
2.4.2 配置 JAVA_HOME

在 /etc/profile 末尾出添加内容

[root@hadoop102 ~]# vim /etc/profile

末尾添加内容

# JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$JAVA_HOME/bin:$PATH
2.4.3 执行 source

执行 source 命令让文件生效

[root@hadoop102 ~]# source /etc/profile
2.4.4 测试

命令行输入 java,出现一系列 help 命令即可。
或者命令行输入 java -version,查看 java 版本是否对应 JAVA_HOME 版本。

3、集群分发脚本

有两种方式实现主机之间的文件复制

3.1 scp (secure copy) 安全拷贝

scp 定义:scp 可以实现服务器与服务器之间的数据拷贝
scp 语法:scp -r pdir/fname user@host:pdir/fname
scp:命令
-r:递归复制
pdir/fname:拷贝路径/文件名称 (本机、拷贝原文件)
user@host:pdir/fname:用户名@主机:拷贝路径/文件名称 (另一主机,目标文件)

3.1.1 案例实操

在 hadoop102,hadoop103 主机 /opt/module/ 目录下创建 scp.txt 文件,
并在 hadoop102 的 scp.txt 文件添加内容,把 hadoop102 的 scp.txt 内容拷贝到 hadoop103 的 scp.txt 文件 (这个操作相当于有覆盖,没有就创建添加)
hadoop102:

[root@hadoop102 ~]# cd /opt/module/
[root@hadoop102 module]# touch scp.txt
[root@hadoop102 module]# vim scp.tx
[root@hadoop102 module]# vim scp.txt 

scp.txt 内容:

hello scp

hadoop103:

[root@hadoop103 ~]# cd /opt/module/
[root@hadoop103 module]# touch scp.txt

scp.txt 没有内容

scp 命令拷贝:(需要输入 hadoop103 的 root 密码)

[root@hadoop102 module]# scp /opt/module/scp.txt root@hadoop103:/opt/module/scp.txt 

也可以在 hadoop103 执行命令

[root@hadoop103 module]# scp -r root@hadoop102:/opt/module/scp.txt /opt/module/scp.txt 

3.2 rsync 远程同步工具

rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。

3.2.1 基本语法

rsync -rvl pdir/fname user@host:pdir/fname
rsync:命令
-rvl:选项参数

-r:递归 (recursion)
-v:显示复制过程 (view)
-l:拷贝链接符合 (link)

后面两项同上

这里不在举例子,原来同 scp 一样,读者触类旁通即可,后面会用具体例子。

3.3 基于 rsync 编写 集群分发脚本

在 hadoop102 的 /usr/local/bin/ 目录下创建 xsync.sh (root 用户)。
如果是其他普通用户,可以在/home/用户名/bin目录下创建 xsync.sh。

[root@hadoop102 ~]# cd /usr/local/bin/
[root@hadoop102 bin]# touch xsync.sh
[root@hadoop102 bin]# vim xsync.sh 

xsync.sh 内容如下:

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环
for((host=102; host<105; host++)); do
        echo ------------------- hadoop$host --------------
        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done

赋予 rsync.sh 执行权限:

[root@hadoop102 bin]# chmod 777 xsync.sh

4、SSH 无密登录

实现 hadoop102,hadoop103,hadoop104 root 用户无密码登录,以便不用每次数据拷贝都输入密码。

4.1 SSH例子

假设在 hadoop102 登录 hadoop103 (需要输入 hadoop103 root 密码),使用SSH命令

[root@hadoop102 ~]# ssh hadoop103
root@hadoop103's password: 
Last login: Tue Feb  9 14:48:35 2021 from 192.168.200.1
[root@hadoop103 ~]# 

退出命令:exit

注意 使用 SSH 命令登录成功后,会生成隐藏文件 …/ssh (在根目录下)

4.2 hadoop102 无密登录

[root@hadoop102 ~]# cd
[root@hadoop102 ~]# ls -la
总用量 52
dr-xr-x---. 16 root root 4096 2月   9 16:59 .
dr-xr-xr-x. 17 root root  224 2月   9 00:47 ..
-rw-------.  1 root root 1587 2月   9 00:48 anaconda-ks.cfg
-rw-------.  1 root root  290 2月   9 10:57 .bash_history
-rw-r--r--.  1 root root   18 12月 29 2013 .bash_logout
-rw-r--r--.  1 root root  176 12月 29 2013 .bash_profile
-rw-r--r--.  1 root root  176 12月 29 2013 .bashrc
drwx------. 12 root root 4096 2月   8 18:43 .cache
drwxr-xr-x. 14 root root  261 2月   9 01:54 .config
-rw-r--r--.  1 root root  100 12月 29 2013 .cshrc
drwx------.  3 root root   25 2月   9 00:50 .dbus
-rw-------.  1 root root   16 2月   9 01:54 .esd_auth
-rw-------.  1 root root  934 2月   8 18:42 .ICEauthority
-rw-r--r--.  1 root root 1635 2月   9 00:51 initial-setup-ks.cfg
drwx------.  3 root root   19 2月   9 01:54 .local
drwxr-xr-x.  2 root root   40 2月   9 15:44 .oracle_jre_usage
drwx------.  2 root root   25 2月   9 16:31 .ssh
-rw-r--r--.  1 root root  129 12月 29 2013 .tcshrc
-rw-------.  1 root root 3833 2月   9 16:59 .viminfo
drwxr-xr-x.  2 root root    6 2月   9 01:54 公共
drwxr-xr-x.  2 root root    6 2月   9 01:54 模板
drwxr-xr-x.  2 root root    6 2月   9 01:54 视频
drwxr-xr-x.  2 root root    6 2月   9 01:54 图片
drwxr-xr-x.  2 root root    6 2月   9 01:54 文档
drwxr-xr-x.  2 root root    6 2月   9 01:54 下载
drwxr-xr-x.  2 root root    6 2月   9 01:54 音乐
drwxr-xr-x.  2 root root    6 2月   9 01:54 桌面
[root@hadoop102 ~]# cd .ssh/
# 执行命令之后,按三个回车键即可
[root@hadoop102 .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
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:TXUI475URdNXNGoT4s0JXW0GtWSB6yayZoJK3LU0RLU root@hadoop102
The key's randomart image is:
+---[RSA 2048]----+
|       ...o+o+O@B|
|      .  .oo*=*.O|
|       . Eo..B.+.|
|      .  + ....  |
|       +S + .    |
|  . . o oo o o   |
|   o ...  + o    |
|  .  . . +       |
|   ..   +        |
+----[SHA256]-----+

复制公钥到其他主机上(包括本机)(yes,密码)

[root@hadoop102 .ssh]# ssh-copy-id hadoop102
[root@hadoop102 .ssh]# ssh-copy-id hadoop103
[root@hadoop102 .ssh]# ssh-copy-id hadoop104

同理 hadoop103 hadoop104 执行 hadoop102 无密登录操作即可

4.3 hadoop103 无密登录

4.4 hadoop104 无密登录

4.5 测试

只有在任意的主机上利用 ssh 命令登录即可
例如在 hadoop102 登录 hadoop104

[root@hadoop102 ~]# ssh hadoop104
Last login: Tue Feb  9 14:49:15 2021 from 192.168.200.1
[root@hadoop104 ~]# exit
登出
Connection to hadoop104 closed.

5、Hadoop 完全分布式集群搭建

5.1 集群部署规划

hadoop102hadoop103hadoop104
HDFSNameNode DataNode historyserverDataNodeSecondaryNameNode DataNode
YARNNodeManagerResourceManager NodeManagerNodeManager

5.2 上传 Hadoop 包

下载 Hadoop安装包
把 hadoop 包上传到 /opt/module 目录下

[root@hadoop102 ~]# cd /opt/software/
[root@hadoop102 software]# ll
总用量 374196
-rw-r--r--. 1 root root 197657687 2月   9 15:17 hadoop-2.7.2.tar.gz
-rw-r--r--. 1 root root 185515842 2月   9 15:17 jdk-8u144-linux-x64.tar.gz

5.3 解压到指定目录

把 hadoop 解压到 /opt/module/ 目录下

[root@hadoop102 software]# tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
[root@hadoop102 software]# cd /opt/module/
[root@hadoop102 module]# ll
总用量 4
drwxr-xr-x. 9 root root 149 5月  22 2017 hadoop-2.7.2
drwxr-xr-x. 8   10  143 255 7月  22 2017 jdk1.8.0_144
-rw-r--r--. 1 root root  20 2月   9 16:34 scp.txt

5.4 配置 HADOOP_HOME

[root@hadoop102 ~]# cd /opt/module/hadoop-2.7.2/
[root@hadoop102 hadoop-2.7.2]# pwd
/opt/module/hadoop-2.7.2

在 /etc/profile 末尾处添加

[root@hadoop102 hadoop-2.7.2]# vim /etc/profile

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH

/etc/profile 生效

[root@hadoop102 hadoop-2.7.2]# source /etc/profile

5.5 配置 core-site.xml

[root@hadoop102 ~]# cd /opt/module/hadoop-2.7.2/etc/hadoop/
[root@hadoop102 hadoop]# vim core-site.xml 

添加如下内容:

<!-- 指定HDFS中NameNode的地址 -->
<property>
	  <name>fs.defaultFS</name>
      <value>hdfs://hadoop102:9000</value>
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

5.6 配置 hdfs-site.xml

[root@hadoop102 ~]# cd /opt/module/hadoop-2.7.2/etc/hadoop/
[root@hadoop102 hadoop]# vim hdfs-site.xml 

添加如下内容:

<!-- 文件块副本数 -->
<property>
	  <name>dfs.replication</name>
	  <value>3</value>
</property>

<!-- 指定 Hadoop 辅助名称节点主机配置 -->
<property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>hadoop104:50090</value>
</property>

5.7 配置 mapred-site.xml

[root@hadoop102 hadoop]# pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[root@hadoop102 hadoop]# mv mapred-site.xml.template mapred-site.xml
[root@hadoop102 hadoop]# vim mapred-site.xml 

添加如下内容:

<!-- 指定MR运行在Yarn上 -->
<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
</property>

<!-- 历史服务器端地址 -->
<property>
	<name>mapreduce.jobhistory.address</name>
	<value>hadoop102:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop102:19888</value>
</property>

5.8 配置 yarn-site.xml

[root@hadoop102 hadoop]# pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[root@hadoop102 hadoop]# vim yarn-site.xml 

添加如下内容:

<!-- Reducer获取数据的方式 -->
<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>hadoop103</value>
</property>

<!-- 日志聚集功能使能 -->
<property>
		<name>yarn.log-aggregation-enable</name>
		<value>true</value>
</property>

<!-- 日志保留时间设置7天 -->
<property>
		<name>yarn.log-aggregation.retain-seconds</name>
		<value>604800</value>
</property>

5.9 配置 hadoop-env.sh

[root@hadoop102 hadoop]# pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[root@hadoop102 hadoop]# vim hadoop-env.sh 

配置 JAVA_HOME

# The java implementation to use.
export JAVA_HOME=/opt/module/jdk1.8.0_144

5.10 配置 yarn-env.sh

[root@hadoop102 hadoop]# pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[root@hadoop102 hadoop]# vim yarn-env.sh 

配置 JAVA_HOME

# some Java parameters
# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
if [ "$JAVA_HOME" != "" ]; then
  #echo "run java in $JAVA_HOME"
  JAVA_HOME=/opt/module/jdk1.8.0_144
fi

5.11 配置 mapred-env.sh

[root@hadoop102 hadoop]# pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[root@hadoop102 hadoop]# vim mapred-env.sh 

配置 JAVA_HOME

# export JAVA_HOME=/home/y/libexec/jdk1.6.0
export JAVA_HOME=/opt/module/jdk1.8.0_144

5.12 配置 slaves

[root@hadoop102 hadoop]# pwd
/opt/module/hadoop-2.7.2/etc/hadoop
[root@hadoop102 hadoop]# vim slaves 

slave内容如下(不能有空格或者多余的行):

hadoop102
hadoop103
hadoop104

5.12 分发

在 hadoop102 分发 hadoop 包到 hadoop103 hadoop104 主机上

[root@hadoop102 module]# pwd
/opt/module
[root@hadoop102 module]# xsync.sh hadoop-2.7.2/

在 hadoop103 查看

[root@hadoop103 module]# pwd
/opt/module
[root@hadoop103 module]# ls -l
总用量 4
drwxr-xr-x. 9 root root 149 2月   9 21:56 hadoop-2.7.2
drwxr-xr-x. 8   10  143 255 7月  22 2017 jdk1.8.0_144
-rw-r--r--. 1 root root  20 2月   9 16:35 scp.txt

在 hadoop104 查看:

[root@hadoop104 module]# pwd
/opt/module
[root@hadoop104 module]# ls -l
总用量 0
drwxr-xr-x. 9 root root 149 2月   9 21:56 hadoop-2.7.2
drwxr-xr-x. 8   10  143 255 7月  22 2017 jdk1.8.0_144

注意:分发到 hadoop103、hadoop104 之后不要忘记配置 HADOOP_HOME。

6、启动集群

6.1 格式化 NameNode

如果集群是第一次启动,需要格式化 NameNode (在 hadoop102 上执行操作),以后不在需要执行。

[root@hadoop102 hadoop-2.7.2]# pwd
/opt/module/hadoop-2.7.2
[root@hadoop102 hadoop-2.7.2]# hadoop namenode -format

6.2 启动 HDFS

HDFS 中有两个核心的服务:NameNode、DataNode。我们需要在 hadoop102 上集群 HDFS (也即启动 NameNode、DataNode),因为我们在 core-site.xml 配置了 NameNode 在 hadoop102 上。
启动的脚本地方:

[root@hadoop102 sbin]# pwd
/opt/module/hadoop-2.7.2/sbin
[root@hadoop102 sbin]# ls -l
总用量 120
-rwxr-xr-x. 1 root root 2752 5月  22 2017 distribute-exclude.sh
-rwxr-xr-x. 1 root root 6452 5月  22 2017 hadoop-daemon.sh
-rwxr-xr-x. 1 root root 1360 5月  22 2017 hadoop-daemons.sh
-rwxr-xr-x. 1 root root 1640 5月  22 2017 hdfs-config.cmd
-rwxr-xr-x. 1 root root 1427 5月  22 2017 hdfs-config.sh
-rwxr-xr-x. 1 root root 2291 5月  22 2017 httpfs.sh
-rwxr-xr-x. 1 root root 3128 5月  22 2017 kms.sh
-rwxr-xr-x. 1 root root 4080 5月  22 2017 mr-jobhistory-daemon.sh
-rwxr-xr-x. 1 root root 1648 5月  22 2017 refresh-namenodes.sh
-rwxr-xr-x. 1 root root 2145 5月  22 2017 slaves.sh
-rwxr-xr-x. 1 root root 1779 5月  22 2017 start-all.cmd
-rwxr-xr-x. 1 root root 1471 5月  22 2017 start-all.sh
-rwxr-xr-x. 1 root root 1128 5月  22 2017 start-balancer.sh
-rwxr-xr-x. 1 root root 1401 5月  22 2017 start-dfs.cmd
-rwxr-xr-x. 1 root root 3734 5月  22 2017 start-dfs.sh
-rwxr-xr-x. 1 root root 1357 5月  22 2017 start-secure-dns.sh
-rwxr-xr-x. 1 root root 1571 5月  22 2017 start-yarn.cmd
-rwxr-xr-x. 1 root root 1347 5月  22 2017 start-yarn.sh
-rwxr-xr-x. 1 root root 1770 5月  22 2017 stop-all.cmd
-rwxr-xr-x. 1 root root 1462 5月  22 2017 stop-all.sh
-rwxr-xr-x. 1 root root 1179 5月  22 2017 stop-balancer.sh
-rwxr-xr-x. 1 root root 1455 5月  22 2017 stop-dfs.cmd
-rwxr-xr-x. 1 root root 3206 5月  22 2017 stop-dfs.sh
-rwxr-xr-x. 1 root root 1340 5月  22 2017 stop-secure-dns.sh
-rwxr-xr-x. 1 root root 1642 5月  22 2017 stop-yarn.cmd
-rwxr-xr-x. 1 root root 1340 5月  22 2017 stop-yarn.sh
-rwxr-xr-x. 1 root root 4295 5月  22 2017 yarn-daemon.sh
-rwxr-xr-x. 1 root root 1353 5月  22 2017 yarn-daemons.sh

主要 HDFS 启动停止脚本:start-dfs.sh、stop-dfs.sh。如果你配置了 HADOOP_HOME 可以在终端任意位置执行。

6.2.1 启动 HDFS 操作
[root@hadoop102 sbin]# pwd
/opt/module/hadoop-2.7.2/sbin
[root@hadoop102 sbin]# start-dfs.sh 
`Starting namenodes on [hadoop102]
hadoop102: starting namenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-root-namenode-hadoop102.out
hadoop102: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-root-datanode-hadoop102.out
hadoop104: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-root-datanode-hadoop104.out
hadoop103: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-root-datanode-hadoop103.out
Starting secondary namenodes [hadoop104]
hadoop104: starting secondarynamenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-root-secondarynamenode-hadoop104.out
6.2.2 查看启动进程

查看进程主要使用 jsp 命令。Hadoop 框架使用 Java 编写的,需要 安装 JDK 和 配置 JAVA_HOME。
hadoop102:

[root@hadoop102 ~]# jps
17460 NameNode
17896 Jps
17596 DataNode

hadoop103:

[root@hadoop103 ~]# jps
16750 DataNode
16895 Jps

hadoop104:

[root@hadoop104 ~]# jps
16858 Jps
16619 DataNode
16733 SecondaryNameNode
6.2.3 查看 HDFS web界面

在浏览器输入http://hadoop102 的IP:50070
如果访问拒接,可能没有关闭防火墙。
在这里插入图片描述
SecondaryNameNode Web 界面:http://hadoop104 的IP:50090

6.3 启动 YARN

YARN 中有两个核心服务:ResourceManager、NodeManager。因为我们在 yarn-site.xml 配置了 ResourceManager 在 hadoop103 上,所以我们需要在 hadoop103 上执行启动。

6.3.1 启动 YARN 操作
[root@hadoop103 sbin]# pwd
/opt/module/hadoop-2.7.2/sbin
[root@hadoop103 sbin]# start-yarn.sh 
starting yarn daemons
starting resourcemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-root-resourcemanager-hadoop103.out
hadoop103: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-root-nodemanager-hadoop103.out
hadoop104: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-root-nodemanager-hadoop104.out
hadoop102: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-root-nodemanager-hadoop102.out
6.3.2 查看启动进程

hadoop102:

[root@hadoop102 ~]# jps
18209 Jps
17460 NameNode
17596 DataNode
18079 NodeManager

hadoop103:

[root@hadoop103 ~]# jps
17586 Jps
17256 NodeManager
16750 DataNode
17151 ResourceManager

hadoop104:

[root@hadoop104 ~]# jps
17250 Jps
17107 NodeManager
16619 DataNode
16733 SecondaryNameNode
6.3.3 查看 ResourceManager Web 界面

在浏览器输入 http://hadoop103 的IP:8088
如果访问拒接,可能没有关闭防火墙。

在这里插入图片描述

6.4 启动历史服务器

历史服务器主要的作用是:查看程序的历史运行情况。
我们已经在 mapred-site.xml 配置了历史服务器运行在 hadoop102 ,因此我们需要在 hadoop102 运行历史服务器。

6.4.1 启动命令地方

核心脚本:mr-jobhistory-daemon.sh

[root@hadoop102 ~]# cd /opt/module/hadoop-2.7.2/sbin/
[root@hadoop102 sbin]# ll
总用量 120
-rwxr-xr-x. 1 root root 2752 5月  22 2017 distribute-exclude.sh
-rwxr-xr-x. 1 root root 6452 5月  22 2017 hadoop-daemon.sh
-rwxr-xr-x. 1 root root 1360 5月  22 2017 hadoop-daemons.sh
-rwxr-xr-x. 1 root root 1640 5月  22 2017 hdfs-config.cmd
-rwxr-xr-x. 1 root root 1427 5月  22 2017 hdfs-config.sh
-rwxr-xr-x. 1 root root 2291 5月  22 2017 httpfs.sh
-rwxr-xr-x. 1 root root 3128 5月  22 2017 kms.sh
-rwxr-xr-x. 1 root root 4080 5月  22 2017 mr-jobhistory-daemon.sh
-rwxr-xr-x. 1 root root 1648 5月  22 2017 refresh-namenodes.sh
-rwxr-xr-x. 1 root root 2145 5月  22 2017 slaves.sh
-rwxr-xr-x. 1 root root 1779 5月  22 2017 start-all.cmd
-rwxr-xr-x. 1 root root 1471 5月  22 2017 start-all.sh
-rwxr-xr-x. 1 root root 1128 5月  22 2017 start-balancer.sh
-rwxr-xr-x. 1 root root 1401 5月  22 2017 start-dfs.cmd
-rwxr-xr-x. 1 root root 3734 5月  22 2017 start-dfs.sh
-rwxr-xr-x. 1 root root 1357 5月  22 2017 start-secure-dns.sh
-rwxr-xr-x. 1 root root 1571 5月  22 2017 start-yarn.cmd
-rwxr-xr-x. 1 root root 1347 5月  22 2017 start-yarn.sh
-rwxr-xr-x. 1 root root 1770 5月  22 2017 stop-all.cmd
-rwxr-xr-x. 1 root root 1462 5月  22 2017 stop-all.sh
-rwxr-xr-x. 1 root root 1179 5月  22 2017 stop-balancer.sh
-rwxr-xr-x. 1 root root 1455 5月  22 2017 stop-dfs.cmd
-rwxr-xr-x. 1 root root 3206 5月  22 2017 stop-dfs.sh
-rwxr-xr-x. 1 root root 1340 5月  22 2017 stop-secure-dns.sh
-rwxr-xr-x. 1 root root 1642 5月  22 2017 stop-yarn.cmd
-rwxr-xr-x. 1 root root 1340 5月  22 2017 stop-yarn.sh
-rwxr-xr-x. 1 root root 4295 5月  22 2017 yarn-daemon.sh
-rwxr-xr-x. 1 root root 1353 5月  22 2017 yarn-daemons.sh
6.4.2 启动操作
[root@hadoop102 sbin]# mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /opt/module/hadoop-2.7.2/logs/mapred-root-historyserver-hadoop102.out
6.4.3 查看启动进程
[root@hadoop102 ~]# jps
17460 NameNode
18646 JobHistoryServer
18726 Jps
17596 DataNode
6.4.4 查看 Web 界面

在浏览器输入http://hadoop102 的IP:19888

在这里插入图片描述

7、停止集群

7.1 停止 YARN

[root@hadoop103 sbin]# cd /opt/module/hadoop-2.7.2/sbin/
[root@hadoop103 sbin]# stop-yarn.sh 
stopping yarn daemons
stopping resourcemanager
hadoop104: no nodemanager to stop
hadoop103: stopping nodemanager
hadoop102: no nodemanager to stop
no proxyserver to stop

7.2 停止 HDFS

[root@hadoop102 ~]# cd /opt/module/hadoop-2.7.2/sbin/
[root@hadoop102 sbin]# stop-dfs.sh 
Stopping namenodes on [hadoop102]
hadoop102: stopping namenode
hadoop104: stopping datanode
hadoop102: stopping datanode
hadoop103: stopping datanode
Stopping secondary namenodes [hadoop104]
hadoop104: stopping secondarynamenode

7.3 停止历史服务器

[root@hadoop102 sbin]# pwd
/opt/module/hadoop-2.7.2/sbin
[root@hadoop102 sbin]# mr-jobhistory-daemon.sh stop historyserver
stopping historyserver

7.4 验证是否关闭完

使用 jps 命令

8、群起脚本

我们使用一个脚本启动:DHFS、YARN、historyserver服务。在 hadoop102 主机上编写群起脚本。需要在/usr/local/bin 目录下创建 hadoop_all.sh文件

8.1 创建 hadoop_all.sh

[root@hadoop102 bin]# pwd
/usr/local/bin
[root@hadoop102 bin]# touch hadoop_all.sh

8.2 hadoop_all.sh 内容如下:

#! /bin/bash

# $1 表示第一个参数 eg:hadoop_all.sh start -> start 就是第一次参数
case $1 in
"start"){
	echo "------ 启动 hdfs ------"
	/opt/module/hadoop-2.7.2/sbin/start-dfs.sh
	
	echo "------ 启动 yarn ------"
	ssh hadoop103 "/opt/module/hadoop-2.7.2/sbin/start-yarn.sh"
	
	echo "------ 启动 historyserver"
	/opt/module/hadoop-2.7.2/sbin/mr-jobhistory-daemon.sh start historyserver
	
};;
"stop"){
    echo "------ 停止 hdfs -------"
	/opt/module/hadoop-2.7.2/sbin/stop-dfs.sh
	
	echo "------ 停止 yarn ------"
	ssh hadoop103 "/opt/module/hadoop-2.7.2/sbin/stop-yarn.sh"
	
	echo "------ 停止 historyserver"
	/opt/module/hadoop-2.7.2/sbin/mr-jobhistory-daemon.sh stop historyserver
	
};;
esac

8.3 赋予权限:

[root@hadoop102 bin]# chmod 777 hadoop_all.sh

8.4 测试脚本

8.4.1 测试启动
[root@hadoop102 ~]# hadoop_all.sh start
------ 启动 hdfs ------
Starting namenodes on [hadoop102]
hadoop102: starting namenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-root-namenode-hadoop102.out
hadoop104: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-root-datanode-hadoop104.out
hadoop102: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-root-datanode-hadoop102.out
hadoop103: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-root-datanode-hadoop103.out
Starting secondary namenodes [hadoop104]
hadoop104: starting secondarynamenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-root-secondarynamenode-hadoop104.out
------ 启动 yarn ------
starting yarn daemons
starting resourcemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-root-resourcemanager-hadoop103.out
hadoop103: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-root-nodemanager-hadoop103.out
hadoop104: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-root-nodemanager-hadoop104.out
hadoop102: starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-root-nodemanager-hadoop102.out
------ 启动 historyserver
starting historyserver, logging to /opt/module/hadoop-2.7.2/logs/mapred-root-historyserver-hadoop102.out

注意:可以在 hadoop102、hadoop103、hadoop104 使用 jps 查看启动服务。

8.4.2 测试停止
[root@hadoop102 ~]# hadoop_all.sh stop
------ 停止 hdfs -------
Stopping namenodes on [hadoop102]
hadoop102: stopping namenode
hadoop102: stopping datanode
hadoop104: stopping datanode
hadoop103: stopping datanode
Stopping secondary namenodes [hadoop104]
hadoop104: stopping secondarynamenode
------ 停止 yarn ------
stopping yarn daemons
stopping resourcemanager
hadoop104: stopping nodemanager
hadoop103: stopping nodemanager
hadoop102: stopping nodemanager
no proxyserver to stop
------ 停止 historyserver
stopping historyserver

注意:可以在 hadoop102、hadoop103、hadoop104 使用 jps 查看停止服务。

9、查看进程脚本

当我们查看每台主机进程时,都需要在每台主机使用 jps。我们可以编写一个简单的脚本查看每台主机的进程情况。

9.1 创建 xcall.sh

[root@hadoop102 bin]# pwd
/usr/local/bin
[root@hadoop102 bin]# touch xcall.sh

9.2 xcall.sh 内容

#! /bin/bash

for i in hadoop102 hadoop103 hadoop104
do
    echo "------ $i 启动进程情况 ------"
    ssh $i "$*"
done

9.3 赋予权限

[root@hadoop102 bin]# pwd
/usr/local/bin
[root@hadoop102 bin]# chmod 777 xcall.sh 

9.4 测试问题

可能出现一下情况

[root@hadoop102 bin]# xcall.sh jps
------ hadoop102 启动进程情况 ------
bash: jps: command not found
------ hadoop103 启动进程情况 ------
bash: jps: command not found
------ hadoop104 启动进程情况 ------
bash: jps: command not found

解决方式:修改~/.bashrc文件:针对某一个特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。执行一下操作(注意执行的位置):

[root@hadoop102 ~]# cat /etc/profile >> .bashrc
[root@hadoop103 ~]# cat /etc/profile >> .bashrc
[root@hadoop104 ~]# cat /etc/profile >> .bashrc

9.5 正确测试

我们以启动 hadoop_all.sh 脚本 为例测试

9.5.1 启动 hadoop_all.sh
[root@hadoop102 ~]# hadoop_all.sh start
9.5.2 执行 xcall.sh
[root@hadoop102 ~]# xcall.sh jps
------ hadoop102 启动进程情况 ------
27024 DataNode
27362 JobHistoryServer
26872 NameNode
27549 Jps
27294 NodeManager
------ hadoop103 启动进程情况 ------
24882 DataNode
25027 ResourceManager
25493 Jps
25149 NodeManager
------ hadoop104 启动进程情况 ------
24229 DataNode
24341 SecondaryNameNode
24601 Jps
24447 NodeManager

10、常见错误及解决方案

10.1 防火墙问题

主机间相互访问不到或者 Web 界面访问不到,很有可能没有关闭防火墙。

10.2 NameNode 多次格式化

格式化 NameNode,会产生新的集群id,导致 NameNode 和 DataNode 的集群id不一致,集群找不到已往数据。所以,格式 NameNode 时,首先删除 停止相关服务,然后一定要先删除data数据和log日志,然后再格式化NameNode。

hadoop102 (NameNode)查看集群ID:

[root@hadoop102 current]# pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current
[root@hadoop102 current]# ls -l
总用量 4140
-rw-r--r--. 1 root root      42 2月  10 09:17 edits_0000000000000000001-0000000000000000002
-rw-r--r--. 1 root root     672 2月  10 10:17 edits_0000000000000000003-0000000000000000011
-rw-r--r--. 1 root root 1048576 2月  10 10:17 edits_0000000000000000012-0000000000000000012
-rw-r--r--. 1 root root      42 2月  10 18:35 edits_0000000000000000013-0000000000000000014
-rw-r--r--. 1 root root 1048576 2月  10 18:35 edits_0000000000000000015-0000000000000000015
-rw-r--r--. 1 root root      42 2月  10 18:50 edits_0000000000000000016-0000000000000000017
-rw-r--r--. 1 root root 1048576 2月  10 18:50 edits_0000000000000000018-0000000000000000018
-rw-r--r--. 1 root root      42 2月  10 19:07 edits_0000000000000000019-0000000000000000020
-rw-r--r--. 1 root root 1048576 2月  10 19:07 edits_inprogress_0000000000000000021
-rw-r--r--. 1 root root     761 2月  10 18:50 fsimage_0000000000000000017
-rw-r--r--. 1 root root      62 2月  10 18:50 fsimage_0000000000000000017.md5
-rw-r--r--. 1 root root     761 2月  10 19:07 fsimage_0000000000000000020
-rw-r--r--. 1 root root      62 2月  10 19:07 fsimage_0000000000000000020.md5
-rw-r--r--. 1 root root       3 2月  10 19:07 seen_txid
-rw-r--r--. 1 root root     208 2月  10 18:34 VERSION
[root@hadoop102 current]# cat VERSION 
#Wed Feb 10 18:34:32 CST 2021
namespaceID=2138677885
clusterID=CID-bf66cf1e-2233-4207-a01a-a73847d6a8aa
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1374872507-192.168.200.102-1612919302312
layoutVersion=-63

hadoop103 (DataNode)查看集群ID:

[root@hadoop103 current]# pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current
[root@hadoop103 current]# ls -l
总用量 4
drwx------. 4 root root  54 2月  10 19:06 BP-1374872507-192.168.200.102-1612919302312
-rw-r--r--. 1 root root 229 2月  10 19:06 VERSION
[root@hadoop103 current]# cat VERSION 
#Wed Feb 10 19:06:24 CST 2021
storageID=DS-4c1dc872-1820-4d20-a975-c604996dab97
clusterID=CID-bf66cf1e-2233-4207-a01a-a73847d6a8aa
cTime=0
datanodeUuid=0b48ca1a-4fdb-48ca-b1df-fc1f243cc57f
storageType=DATA_NODE
layoutVersion=-56
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_41311979

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值