开源大数据——Hadoop集群完全分布式的搭建

说明:此模式是在伪分布模式的基础上搭建,hadoop的主目录为/opt/software/hadoop-2.6.5(),所有的操作都是在root用户执行的。也没有做ssh安装、Java JDK、Hadoop的解压安装的步骤,详情请查看前面的博客。
开源大数据Hadoop伪分布式搭建及虚拟机的创建

一、分布式集群的网络和节点规划

⑴网络规划

主机名

IP地址节点类型
hadoop100192.168.36.128 master
hadoop101192.168.36.129slave1
hadoop102192.168.36.130slave2

⑵ 节点规划

服务hadoop100hadoop101hadoop102
NameNode
Secondary NameNode
DataNode
ResourceManager
NodeManager

二 、分布式集群的环境准备

⑴克隆虚拟机

在进行克隆前我们需要先关闭hadoop的全部进程,然后删除之前实验中产生的文件。
 

stop-all.sh
rm -rf hdfs/ logs/ tmp/ input/ output/

在伪分布模式的基础上,前面已经将创建好用户、安装ssh服务、安装配置Java环境等,所以把hadoop100作为Master节点,克隆两台虚拟机作为slave节点(分别是hadoop101、hadoop102)。
关闭hadoop100虚拟机进行虚拟机完整克隆,克隆出hadoop101与hadoop102.(右键hadoop100虚拟机——管理——克隆——当前状态——创建完整克隆——给定对应虚拟机名称与存储位置)

操作过程如下:
需要在关闭虚拟机的情况下去克隆。




完整克隆和链接克隆的区别在于,链接克隆,如果母机宕机,克隆后的虚拟机也不可用。

⑵网络配置、修改主机名、配置网络映射

①配置IP

根据集群网络IP规划,分别将IP,主机名,网络映射配置好。

IP地址主机名
192.168.36.128 master
192.168.36.129slave1
192.168.36.130 slave2


然后根据你规划好的IP地址去修改克隆虚拟机的IP
输入命令:

vi /etc/sysconfig/network-scripts/ifcfg-ens33

将hadoop101和hadoop102分别修改为192.168.36.129192.168.36.130
然后分别重启网络后查看

service network restart #重启网络
ifconfig



 

②配置主机名

(三台虚拟机都需要执行)分别修改虚拟机的主机名称为hadoop100、hadoop101与hadoop102
有两种方法修改:

方法一

hostnamectl set-hostname 当前主机名称
例如:hostnamectl set-hostname hadoop101
           hostnamectl set-hostname hadoop102

方法二

vi /etc/hostname

 将名字修改即可

③配置网络映射

配置网络映射 /etc/hosts

vim /etc/hosts

在文件最后添加 ip地址 主机名(每一台虚拟机上都要配置,如下三行都要添加
192.168.36.128     hadoop100
192.168.36.129     hadoop101
192.168.36.130     hadoop102


最后需要我们重启网络

service  network  restart

 然后三台虚拟机可以测试一下网络是否正常
输入命令:ping www.baidu.com     然后Ctrl+c可以停止测试

⑶关闭防火墙

(克隆前已经关闭,则克隆后也已经关闭,所以不需要重复)
查看防火墙状态:systemctl status firewalld.service

原因:下面需要把宿主机上Linux的安装包(jdk和hadoop)传到虚拟机,不关防火墙无法传入
关闭防火墙(stop)

systemctl stop firewalld.service(关闭防火墙)
systemctl disable firewalld.service(禁用防火墙)
systemctl status firewalld.service(查看防火墙)

⑷进行集群间的免密登录

目的:通过ssh 免密码登录到hadoop101和hadoop102机器
 

如果原来已经设置过免密登录的,那么克隆后也不需要重复操作,此步骤可跳过▲到▲间的操作
可以查看是否设置:

ssh hadoop101
ssh localhost

不需要输入密码,即已设置完成 

▲如果原需要输入密码,则进行免密设置:

首先创建密钥对,产生公钥与私钥对

ssh-keygen -t rsa

注意:执行这个命令以后,需要连续按 3次回车键回到 linux 命令行才表示这个操作执行 结束, 在按回车的时候不需要输入任何内容,出现下列代码,表示成功

执行以后会在~/.ssh目录下生产对应的公钥和秘钥文件

然后将本机的公钥复制到localhost中

ssh-copy-id localhost

运行




然后检验是否需要输入密码,ssh +自己的主机名称

ssh hadoop101
ssh localhost

运行


▲可以看到我们不需要再输入密码,则表示我们的免密登录设置成功

 三台虚拟机都需要执行免密设置

(三台虚拟机都执行)将公钥追加到到authorized_keys文件中并赋予authorized_keys 文件600权限

//这行命令的作用是将当前用户的公钥 (id_rsa.pub) 添加到 SSH 的 authorized_keys 文件中,以便这个公钥可以被用于无密码登录该服务器。
at ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
//这行命令是将 authorized_keys 文件的权限设置为只有文件的所有者能够读写,其他人没有任何权限。这是为了确保文件的安全性,防止未经授权的用户访问或修改这个文件。
chmod 600 ~/.ssh/authorized_keys

 解释:
第一行命令是将当前用户的公钥追加到 SSH 的 authorized_keys 文件中,允许通过该公钥登录。 第二行命令是设置 authorized_keys 文件的权限,确保文件只能被文件拥有者读取和修改,提升安全性。

 (只在hadoop100下进行)将authoized_keys传输到其他节点的~/.ssh/目录下
为了在多台服务器之间实现无密码登录。

hadoop101 服务器上设置相同的公钥认证:
将本地服务器 /root/.ssh/authorized_keys 文件复制到远程服务器 hadoop101 的 /root/.ssh/ 目录中。

scp /root/.ssh/authorized_keys root@hadoop101:/root/.ssh/

 在 hadoop102 服务器上设置相同的公钥认证:
将本地服务器的 /root/.ssh/authorized_keys 文件复制到远程服务器 hadoop102/root/.ssh/ 目录中

scp /root/.ssh/authorized_keys root@hadoop102:/root/.ssh

运行结果:

查看权限:

ls -l ~/.ssh/authorized_keys

然后就可以通过ssh 免密码登录到hadoop101和hadoop102机器了 

⑸启动Hadoop集群

①在hadoop100(namenode所在节点)中进行格式化操作

注意:如果已经格式化过的话,千万千万不需要再次格式化,不然后面会报错,因为重复格式化会导致DataNode的ID发生了变化,从而与NameNode的ID不同。
(如果后面报错了,也有解决办法,不慌)

 前提:在已经安装配置Hadoop集群情况下
已经做过hadoop伪分布式的就已经安装过了
安装教程在上一期博客:
Hadoop启动集群子节点后缺失DataNode节点解决方法

hdfs namenode -format
y

如果在后面的日志信息中能看到这一行,则说明namenode格式化成功
②启动集群

格式化后即可启动集群的节点,可以分别启动HDFS和YARN

start-dfs.sh
start-yarn.sh

也可以一起启动:

start-all.sh

我这里演示分别启动:

③查看各个节点的进程情况

⒈在hadoop100进行:jps

成功代码如下:

错误代码如下:

缺失DataNode文件
解决办法我单独另写一篇博客:
Hadoop启动集群子节点后缺失DataNode节点解决方法

⒉登录hadoop101查看虚拟机hadoop101:
ssh hadoop101  //登录hadoop101
jps    //查看
exit    //退出hadoop101
 
⒊登录hadoop102查看虚拟机hadoop102:
ssh hadoop102    //登录hadoop101
jps    //查看
exit    //退出

 

如上述结果即为成功。
此次配置应出现如下情况,hadoop100节点包含全部进程,hadoop101与hadoop102节点中只有DataNode与NodeManager。

⑹登录集群web页面查看集群信息

注意:根据自己配置的IP地址查看

访问HDFS:50070

打开浏览器访问 http://此处替换为hadoop100的IP地址:50070
例如:http://192.168.92.100:50070
(我的:http://192.168.36.128:50070)

访问YARN:8088

打开浏览器访问 http://此处替换为hadoop100的IP地址:8088
例如:http://192.168.92.100:8088
(我的:http://192.168.36.128:8088)

③关闭集群

这样我们就已经完成了完全分布式的搭建,在实验结束后我们需要关闭集群。
关闭集群命令为:stop-all.sh 

三、实验练习

实验任务:在伪分布模式上进行WordCount官方案例
(WordCount官方案例是指在WordCount项目中,提供的实际应用示例或案例研究。WordCount是一个常见的数据处理任务,尤其在编程和数据分析领域。它通常涉及统计一个文本文件或字符串中每个单词出现的频率。)

(1)在本机/opt/software/hadoop-2.6.5上创建input文件,并写入任意内容。

如果没有进入路径/opt/software/hadoop-2.6.5

所以先进入hadoop-2.6.5文件夹,再创建写入任意内容的input文件

cd
cd /opt/software/hadoop-2.6.5
echo 'aaa bbb ccc aaa bbb aaa'>input

(2)将input文件上传至集群,并放置在集群的根目录/下。

首先需要先开启hadoop集群服务:start-all.sh
然后将input文件上传至集群,并放置在集群的根目录/下:hdfs dfs -put input /
这条命令是用来将本地文件系统中的文件上传到HDFS(Hadoop Distributed File System)中。
hdfs dfs:这是Hadoop提供的命令行工具,用于操作HDFS。
-put:这个选项用于将本地文件或目录上传到HDFS。
input:这是本地文件系统中要上传的文件或目录的路径。
/:这是HDFS中的目标路径,即文件上传到HDFS根目录下。

start-all.sh
hdfs dfs -put input /

(3)执行share目录下的MapReduce程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /input output

代码解释
hadoop jar:这是用来运行一个JAR文件的Hadoop命令。JAR文件通常包含了要执行的程序和它的依赖。
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar:这是JAR文件的路径。这个JAR文件包含了Hadoop MapReduce的示例程序。在这个路径中,hadoop-mapreduce-examples-2.6.5.jar 是示例程序的JAR文件,2.6.5 是版本号。
wordcount:这是JAR文件中的一个示例程序的名称。在这里,它指的是一个WordCount程序,它计算文本文件中每个单词的出现次数。
input:这是输入数据在HDFS中的路径。
wordcount 程序会从这个路径读取数据。
output:这是程序运行的输出路径。在HDFS中,程序的结果会被写入到这个路径下。

 这条命令的意思是:使用 Hadoop 的 MapReduce 示例 JAR 文件中的 WordCount 程序,对 HDFS 中 input 路径下的文件进行处理,并将结果写入到 HDFS 的 output 路径下。

如果没有进入路径/opt/software/hadoop-2.6.5,就会报如下错误:

如果进入了路径 /opt/software/hadoop-2.6.5就不会报错:
成功执行share目录下的MapReduce程序

⑷查看集群上的输出结果

hdfs dfs -cat /user/root/output/*

代码解释:
hdfs dfs:这是Hadoop提供的命令行工具,用于操作HDFS。
-cat:这个选项用于显示指定文件或目录的内容到标准输出(通常是终端或命令行窗口)。 /user/root/output/*:这是要显示的文件路径,其中 * 是一个通配符,表示这个路径下的所有文件。 所以,hdfs dfs -cat /user/root/output/* 这条命令的意思是:显示HDFS路径 /user/root/output/ 下所有文件的内容

这个时候会出现一个错误代码,表示没有这样的文件或目录:

说明 HDFS 中没有创建该目录,那么我们就创建一个目录,如下操作 

①创建 /user/root 目录

首先需要在 HDFS 中创建 /user/root 目录:

hdfs dfs -mkdir -p /user/root
②上传输入文件到 HDFS

将本地的 input 文件上传到 HDFS

hdfs dfs -put input /user/root/input
 ③验证上传的文件

检查文件是否成功上传:

hdfs dfs -ls /user/root/input

④重新运行 WordCount 任务

确认文件存在后,重新运行你的 Hadoop WordCount 任务:
 

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /user/root/input /user/root/output


 ⑤查看集群上的输出结果

hdfs dfs -cat /user/root/output/*


当代运行结束后,出现上述代码,则表示成功完成WordCount官方案例,正确输出每个单词出现的频率

⑥关闭hadoop进程

别忘了关闭hadoop进程:stop-all.sh

少年时驰骋的风,比黄金都珍贵。
我在这里,祝各位看官永远少年。永远赤诚。永远年轻,永远渴望踏上新的征程!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值