0


Hadoop 分布式集群搭建

HDFS分布式集群搭建

在此之前已经搭建 ZooKeeper 集群,可以参考《部署伪分布式 Hadoop集群》

一、部署规划

1.1 进程规划

守护进程hadoop1/192.168.220.151hadoop2/192.168.220.152hadoop3/192.168.220.153NameNode是是DataNode是是是ResourceManager是是NodeManager是是是Journalnode是是是Zookeeper是是是

1.2 软件规划

软件版本JDKJDK 1.8CentOSCentOS 7ZookeeperApache Zookeeper 3.8.4HadoopApache Hadoop 2.10.2

1.3 用户规划

节点名称用户组用户hadoop1rootroothadoop1rootroothadoop1rootroot

备注

此处的用户组和用户 也最好自己创建用户,如 hadoop

1.4 目录规划

名称路径所有软件目录/usr/local/所有软件目录/usr/local/data

二、 搭建HDFS 分布式集群

2.1 HDFS 集群配置

2.1.1 下载安装 Hadoop

可以参考文章《部署伪分布式 Hadoop集群》:2.2 章节部分

2.1.2 修改 hadoop-env.sh 配置文件

hadoop-env.sh 文件主要配置跟 hadoop 环境相关的变量,这里主要修改 JAVA_HOME的安装目录,具体操作如下所示。

[root@hadoop1 hadoop]# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh # 修改jdk 的安装目录exportJAVA_HOME=/usr/local/jdk

在这里插入图片描述

2.1.3 修改 core-site.xml 配置文件

core-site.xml文件主要配置 Hadoop 的公有属性,具体需要配置的每个属性如下所示。

[root@hadoop1 hadoop]# vim /usr/local/hadoop/etc/hadoop/core-site.xml 

修改内容如下:

<configuration>
<!--这里的值指的是默认的 HDFS 路径,取名为 mycluster-->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs:mycluster</value>
</property>
<!--hadoop 的临时目录,目录需要我们自己创建-->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/data/tmp</value>
</property>
<!--配置 Zookeeper 管理 HDFS-->
<property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
</configuration>

2.1.4 修改 hdfs-site.xml 配置文件

hdfs-site.xml 文件主要配置跟 HDFS 相关的属性,具体需要配置的每个属性如下所示。

[root@hadoop1 local]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml 

修改内容如下:

<configuration>
    <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <!--数据块副本数为3-->
    <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>
    <property>
                <name>dfs.permissions.enabled</name>
                <value>false</value>
        </property>
        <!--权限默认配置为false-->
    <property>
                <name>dfs.nameservices</name>
                <value>mycluster</value>
        </property>
        <!--命名空间,它的值与fs.defaultFS的值要对应,namenode高可用之后有两个namenode,mycluster是对外提供的统一入口-->
    <property>
                <name>dfs.ha.namenodes.mycluster</name>
                <value>nn1,nn2</value>
        </property>
        <!-- 指定 nameService 是 mycluster时的nameNode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可-->
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn1</name>
                <value>hadoop1:9000</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn1</name>
                <value>hadoop1:50070</value>
        </property>
    <property>
                <name>dfs.namenode.rpc-address.mycluster.nn2</name>
                <value>hadoop2:9000</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn2</name>
                <value>hadoop2:50070</value>
        </property>
    <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
        <!--启动故障自动恢复-->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster</value>
        </property>
        <!--指定NameNode的元数据在JournalNode上的存放位置-->
    <property>
                <name>dfs.client.failover.proxy.provider.mycluster</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <!--指定 mycluster 出故障时,哪个实现类负责执行故障切换-->
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/usr/local/data/journaldata/jn</value>
        </property>
        <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
                <name>dfs.ha.fencing.methods</name>
                <value>shell(/bin/true)</value>
        </property>
        <!-- 配置隔离机制,shell通过ssh连接active namenode节点,杀掉进程-->
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/root/.ssh/id_rsa</value>
        </property>
        <!-- 为了实现SSH登录杀掉进程,还需要配置免密码登录的SSH密匙信息 -->
    <property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>10000</value>
        </property>
        <property>
                <name>dfs.namenode.handler.count</name>
                <value>100</value>
        </property>
</configuration>

2.1.5 修改 slaves 配置文件

[root@hadoop1 local]# vim /usr/local/hadoop/etc/hadoop/slaves 

修改如下内容:

hadoop1
hadoop2
hadoop3

在这里插入图片描述

2.1.6 配置文件同步集群其他节点

[root@hadoop1 local]# deploy.sh usr/local/hadoop-2.10.2 /usr/local/ slave
备注

:deploy.sh 是工具脚本,支持将 usr/local/hadoop-2.10.2 文件推送到 slave组当中的 /usr/local 目录下

2.2 启动 zookeeper 集群

[root@hadoop1 local]# runRemoteCmd.sh "/usr/local/zookeeper/bin/zkServer.sh start" all[root@hadoop1 local]# runRemoteCmd.sh "/usr/local/zookeeper/bin/zkServer.sh status" all
备注

:runRemoteCmd.sh 是工具脚本,支持按照分组执行脚本,上面脚本表示在所有服务器执行脚本:/usr/local/zookeeper/bin/zkServer.sh start

在这里插入图片描述

2.3 启动 Journalnode 集群

在集群所有节点分布启动 Journalnode 服务,具体操作如下所示。

[root@hadoop1 local]# runRemoteCmd.sh "/usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode" all[root@hadoop1 local]# jps

在这里插入图片描述

2.4 格式化主节点 NameNode

在 hadoop1 节点(NameNode 主节点)上,使用如下命令对 NameNode 进行格式化。

[root@hadoop1 hadoop]# /usr/local/hadoop/bin/hdfs namenode -format  // NameNode 格式化[root@hadoop1 hadoop]# /usr/local/hadoop/bin/hdfs zkfc -formatZK  // 格式化高可用[root@hadoop1 hadoop]# /usr/local/hadoop/bin/hdfs namenode  // 启动 namenode 节点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5 备用 NameNode 同步主节点元数据

在 hadoop1 节点启动 NameNode 服务的同时,需要在 hadoop2 节点(NameNode 备用节点)上执行如下命令同步主节点的元数据

[root@hadoop2 local]# /usr/local/hadoop/bin/hdfs namenode -bootstrapStandby

在这里插入图片描述

2.6 关闭 Journalnode 集群

hadoop2节点同步完主节点元数据之后,紧接着在hadoop1节点上,按下(Ctrl+C)组合键来结束 NameNode 进程,然后关闭所有节点上面的Jounalnode,进程,具体操作如下所示。

[root@hadoop1 local]# runRemoteCmd.sh "/usr/local/hadoop/sbin/hadoop-daemon.sh stop journalnode" all

在这里插入图片描述

2.7 一键启动 HDFS 集群

如果上面操作没有问题,在 hadoop1 节点上,可以使用脚本一键启动 HDFS 集群所有相关进程

[root@hadoop1 local]# /usr/local/hadoop/sbin/start-dfs.sh 

在这里插入图片描述

2.8 HDFS 集群测试

在浏览器中输入网址 http://hadoop1:50070,通过 Web 界面査看 hadoop1 节点的NameNode 的状态,结果如图 6-2所示。该节点的状态为 active,表示 HDFS 可以通过 hadoop1节点的 NameNode 对外提供服务。

在这里插入图片描述

三、部署 YARN 集群搭建

3.1 修改 mapred-site.xml 配置

mapred-site.xml 文件主要配置跟 MapReduce 相关的属性,这里主要将 MapReduce 的运行环境指定为 YARN ,核心配置如下所示

[root@hadoop1 hadoop]# vim /usr/local/hadoop/etc/hadoop/mapred-site.xml

添加如下内容:

<!--MapReduce以yarn模式运行--><configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>

在这里插入图片描述

3.2 修改 yarn-site.xml 配置

yarn-site.xml 文件主要配置跟 YARN 相关的属性,核心配置如下所示。

[root@hadoop1 hadoop]# vim /usr/local/hadoop/etc/hadoop/mapred-site.xml

添加如下内容:

<configuration><property><name>yarn.resourcemanager.connect.retry-interval.ms</name><value>2000</value></property><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><!--打开高可用--><property><name>yarn.resourcemanager.ha.automatic-failover.enabled</name><value>true</value></property><!--启动故障自动恢复--><property><name>yarn.resourcemanager.ha.automatic-failover.embedded</name><value>true</value></property><!--rm启动内置选举active--><property><name>yarn.resourcemanager.cluster-id</name><value>yarn-rm-cluster</value></property><!--给yarn cluster 取个名字yarn-rm-cluster--><property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property><!--ResourceManager高可用 rm1,rm2--><property><name>yarn.resourcemanager.hostname.rm1</name><value>hadoop1</value></property><property><name>yarn.resourcemanager.hostname.rm2</name><value>hadoop2</value></property><property><name>yarn.resourcemanager.recovery.enabled</name><value>true</value></property><!--启用resourcemanager 自动恢复--><property><name>hadoop.zk.address</name><value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value></property><!--配置Zookeeper地址作为状态存储和leader选举--><property><name>yarn.resourcemanager.address.rm1</name><value>hadoop1:8032</value></property><!--rm1端口号--><property><name>yarn.resourcemanager.scheduler.address.rm1</name><value>hadoop1:8034</value></property><!-- rm1调度器的端口号--><property><name>yarn.resourcemanager.webapp.address.rm1</name><value>hadoop1:8088</value></property><!-- rm1 webapp端口号--><property><name>yarn.resourcemanager.address.rm2</name><value>hadoop2:8032</value></property><property><name>yarn.resourcemanager.scheduler.address.rm2</name><value>hadoop2:8034</value></property><property><name>yarn.resourcemanager.webapp.address.rm2</name><value>hadoop2:8088</value></property><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><!--执行MapReduce需要配置的shuffle过程--><property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value></property><property><name>yarn.nodemanager.vmem-pmem-ratio</name><value>4</value></property></configuration>

3.3 向所有节点同步 YARN 配置文件

在 hadoop1 节点上修改完 YARN 相关配置之后,将修改的配置文件远程复制到 hadoop2节点和 hadoop3 节点,具体操作如下所示。

[root@hadoop1 hadoop]# deploy.sh /usr/local/hadoop/etc/hadoop/mapred-site.xml /usr/local/hadoop/etc/hadoop/ slave
[root@hadoop1 hadoop]# deploy.sh /usr/local/hadoop/etc/hadoop/yarn-site.xml /usr/local/hadoop/etc/hadoop/ slave

在这里插入图片描述

3.4 启动 YARN 集群

YARN HA 的实现依赖于 Zookeeper,所以需要优先启动 Zookeeper 集群。因为前面操作已经启动 Zookeeper 集群,所以该步骤可以跳过。

3.4.1 启动 YARN 集群

在 hadoop1 节点上,使用脚本一键启动 YARN 集群,具体操作如下所示:

[root@hadoop1 hadoop]# /usr/local/hadoop/sbin/start-yarn.sh 

在这里插入图片描述

3.4.2 启动备用 ResourceManager

因为 start-yarn.sh 脚本不包含启动备用 ResourceManager 进程的命令,所以需要在hadoop2 节点上单独启动 ResourceManaggr,具体操作如下所示。

[root@hadoop2 hadoop]# /usr/local/hadoop/sbin/yarn-daemon.sh start resourcemanager

在这里插入图片描述

3.5 YARN 集群测试

3.5.1 shell 命令查看RM状态

如果一个 ResourceManagsr 为 active 状态,另外一个说明 YARN 集群构建成功。
ResourceManager为standby 状态,

[root@hadoop2 hadoop]# /usr/local/hadoop/bin/yarn rmadmin -getServiceState rm1
active
[root@hadoop2 hadoop]# /usr/local/hadoop/bin/yarn rmadmin -getServiceState rm2
standby

在这里插入图片描述

3.5.2 Web 界面查看 YARN 集群

在浏览器中输入网址 http://hadoop1:8088(或者 http://hadoop2:8088),通过web 界面查看 YARN 集群消息,结果如果所示:
在这里插入图片描述

3.5.3 测试 YARN 集群是否可以正常运行 MapReduce程序

为了测试 YARN 集群是否可以正常运行 MapReduce程序,我们以 Hadoop 自带的wordcount示例来进行演示,具体操作如图 6-8所示。

[root@hadoop1 hadoop]# /usr/local/hadoop/bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.2.jar wordcount /test/words.log /test/out

在这里插入图片描述
在这里插入图片描述
至此 HADOOP的搭建基本完成,后续介绍 HADOOP 集群的运维管理


本文转载自: https://blog.csdn.net/slb190623/article/details/141502753
版权归原作者 slb190623 所有, 如有侵权,请联系我们删除。

“Hadoop 分布式集群搭建”的评论:

还没有评论