Hadoop的完全分布式运行模式

本文详细介绍Hadoop集群的搭建过程,包括配置集群分发脚本、SSH免密登录、集群配置及时间同步等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hadoop运行模式包括:本地模式伪分布式模式,以及完全分布式模式
1、本地模式
安装简单,在一台机器上运行服务,几乎不用做任何配置,但仅限于调试用途。没有分布式文件系统,直接读写本地操作系统的文件系统。
2、伪分布式模式
在单节点上同时启动namenode、datanode、jobtracker、tasktracker、secondary namenode等进程,模拟分布式运行的各个节点。配置已经很接近完全分布式。
3、完全分布式模式
正常的Hadoop集群,由多个各司其职的节点构成。

完全分布式运行模式

需求

P.s.:本文准备的三台客户机为:hadoop102hadoop103hadoop104,其中hadoop102已经部署了伪分布式模式

一、编写集群分发脚本xsync

1.目的

为了把第一台客户上的hadoop相关配置文件同步发送给其他两台客户机。

2.需求

循环复制文件到所有节点的相同目录下。

3.需求分析

(1)rsync命令原始拷贝:

rsync -rvl 要拷贝的文件路径 目的用户名@目标主机:目的路径[/新名称]

(2)期望脚本:

xsync要同步的文件名称。

(3)说明

在/home/nanfeng(普通用户名)/bin这个目录下存放的脚本,nanfeng用户可以在系统任何地方直接执行。

3.脚本实现

(1)切换到用户家目录(/home/nanfeng)

cd ~

(2)创建bin目录

mkdir bin

(3)编辑bin目录下的xsync文件

vim bin/xsync

在该文件中编写如下代码:

#!/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 发送文件给另外两台客户机
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname $user@hadoop103(第二台客户机主机名):$pdir
rsync -rvl $pdir/$fname $user@hadoop104(第三台客户机主机名):$pdir

在这里插入图片描述
如果你另外两台客户机的名字为hadoop103hadoop104,也可以编辑为以下内容:

#!/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=103; host<105; host++)); do
        echo ------------------- hadoop$host --------------
        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done

在这里插入图片描述

(4)修改脚本 xsync 具有执行权限

chmod 777 bin/xsync
在这里插入图片描述

(5)调用脚本形式

xsync 文件名称,这样就可以发送文件到对应客户机的对应目录下。

注意:如果将xsync文件放到/home/nanfeng目录下仍然不能实现全局使用,可以将xsync文件移动到/usr/local/bin目录下。

二、SSH免密登录配置

1.目的

为了客户机之间互通更方便,无需目标客户机密码就可和目标客户机互通信息。

2.步骤

在3台客户机上分别做如下操作:

(1)生成公钥和私钥

执行ssh-keygen -t rsa命令,然后敲三个回车,就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)。
在这里插入图片描述

(2)将公钥拷贝到要免密登录的目标机器上

ssh-copy-id hadoop102(本机主机名)
ssh-copy-id hadoop103(第二台客户机主机名)
ssh-copy-id hadoop104(第三台客户机主机名)
在这里插入图片描述
P.s.:具体可参考SSH免密登录配置

三、集群配置

1. 集群部署规划

在这里插入图片描述
为了防止某台客户机的任务量太大,所以要把NameNodeResourceManagerSecondaryNameNode平均分配给3台客户机。

2.配置集群

以下操作的配置文件在:$HADOOP_HOME/etc/hadoop目录下

(1)核心配置文件
配置core-site.xml

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>

在这里插入图片描述

(2)HDFS配置文件
配置hadoop-env.sh

Linux系统中获取JDK的安装路径并复制:echo $JAVA_HOME
在这里插入图片描述
vim hadoop-env.sh修改配置文件中的JAVA_HOME 路径:export JAVA_HOME=/opt/module/jdk1.8.0_144
在这里插入图片描述

配置hdfs-site.xml

vim hdfs-site.xml

在该文件中编写如下配置:

<!-- 指定HDFS的副本数量,不配置则默认为3 -->
<property>
	<name>dfs.replication</name>
	<value>3</value>
</property>

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

在这里插入图片描述

(3)YARN配置文件
配置yarn-env.sh

vim yarn-env.sh修改配置文件JAVA_HOME 路径:export JAVA_HOME=/opt/module/jdk1.8.0_144
在这里插入图片描述

配置yarn-site.xml

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>

在这里插入图片描述

(4)MapReduce配置文件
配置mapred-env.sh

vim mapred-env.sh修改配置文件JAVA_HOME 路径:export JAVA_HOME=/opt/module/jdk1.8.0_144
在这里插入图片描述

配置mapred-site.xml(若配置过伪分布式则跳过此步)

cp mapred-site.xml.template mapred-site.xml,将mapred-site.xml.template复制为mapred-site.xml

编辑配置文件:

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

在这里插入图片描述

3.删除$HADOOP_HOME下的data和logs文件夹

cd $HADOOP_HOME

rm -rf logs/ data/
在这里插入图片描述
原因:格式化NameNode,会产生新的集群id,导致NameNodeDataNode的集群id不一致,集群找不到已往数据。所以,格式NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode

4.在集群上分发配置好的Hadoop配置文件

xsync $HADOOP_HOME
在这里插入图片描述
P.s.:如果不能成功发送到另外两台客户机,你也可以使用scp或者rsync命令。

四、集群单点启动

1.如果集群是第一次启动,需要格式化NameNode

因为给hadoop102配置的NameNode,所以在hadoop102上执行hadoop namenode -format命令。
在这里插入图片描述

2.在hadoop102上启动NameNode

在hadoop102上执行hadoop-daemon.sh start namenode命令,然后执行jps命令看是否启动成功。
在这里插入图片描述

3.在hadoop102、hadoop103以及hadoop104上分别启动DataNode

在hadoop102、hadoop103以及hadoop104上分别执行hadoop-daemon.sh start datanode命令,然后执行jps命令看是否启动成功。

hadoop102:
在这里插入图片描述
hadoop103:
在这里插入图片描述
hadoop104:
在这里插入图片描述

4.web端查看

hadoop102上的NameNode和hadoop102、hadoop103、hadoop104上的DataNode启动成功后,在浏览器地址栏输入hadoop102:50070后即可进入HDFS的web界面。点击Datanodes即可看到启动的3个DataNode
在这里插入图片描述
P.s.:若NameNode显示数量不对,可试试在hadoop102(NameNode所在的客户机)上删除$HADOOP_HOME下的datalogs文件夹,并重新格式化一下NameNode

5.思考:每次都一个一个节点启动,如果节点数增加到1000个怎么办?

早上来了开始一个一个节点启动,到晚上下班刚好完成,下班? 所以接下来我们会讲到群起集群。

五、群起集群

1. 配置slaves

在$HADOOP_HOME/etc/hadoop目录下,执行vim slaves命令,在slaves文件中增加如下内容:

#三台客户机的主机名
hadoop102
hadoop103
hadoop104

在这里插入图片描述

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

2.同步所有节点的slaves配置文件:

在$HADOOP_HOME/etc/hadoop目录下,执行xsync slaves命令。
在这里插入图片描述
P.s.:如果不能成功发送到另外两台客户机,你也可以使用scp或者rsync命令。

3.启动集群

(1)如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除所有节点上的data和logs数据)

在hadoop102(NameNode所在的主机)上执行hadoop namenode -format命令。

P.s.:因为上面集群单点启动时格式化过NameNode,所有跳过此步。

(2)启动HDFS

在hadoop102上执行start-dfs.sh命令,启动HDFS,然后在各节点执行jps命令看是否启动成功。

hadoop102:
在这里插入图片描述
hadoop103:
在这里插入图片描述
hadoop104:
在这里插入图片描述
P.s.:因为上面集群单点启动时已经启动了HDFS,所以需要先关闭。在hadoop102(NameNode所在的主机)上执行hadoop-daemon.sh stop namenode,然后分别在hadoop102、hadoop103以及hadoop104上分别执行hadoop-daemon.sh stop datanode命令。

(3)启动YARN

在hadoop103(ResourceManager所在主机)上执行start-yarn.sh命令,启动YARN,然后在各节点执行jps命令看是否启动成功。

hadoop102:
在这里插入图片描述
hadoop103:
在这里插入图片描述
hadoop104:
在这里插入图片描述
注意NameNodeResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN

(4)Web端查看

在浏览器地址栏输入hadoop102(NameNode所在主机):50070,查看HDFS。
在这里插入图片描述
在浏览器地址栏输入hadoop104(SecondaryNameNode所在主机):50090,查看SecondaryNameNode
在这里插入图片描述
在浏览器地址栏输入hadoop103(ResourceManager所在主机):8088,查看YARN
在这里插入图片描述

六、集群启动/停止方式总结

1. 各个服务组件逐一启动/停止

(1)分别启动/停止HDFS组件

hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode

(2)启动/停止YARN

yarn-daemon.sh start / stop resourcemanager / nodemanager

2. 各个模块分开启动/停止

(1)整体启动/停止HDFS

start-dfs.sh / stop-dfs.sh

(2)整体启动/停止YARN

start-yarn.sh / stop-yarn.sh

P.s.:如果NameNodeResourceManager在一个节点上,则可在那个节点上使用start-all.sh / stop-all.sh启动/停止HDFS和YARN。

七、集群时间同步

时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。
在这里插入图片描述
配置时间同步具体实操

1. 时间服务器配置(必须root用户)

P.s.:下面是在hadoop102上操作的。

(1)检查ntp是否安装

rpm -qa|grep ntp
在这里插入图片描述

(2)修改ntp配置文件

vim /etc/ntp.conf

修改内容如下:

a)修改1(授权192.168.20.0-192.168.20.255网段上的所有机器可以从这台机器上查询和同步时间)

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap改为restrict 192.168.20.0 mask 255.255.255.0 nomodify notrap

b)修改2(集群在局域网中,不使用其他互联网上的时间)
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 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
c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)

在配置文件末尾添加:

server 127.127.1.0
fudge 127.127.1.0 stratum 10

在这里插入图片描述

(3)修改/etc/sysconfig/ntpd 文件

vim /etc/sysconfig/ntpd

增加内容如下(让硬件时间与系统时间一起同步):

SYNC_HWCLOCK=yes
在这里插入图片描述

(4)重新启动ntpd服务

service ntpd restart
在这里插入图片描述

(5)设置ntpd服务开机启动

chkconfig ntpd on

2. 其他机器配置(必须root用户)

(1)在其他机器配置10分钟与时间服务器同步一次

crontab -e

编写定时任务如下:

*/10 * * * * /usr/sbin/ntpdate hadoop102
在这里插入图片描述
P.s.:Linux中crontab是用来定期执行程序的命令。

(2)修改时间服务器时间

在hadoop102(时间服务器的主机)上执行date -s "时间的字符串"命令。
在这里插入图片描述

(3)十分钟后查看机器是否与时间服务器同步

date命令可查看本机时间。
在这里插入图片描述
说明:测试的时候可以将10分钟调整为1分钟,节省时间。改为一分钟同步即把第一步编写定时任务改为:* * * * * /usr/sbin/ntpdate hadoop102

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值