您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

Hadoop高可用集群部署

时间:2023-11-07 14:06:54  来源:微信公众号  作者:IT那活儿

背景

生产中Hadoop分布式集群中可能存在着单点故障问题,如果Namenode宕机或是软硬件升级,集群将无法使用,所以进行搭建高可用的来消除单点故障。

Hadoop介绍

Hadoop集群一般为一个NameNode和ResourceManager,但在实际生产环境中,若恰好具有NameNode和ResourceManager的节点出现故障,那么整个Hadoop集群将会崩溃,这是因为在HDFS中NameNode是系统的核心节点,ResourceManager负责整个系统的资源管理和分配。

为了解决单点故障问题,在Hadoop2后中引入了高可用机制,支持NameNode和ResourceManager一个主节点和一个备用节点,而在Hadoop3中继续对其进行了优化和提升,它支持一个主节点和多个备用节点。所谓高可用(High AvAIlability, HA)就是7*24 小时不中断服务,消除单点故障。

Hadoop HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA,可以通过配置多个NameNode和ResourceManager(Active/Standby)实现在集群中的热备来解决上述问题。

环境准备:

Hadoop高可用集群部署图片

节点相关进程如下:

Hadoop高可用集群部署图片

 

 

HDFS和YARN HA集群搭建

3.1 下载hadoop安装包

官网https://hadoop.Apache.org/下载hadoop 3.3.0安装包解压至/usr/local下3台机器需修改的配置文件目录为/usr/local/hadoop/etc/hadoop下。

3.2  hadoop.env

export JAVA_HOME=/usr/local/jdk #配置jdk路径
#添加两行
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root

3.3 core-site.xml

<?xml versinotallow="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- hdfs分布式文件系统名字/地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<!--存放namenode、datanode数据的根路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
<!-- 存放journalnode数据的地址 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/tmp/jn</value>
</property>
<!-- 列出运行 ZooKeeper 服务的主机端口对 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop:2181,k8s-2:2181,k8s-3:2181</value>
</property>
</configuration>

3.4 hdfs-site.xml

<?xml versinotallow="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
  Unless required by Applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/usr/local/hadoop/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/usr/local/hadoop/dfs/data</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/hadoop/dfs/journalnode</value>
        <description>The path where the JournalNode daemon will store its local state.</description>
    </property>
    <property>
        <name>dfs.nameservices</name>
        <value>ns</value>
        <description>The logical name for this new nameservice.</description>
    </property>
    <property>
        <name>dfs.ha.namenodes.ns</name>
        <value>nn1,nn2,nn3</value>
        <description>Unique identifiers for each NameNode in the nameservice.</description>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.ns.nn1</name>
        <value>hadoop:8020</value>
        <description>The fully-qualified RPC address for nn1 to listen on.</description>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.ns.nn2</name>
        <value>k8s-2:8020</value>
        <description>The fully-qualified RPC address for nn2 to listen on.</description>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.ns.nn3</name>
        <value>k8s-3:8020</value>
        <description>The fully-qualified RPC address for nn3 to listen on.</description>
    </property>
    <property>
        <name>dfs.namenode.http-address.ns.nn1</name>
        <value>hadoop:9870</value>
        <description>The fully-qualified HTTP address for nn1 to listen on.</description>
    </property>
    <property>
        <name>dfs.namenode.http-address.ns.nn2</name>
        <value>k8s-2:9870</value>
        <description>The fully-qualified HTTP address for nn2 to listen on.</description>
    </property>
    <property>
        <name>dfs.namenode.http-address.ns.nn3</name>
        <value>k8s-3:9870</value>
        <description>The fully-qualified HTTP address for nn3 to listen on.</description>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop:8485;k8s-3:8485;k8s-2:8485/ns</value>
        <description>The URI which identifies the group of JNs where the NameNodes will write/read edits.</description>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        <description>The Java class that HDFS clients use to contact the Active NameNode.</description>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>
            sshfence
            shell(/bin/true)
        </value>
        <description>
            A list of scripts or Java classes which will be used to fence the Active NameNode during a failover.
            sshfence - SSH to the Active NameNode and kill the process
            shell - run an arbitrary shell command to fence the Active NameNode
        </description>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
        <description>Set SSH private key file.</description>
    </property>
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
        <description>Automatic failover.</description>
    </property>
</configuration>

3.5 mapred-site.xml

<?xml versinotallow="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
</configuration>

3.6 yarn-site.xml

<?xml versinotallow="1.0"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
<configuration>
<property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
    <description>Enable RM HA.</description>
</property>
<property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yrc</value>
    <description>Identifies the cluster.</description>
</property>
<property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2,rm3</value>
    <description>List of logical IDs for the RMs. e.g., "rm1,rm2".</description>
</property>
<property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>hadoop</value>
    <description>Set rm1 service addresses.</description>
</property>
<property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>k8s-2</value>
    <description>Set rm2 service addresses.</description>
</property>
<property>
    <name>yarn.resourcemanager.hostname.rm3</name>
    <value>k8s-3</value>
    <description>Set rm3 service addresses.</description>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>hadoop:8088</value>
    <description>Set rm1 web application addresses.</description>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>k8s-2:8088</value>
    <description>Set rm2 web application addresses.</description>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address.rm3</name>
    <value>k8s-3:8088</value>
    <description>Set rm3 web application addresses.</description>
</property>
<property>
    <name>hadoop.zk.address</name>
    <value>hadoop:2181,k8s-2:2181,k8s-3:2181</value>
    <description>Address of the ZK-quorum.</description>
</property>
</configuration>

3.7 workers

hadoop
k8s-2
k8s-3

 

安装zookeeper

版本:zookeeper-3.6.4

通过https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.4/apache-zookeeper-3.6.4-bin.tar.gz 下载安装包,3台机器进行解压配置安装。

echo "1" > /data/zookeeperdata/myid #不同机器id不同

 

zoo.cfg配置如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeperdata #数据目录
dataLogDir=/data/zookeeperdata/logs #日志目录
clientPort=2181 #端口
server.1=192.xxx.xxx.128:2888:3888
server.2=192.xxx.xxx.132:2888:3888
server.3=192.xxx.xxx.131:2888:3888

 

环境变量配置

vi /etc/profile

export JAVA_HOME=/usr/local/jdk
export HAD00P_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_CLASSPATH=`hadoop classpath`
source /etc/profile

 

启动集群

在所有节点上使用rm -rf /usr/local/hadoop/dfs命令,删除之前创建的存储路径,同时在master节点上执行mkdir -p /usr/local/hadoop/dfs/name /usr/local/hadoop/dfs/data /usr/local/hadoop/dfs/journalnode,再次创建存储路径。

在所有节点上使用rm -rf /usr/local/hadoop/tmp /usr/local/hadoop/logs && mkdir -p /usr/local/hadoop/tmp /usr/local/hadoop/logs命令,重置临时路径和日志信息。

通过以上步骤,Hadoop HA集群就配置完成了,当第一次启动HA集群时需要依次执行以下命令:

$ZOOKEEPER_HOME/bin/zkServer.sh start # 开启Zookeeper进程(所有节点上执行)
$HADOOP_HOME/bin/hdfs --daemon start journalnode # 开启监控NameNode的管理日志的JournalNode进程(所有节点上执行)
$HADOOP_HOME/bin/hdfs namenode -format # 命令格式化NameNode(在master节点上执行)
scp -r /usr/local/hadoop/dfs k8s-2:/usr/local/hadoop  # 将格式化后的目录复制到slave1中(在master节点上执行)
scp -r /usr/local/hadoop/dfs k8s-3:/usr/local/hadoop   # 将格式化后的目录复制到slave2中(在master节点上执行)
$HADOOP_HOME/bin/hdfs zkfc -formatZK # 格式化Zookeeper Failover Controllers(在master节点上执行)
start-dfs.sh&&start-yarn.sh # 启动HDFS和Yarn集群(在master节点上执行)

若不是第一次启动HA集群(常规启动HA集群),则只需要依次执行以下命令:

$ZOOKEEPER_HOME/bin/zkServer.sh start    # 开启Zookeeper进程(所有节点上执行)
start-all.sh或者$HADOOP_HOME/sbin/start-dfs.sh && $HADOOP_HOME/sbin/start-yarn.sh # 启动HDFS和Yarn集群(在master节点上执行)

启动完成后每个节点使用jps命令会出现NameNode、DataNode、ResourceManager、NodeManager、JournalNode、DFSZKFailoverController、QuorumPeerMain和Jps 8个进程。

Hadoop高可用集群部署图片

Hadoop高可用集群部署图片

通过页面访问查看:

http://192.xxx.xxx.128:9870/

Hadoop高可用集群部署图片

http://192.xxx.xxx.128:8088/cluster/nodes

Hadoop高可用集群部署图片

 

hdfs HA验证

6.1 查看各个节点NameNode状态

Hadoop高可用集群部署图片

6.2 验证hdfs的高可用

在开启HA集群并成功启动的情况下,在master节点中使用hdfs haadmin -getAllServiceState命令查看各个节点NameNode状态,接下来停止active状态节点的NameNode进程。

Hadoop高可用集群部署图片

Namenode active自动跳转其他节点,集群仍可用。

Hadoop高可用集群部署图片

Hadoop高可用集群部署图片

随后再启动该节点NameNode进程,最后再次查看状态,可以发现HDFS HA是正常的,并且没有发生抢占。

Hadoop高可用集群部署图片

 

验证yarn 高可用

在master节点中使用yarn rmadmin -getAllServiceState命令查看各个节点ResourceManager状态,接下来停止active状态节点的ResourceManage进程,ResourceManage active自动跳转到其他节点,集群仍可用,随后再启动该节点ResourceManager进程,最后再次查看状态,Failed状态恢复为standby。

Hadoop高可用集群部署图片

若要关闭集群可以master使用$HADOOP_HOME/sbin/stop-yarn.sh && $HADOOP_HOME/sbin/stop-dfs.sh命令或者stop-all.sh 即可关闭hadoop集群,然后关闭zookeeper,三台机器分别执行/data/apache-zookeeper-3.6.4-bin/bin/zkServer.sh  stop。



Tags:Hadoop   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
在Linux系统中实现容器化的大规模数据分析平台:Hadoop和Spark
在Linux系统中实现容器化的大规模数据分析平台,我们可以利用Hadoop和Spark这两个强大的开源工具。Hadoop是一个分布式计算框架,适用于处理大规模数据集。它提供了分布式文件系...【详细内容】
2023-12-15  Search: Hadoop  点击:(154)  评论:(0)  加入收藏
Hadoop高可用集群部署
背景生产中Hadoop分布式集群中可能存在着单点故障问题,如果Namenode宕机或是软硬件升级,集群将无法使用,所以进行搭建高可用的来消除单点故障。Hadoop介绍Hadoop集群一般为一个...【详细内容】
2023-11-07  Search: Hadoop  点击:(296)  评论:(0)  加入收藏
Hadoop所有命令详解
FS Shell调用文件系统(FS)Shell命令应使用 bin/hadoop fs 的形式。 所有的的FS shell命令使用URI路径作为参数。URI格式是scheme://authority/path。对HDFS文件系统,scheme是...【详细内容】
2023-09-26  Search: Hadoop  点击:(316)  评论:(0)  加入收藏
Hadoop运行环境搭建
1 虚拟机环境准备采用前面的章节的方式准备三台虚拟机 : 1)ymm工具(1)使用yum安装需要虚拟机可以正常上网,yum安装前可以先测试下虚拟机联网情况[root@hadoop100 ~]# ping www.b...【详细内容】
2023-08-21  Search: Hadoop  点击:(247)  评论:(0)  加入收藏
9个步骤,手把手教你在Windows上安装Hadoop
在 Microsoft Windows 上运行 Apache Hadoop 是比较繁琐的任务,在安装过程中会出现许多错误,最终,大多数用户放弃了通过 Windows 使用 Hadoop,并转而使用基于 Linux 的操作系统...【详细内容】
2023-05-24  Search: Hadoop  点击:(30)  评论:(0)  加入收藏
Hadoop 及Spark 分布式HA运行环境搭建
欲善其事必先利其器,在深入学习大数据相关技术之前,先手动从0到1搭建一个属于自己的本地Hadoop和Spark运行环境,对于继续研究大数据生态圈各类技术具有重要意义。本文旨在站在...【详细内容】
2023-02-21  Search: Hadoop  点击:(114)  评论:(0)  加入收藏
大数据基础架构Hadoop
导读:大数据正在成为经济社会发展的新的驱动力。随着云计算、移动互联网等网络新技术的应用和发展,社会信息化进程进入大数据时代,海量数据的产生与流转成为常态。而大数据技术...【详细内容】
2023-01-29  Search: Hadoop  点击:(185)  评论:(0)  加入收藏
“后Hadoop时代”,大数据从业者如何应对新技术趋势带来的挑战?
作者 | 蔡芳芳采访嘉宾 | 刘京娟、贾扬清、王峰作为开源大数据项目的发端,Hadoop 兴起至今已经超过十五年。在过去这十数年里,开源大数据领域飞速发展,我们见证了多元化技术的...【详细内容】
2022-11-23  Search: Hadoop  点击:(371)  评论:(0)  加入收藏
hadoop集群的搭建、完全分布式运行 一看就会
前期准备模板机准备修改静态IPvim /etc/sysconfig/network-scripts/ifcfg-ens33TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO="static" //这里改成stati...【详细内容】
2022-08-27  Search: Hadoop  点击:(412)  评论:(0)  加入收藏
大数据Hadoop之——Zookeeper鉴权认证
一、Zookeeper概述与安装Zookeeper概述与安装请参考我之前的文章:分布式开源协调服务&mdash;&mdash;ZookeeperZookeeper的安装方式有两种,两种方式都会讲,其实大致配置都是一样...【详细内容】
2022-07-15  Search: Hadoop  点击:(3147)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条