Hadoop完全集群模式的搭建

1、需要的环境
三台一样的机器(只是其中的进程不一样) 其中nameNode和secondaryNode不要放在同一台机器上 而ResourceManager也需要独立放置在一台机器上

2、虚拟机相关的配置
我们需要三台虚拟机 首先从base机(最原始的系统机)克隆一台虚拟机 然后在这台虚拟机上把基本的配置全都做好 然后再通过这台虚拟机 克隆出另外的两台。
基础配置:
*修改root密码
*ssh的安装
*把root的ssh权限放开 -->集群的时候必须要打开
*修改hostname
*修改hosts
*安装jdk和hadoop软件
*配置静态IP -->这一步先不要做 在克隆完剩下的两台虚拟机之后再做(因为虚拟机默认采用DHCP分配IP 所以每次启动虚拟机 IP都可能不一样 我们进行连接也十分麻烦 所以需要设置静态IP 这样IP以后都不会改变)

这里相关的操作截图如下:
修改root密码 :使用sudo passwd root 命令 即可修改root密码
在这里插入图片描述
安装ssh : apt-get install openssh-server 图片中的su是切换成root用户 如果想切换成普通用户 使用 su - 用户名
在这里插入图片描述
放开root的ssh权限 : 要放开的是root用户 所以我们需要切换到root用户 也就是上一步的 su 命令,然后再对/etc/ssh中的ssh_config文件进行编辑
在这里插入图片描述
然后在这个文件中 将原本禁止权限的修改成yes(注释掉原本的这行 插入新的一行)
在这里插入图片描述
修改hostname和hosts文件 : 进入/etc 编辑其中的hostname文件和hosts文件 把主机名设置成hadoop2
在这里插入图片描述
安装jdk和Hadoop软件:
在/home/用户名 的这个文件夹中(就是本用户的文件夹) 创建一个software文件夹 用于存放我们的jdk和Hadoop软件 mkdir software
在这里插入图片描述
使用xftp工具将jdk和hHadoop软件上传到此虚拟机中在这里插入图片描述
在这里插入图片描述
可以看到 我们已经成功的将jdk和Hadoop传入到了我们自己创建的software文件夹中
-
传入这两个压缩文件之后 下一步就是解压它们 将他们解压到 /usr/local目录中 tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/local tar -zxvf hadoop-2.6.4.tar.gz -C /usr/local
在这里插入图片描述
在这里插入图片描述
进入/usr/local目录 查看是否成功解压到此目录
在这里插入图片描述
确实已经解压成功了 但是jdk和Hadoop的名字都太长了 后面还会用到 所以将他们改的简单一点 改名的命令是 mv jdk1.8.0_161/ java mv hadoop-2.6.4/ hadoop 将他们分别改为java和hadoop,方便使用
在这里插入图片描述
然后我们需要修改他们的用户和用户组 chown -R jee:jee hadoop chown -R jee:jee java 注意 这里的jee:jee 是我的用户名:组名
在这里插入图片描述
这样我们的hadoop和jdk算是安装好了 也存放到了我们指定的位置 下一步 我们需要配置jdk和hadoop环境变量 注意 环境变量是和用户相关的 我们不应该在root用户下配置 而是需要切换到我们当前的用户中 su - jee
要配置我们的jdk 我们需要编辑文件 ~/.bashrc 在这个文件的开头加入

export JAVA_HOME=/usr/local/java
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin

要配置hadoop 我们同样需要编辑文件~/.bashrc 在这个文件中加入

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

在这里插入图片描述
在这里插入图片描述
配置环境变量完成后 需要使用source ~/.bashrc 命令 让这个配置文件生效 然后我们再查看我们的jdk和hadoop版本 看是否已经可用
在这里插入图片描述
由上图我们可以就得知我们的jdk和hadoop的环境已经配置好了 由此 我们的第一台机器的配置已经全部完成 接下来我们对这台虚拟机进行克隆即可!
在这里插入图片描述
将三台虚拟机都启动起来 分别查看他们的Ip地址 ifconfig 然后使用xshell(这里使用的是secureCRT)工具连接上这三台虚拟机
在这里插入图片描述
接下来我们需要修改集群机器的一些配置 :
*静态IP的配置 三台虚拟机都需要配置静态IP
*hostname和hosts文件的修改 因为三台虚拟机需要不同的机器名
在这里插入图片描述
这里可以看到虽然是三台不一样的虚拟机 但是他们的机器名都是一样的 都是我们第一台虚拟机设置的hadoop2(因为后面两台都是从第一台克隆的 所以机器名也是一样的)
*配置ssh的无密码登录(重要) 为什么重要下面会说
我们先来修改每台机器的机器名 方便我们区别这三台虚拟机 不然每台都是hadoop2 避免混淆 做法和上面的修改hostname和host做法一致 vi hostname vi hosts
在这里插入图片描述
在这里插入图片描述
这样我们的三台机器名就分别设好了 叫hadoop2 hadoop3 hadoop4 (hadoop1在我测试的时候 已经给测试机器取名了)
在这里插入图片描述
接下来 我们就需要修改每台虚拟机的静态IP (我现在这三台用的是桥接模式的IP地址 不是很好 以后会换成NAT模式 这里是桥接模式下的操作 如果有时间 我会改成NAT模式再一次进行修改)

先将网络服务关闭 service network-manager stop

然后我们需要进入到/etc/network目录中,修改里面的interfaces文件 vi interfaces
在这里插入图片描述
我们需要在这个文件尾部加入我们自己配置的一些参数

auto ens33  
iface ens33 inet static   //static表示静态的 全局访问
address 192.168.124.21   //这里的address表示我们给这台主机设置的静态IP 三台分别设置21 22 23.
netmask 255.255.255.0   //子网掩码  默认都是255.255.255.0
gateway 192.168.124.1 	//网关
dns-nameservers 192.168.124.1 //DNS名称服务器 和网关一致即可

我们这里的这些参数不是随便配的 我们需要查看本机的IP地址 才能正确配置 ,我们配置的静态IP必须和我们的本地IP地址在一个网段下 网关也必须一致 才能正常通信(桥接模式 NAT模式做法不一致
在这里插入图片描述
在这里插入图片描述
重启我们的网络服务 /etc/init.d/networking restart 然后我们可以查看一下这台虚拟机的IP地址 是不是和我们配置的一样,如果一样再测试一下网络是否已经连上 使用 ping www.baidu.com
在这里插入图片描述
可以看到 我们已经设置静态IP成功 并且网络也没有问题 另外两天虚拟机也是一样的做法 只是静态IP不一样而已

下一步我们就来配置 ssh无密码登录

为什么我们要配置这个ssh无密码登录呢  
ssh无密码登录 说直白点就是ssh协议连接机器时不需要密码
NameNode-->管理DataNode  NameNode存了元数据 需要去访问DataNode
ResourceManager-->YARN的大管家  需要去访问NodeManager
他们之间的访问 是通过ssh协议完成的   在正常的运行中 ssh协议是需要密码的    我们现在配置的是完全集群模式  我们不可能还去手动输入密码 
所以我们设置ssh无密码登录  不配置的话 集群是有问题的
我们应该怎么样来配置ssh无密码登录呢
我们是将NameNode存放在hadoop2中  SecondaryNode存放在hadoop4中 将ResourceManager存放在hadoop3中

NameNode和SecondaryNode不要部署在一台服务器上 因为在实际的部署环境中 需要Secondary去做NameNode的HA(高可用) 
ResourceManager需要的内存比较大 所以它也需要单独部署在一台服务器上

hadoop2中有 : NameNode + +DataNode + NodeManager
hadoop3中有 : DataNode  + ResourceManager + NodeManager
hadoop4中有 : DataNode + NodeManager + SecondaryNode

NameNode需要去访问DataNode  所以存放NameNode的虚拟机访问存放了DataNode的虚拟机是不需要密码的
所以hadoop2 ssh-->hadoop2、 hadoop3、hadoop4  需要配置无密码登录

ResourceManager 需要访问 NodeManager  所以存放ResourceManager的虚拟机访问存放了NodeManager的虚拟机不需要密码
所以hadoop3 ssh--> hadoop3、hadoop2、hadoop4 需要配置无密码登录

*步骤

(1) 生成ssh访问的密钥
(2) 拷贝密钥到其他机器上面,就实现了无密码登录(如果其他机器中有本机的ssh密钥 那么本机访问其他机器 就可以不用密码登录了)

要想生成本机的密钥 我们需要进入本机的 /home/用户名/.ssh  这个目录下,  新的虚拟机没有.ssh这个目录 这是因为我们没有使用ssh连过本机  如果没有的话 我们需要 ssh localhost 使用ssh连接一下本机
这样就会生成一个.ssh目录了  我们再进入这个目录下 使用ssh-keygen -t rsa命令 生成密钥

注意:密钥适合用户相关的 需要切换到普通用户 而不是使用root用户生成 不一样的用户 ssh密钥是不一样的 我们需要切换到我们普通用户
在这里插入图片描述
可以看到我们没有.ssh这个目录 这时我们需要 ssh localhost 让他访问一下本机 生成一个.ssh目录
在这里插入图片描述
接下来 我们就进入.ssh目录下 生成我们的ssh密钥 ssh-keygen -t rsa
在这里插入图片描述
可以看到 生成了两个文件 一个私钥 一个公钥 我们拷贝这个公钥去其他机器即可 ssh-copy-id 目标机器的IP地址ssh-copy-id 192.168.124.22
在这里插入图片描述
然后我们去192.168.124.22这个机器下 查看是否已经有了公钥
在这里插入图片描述
当存在authorized_keys这个文件时就代表我们的复制公钥成功了 其他需要公钥的机器 也是一样的做法 将ssh无密码连接都配置好。

不要忘记给本机也要复制一个公钥  本机通过ssh访问本机 也是需要ssh公钥的!!!

我们ssh无密码连接做完之后 我们需要修改一下hosts文件 因为以前的修改不全面 只修改了名称 我们还需要修改一下它的IP地址 并且把其他两台虚拟机的IP加上去 让他能找到其他两台的IP地址 (三台都要做)
在这里插入图片描述
在这里插入图片描述
然后重启我们这三台虚拟机 可以发现我们使用pingssh命令 连接这三台机器的hostname 都可以成功 这说明我们的hosts文件和hostname文件中配置的文件名和IP生效了
在这里插入图片描述
在这里插入图片描述
可以看到 使用ssh连接也不需要我们输入密码了

我们做上述的这些操作  就是为了可以使用 ssh hostname--->直接登录集群的机器

hadoop的配置文件:
在这里插入图片描述
接下来我们需要进行集群的配置了:
*(1) 现在一台机器上完成配置
*(2) 把这一台机器上的所有配置分发到其他机器

按照这上图的要求 我们去一一修改这些文件的配置
修改 core-site.xml 进入/usr/local/hadoop/etc/hadoop目录 修改其中的core-site.xml
在这里插入图片描述
core-site.xml中加入如下信息

<configuration>
	<!--配置Hadoop中NameNode存放元数据信息的目录-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/data</value>
	</property>
<!--配置Hadoop NameNode节点 value中写的是存放NameNode节点的机器名 hadoop2-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop2:9000</value>
	</property>
</configuration>

在这里插入图片描述
配置hadoop-env.sh,将JAVA_HOME修改成下图所示
在这里插入图片描述
配置hdfs-site.xml 在这个文件中插入 vi hdfs-site.xml

<configuration>
<property>
		<!--设置副本的个数  因为我们使用了三台虚拟机 所以设为3-->
        <name>dfs.replication</name>
        <value>3</value>
</property>
<property>
		<!--设置SecondaryNode的位置  因为我们将SecondaryNode存放在第三台虚拟机中 所以value中写的是第三台主机的hostname hadoop4-->
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop4:50090</value>
</property>
<property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/data/dfs/name</value>
</property>
<property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/data/dfs/data</value>
</property>
</configuration>

在这里插入图片描述
修改slaves文件 将我们的三台虚拟机的名字加进去(这表示我们的DataNode运行在哪几台节点上) vi slaves
在这里插入图片描述
进入 yarn-env.sh -->修改JAVA_HOME配置
在这里插入图片描述
修改yarn-site.xml vi yarn-site.xml 在其中插入以下的内容

<!--reducer获取数据的方式-->
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<!--指定yarn的ResourceManager的地址  我们将ResourceManager存放在第二台虚拟机 所以value为第二台虚拟机的hostname hadoop3-->
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop3</value>
</property>

在这里插入图片描述
配置mapred-env.sh–>修改JAVA_HOME配置
在这里插入图片描述
mapred-site.xml.template修改为mapred-site.xml mv mapred-site.xml.template mapred-site.xml,然后将以下内容插入到mapred-site.xml中

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

至此 我们就已经完成这台机器上面的配置 接下来我们只需要将这台机器上的配置分发到另外两台机器上去 , 使用这这条命令

rsync -rvl /usr/local/hadoop/etc/hadoop/* jee@hadoop3:/usr/local/hadoop/etc/hadoop
其中/usr/local/hadoop/etc/hadoop/* 表示这个目录中的所有文件
jee@hadoop3 中 jee是指当前的用户名hadoop3是值虚拟机的名字

在这里插入图片描述
这样就成功的把这个目录下的所有配置分发到了其他两台虚拟机中 可以去其他两台虚拟机中查看相关的文件是否被配置好了

至此 我们的集群就已经全部搭建完成了!!!

接下来就是运行一下这个集群 看是否有问题

我们创建了三台虚拟机  hadoop2、hadoop3、hadoop4
hadoop2中有NameNode+DataNode+NodeManager
hadoop3中有DataNode+ResourceManager+NodeManager
hadoop4中有SecondaryNode+DataNode+NodeManager
我们配置了HDFS和YARN  所以 要启动这个集群 我们只需要启动HDFS和YARN即可
启动HDFS : 在NameNode这个节点执行启动命令即可(在启动之前需要格式化我们的NameNode!!!)
启动YARN : 在ResourceManager这个节点执行启动命令即可

我们来测试一下 : 先启动格式化我们的NameNode 在/usr/local/hadoop/bin目录下 执行./hdfs namenode -format
在这里插入图片描述
在这里插入图片描述
格式化NameNode完成之后 我们就可以启动HDFS了 先启Hdfs,再启Yarn。 启动HDFS在/usr/local/hadoop/sbin目录下 执行 ./start-dfs.sh
在这里插入图片描述
再在ResourceManager节点上启动我们的YARN 在/usr/local/hadoop/sbin目录下 执行 ./start-yarn.sh
在这里插入图片描述

这样 我们的集群就启动起来了 我们可以在每台虚拟机上使用jps命令查看这台虚拟机上的进程

如果正常启动 那么
第一台机器上的进程:NameNode+DataNode+NodeManager
第二台机器上的进程:ResourceManager+DataNode+NodeManage
第三台机器上的进程:SecondaryNode+DataNode+NodeManage

第一台机器:
在这里插入图片描述
第二台机器:
在这里插入图片描述
第三台机器:
在这里插入图片描述

从这三台机器的进程来看 我们的过程没有错误

查看web页面:http://nameNode机器的IP:50070/

在这里插入图片描述

如果我们想停集群
先停Yarn,再停Hdfs.
停Yarn:sbin/stop-yarn.sh
停Hdfs:sbin/stop-dfs.sh

以上就是Hadoop搭建完全集群模式的所有步骤!

!!!!注意 以上方式搭建起来的集群其实是有bug的 它其实只启动了一个DataNode
在这里插入图片描述

原因分析:
配置hosts中localhost为本机Ip。datanode连接到namenode上识别到localhost,又回头重连自己。
解决办法:
删除hosts配置的localhost(集群中的每台机器都需要做)

在这里插入图片描述
然后我们再去Web页面中查看一下Node的个数
在这里插入图片描述

如果在本机访问虚拟机域名hadoop2/hadoop3/hadoop4,报无法识别:

解决办法:
C:\Windows\System32\drivers\etc 下的hosts文件
添加下面信息:
192.168.1.17 hadoop102
192.168.1.18 hadoop103
192.168.1.19 hadoop104
发布了53 篇原创文章 · 获赞 0 · 访问量 1947

猜你喜欢

转载自blog.csdn.net/XXuan_/article/details/104705994