【大数据】Hadoop高可用集群搭建

news2025/1/18 16:53:18

知识目录

  • 一、写在前面💕
  • 二、Zookeeper安装✨
  • 三、Hadoop配置✨
  • 四、Hadoop HA自动模式✨
  • 五、HA脚本分享✨
  • 七、结语💕

一、写在前面💕

大家好!这篇文章是我在搭建Hdfs的HA(高可用)时写下的详细笔记与感想,希望能帮助到大家!本篇文章收录于 初心 的 大数据 专栏。

🏠 个人主页:初心%个人主页
🧑 个人简介:大家好,我是初心,和大家共同努力
💕 座右铭:理想主义的花,终究会盛开在浪漫主义的土壤里!🍺🍺🍺
💕欢迎大家:这里是CSDN,我记录知识的地方,喜欢的话请三连,有问题请私信😘

二、Zookeeper安装✨

  • 1.将Zookeeper压缩包上传到 Hadoop102的/opt/software 目录下

这里我们还是使用Xshell+Xftp进行文件上传,将Zookeeper上传。

  • 2.解压到 /opt/module/HA 目录下
tar -xzvf /opt/software/apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/HA/
  • 3.将Zookeeper重命名
mv /opt/module/HA/apache-zookeeper-3.5.7-bin/ zookeeper
  • 4.重命名Zookeeper的zoo_sample.cfg为zoo.cfg文件
mv zoo_sample.cfg zoo.cfg
  • 5.修改zoo.cfg文件
vim /opt/module/HA/zookeeper/conf/zoo.cfg

按下G,按下o,直接插入到最后一行,插入以下内容,其中hadoop102,hadoop103,hadoop104分别是三个节点的主机名。

server.1=hadoop102:2888:3888
server.2=hadoop103:2888:3888
server.3=hadoop104:2888:3888
  • 6.新建myid文件

进入到zookeeper目录下:

cd /opt/module/HA/zookeeper/

新建zkData目录:

mkdir zkData

进入到zkData目录,并新建myid文件:

cd zkData
vim myid

只需分别在Hadoop102,Hadoop103,Hadoop104的myid文件添加数字 1,2,3 即可,保存退出:



  • 7.配置环境变量
vim /etc/profile.d/my_env.sh

插入以下内容:

# ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/module/HA/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
  • 8.刷新环境变量
source /etc/profile.d/my_env.sh
  • 9.分发

这里需要分发的有Zookeeper,my_env.sh文件,以及都要刷新环境变量。前面两个命令在hadoop102执行即可,第三个命令在hadoop103,hadoop104上都要执行一次。

xsync /opt/module/HA/zookeeper/
xsync /etc/profile.d/my_env.sh
source /etc/profile.d/my_env.sh

三、Hadoop配置✨

  • 1.保留原来的Hadoop集群

为什么要保留原来的集群? 在搭建Hadoop高可用之前,我们的集群是有Hdfs,Yarn,JobHistory,这些我们日后还需要继续学习使用,因此我选择保留下来,换句话说,**即使我们高可用(HA)搭建失败了,我们还能回到开始的状态。**保留方式就是我们搭建的时候不要直接使用Hadoop目录,而是复制一份。

  • 2.复制Hadoop目录
cp -r /opt/module/hadoop-3.1.3/ /opt/module/HA/
  • 3.删除data和logs目录
cd /opt/module/HA/hadoop-3.1.3/
rm -rf data
rm -rf logs
  • 4.新建Zookeeper相关目录
cd /opt/module/HA/
mkdir logs
mkdir tmp
  • 5.修改两个配置文件

这里的两个配置文件是 core-site.xml 文件和 hdfs-site.xml 文件,这是Hadoop目录中仅需要修改的两个文件.这里以注释形式给出需要修改的地方,不用修改这两个文件,直接覆盖即可.

hdfs-site.xml:

<?xml version="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.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <!-- 集群名称,此值在接下来的配置中将多次出现务必注意同步修改 -->
<property>
 <name>dfs.nameservices</name>
 <value>mycluster</value>
</property>
<!-- 所有的namenode列表,此处也只是逻辑名称,非namenode所在的主机名称 -->
<property>
 <name>dfs.ha.namenodes.mycluster</name>
 <value>nn1,nn2</value>
</property>

<!-- namenode之间用于RPC通信的地址,value填写namenode所在的主机地址 -->
<!-- 默认端口8020,注意mycluster1与nn1要和上文的配置一致 -->
<property>
 <name>dfs.namenode.rpc-address.mycluster.nn1</name>
 <value>hadoop102:8020</value>
</property>
<property>
 <name>dfs.namenode.rpc-address.mycluster.nn2</name>
 <value>hadoop103:8020</value>
</property>

<!-- namenode的web访问地址,默认端口9870 -->
<property>
 <name>dfs.namenode.http-address.mycluster.nn1</name>
 <value>hadoop102:9870</value>
</property>
<property>
 <name>dfs.namenode.http-address.mycluster.nn2</name>
 <value>hadoop103:9870</value>
</property>

<!-- journalnode主机地址,最少三台,默认端口8485 -->
<!-- 格式为 qjournal://jn1:port;jn2:port;jn3:port/${nameservices} -->
<!-- a shared edits dir must not be specified if HA is not enabled -->
<!-- 伪分布式时,取消该配置 -->
<property>
 <name>dfs.namenode.shared.edits.dir</name>
 <value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value>
</property>

<!-- 故障时自动切换的实现类,照抄即可 -->
<property>
 <name>dfs.client.failover.proxy.provider.mycluster</name>
 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!-- 故障时相互操作方式(namenode要切换active和standby),这里我们选ssh方式 -->
<property>
 <name>dfs.ha.fencing.methods</name>
 <value>sshfence</value>
</property>
<!-- 修改为自己用户的ssh key存放地址 -->
<property>
 <name>dfs.ha.fencing.ssh.private-key-files</name>
 <value>/home/sky/.ssh/id_rsa</value>
</property>

<!-- namenode日志文件输出路径,即journalnode读取变更的位置 -->
<property>
 <name>dfs.journalnode.edits.dir</name>
 <value>/opt/module/HA/logs/</value>
</property>

<!-- 启用自动故障转移 -->
<property>
 <name>dfs.ha.automatic-failover.enabled</name>
 <value>true</value>
</property>

<property>
 <name>dfs.webhdfs.enabled</name>
 <value>true</value>
</property>

<!-- 解决 DataXceiver error processing WRITE_BLOCK operation src -->
<property>
 <name>dfs.datanode.max.transfer.threads</name>
 <value>8192</value>
 <description> 
     Specifies the maximum number of threads to use for transferring data
     in and out of the DN. 
 </description>
</property>
</configuration>

core-site.xml:

<?xml version="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.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
	  <!-- HDFS主入口,mycluster仅是作为集群的逻辑名称,可随意更改但务必与hdfs-site.xml中dfs.nameservices值保持一致 -->
<property>
 <name>fs.defaultFS</name>
 <value>hdfs://mycluster</value>
</property>

<!-- 默认的hadoop.tmp.dir指向的是/tmp目录,将导致namenode与datanode数据全都保存在易失目录中,此处进行修改 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/HA/tmp/</value>
 <!-- <value>/opt/bigdata/hadoopha</value> -->
</property>

<!-- 用户角色配置,不配置此项会导致web页面报错(不能操作数据) -->
<property>
 <name>hadoop.http.staticuser.user</name>
 <value>sky</value>
</property>

<!-- zookeeper集群地址,这里只配置了单台,如是集群以逗号进行分隔 -->
<property>
 <name>ha.zookeeper.quorum</name>
 <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>

<!-- 权限配置 hadoop.proxyuser.{填写自己的用户名}.hosts-->
<property>
 <name>hadoop.proxyuser.sky.hosts</name>
 <value>*</value>
</property>
<property>
 <name>hadoop.proxyuser.sky.groups</name>
 <value>*</value>
</property>

<!-- 解决journalnode连接不上,导致namenode启动问题 -->
<!-- 也有可能是网络的问题,参考该文章:https://blog.csdn.net/tototuzuoquan/article/details/89644127 -->
<!-- 在dev环境中出现连不上journalnode问题,添加该配置,以增加重试次数和间隔 -->
<property>
 <name>ipc.client.connect.max.retries</name>
 <value>100</value>
 <description>Indicates the number of retries a client will make to establish a server connection.</description>
</property>

<property>
 <name>ipc.client.connect.retry.interval</name>
 <value>10000</value>
 <description>Indicates the number of milliseconds a client will wait for before retrying to establish a server connection.</description>
</property>
</configuration>

  • 6.修改环境变量
vim /etc/profile.d/my_env.sh

将HADOOP_HOME改为新的Hadoop目录所在路径:

# HADOOP_HOME
export HADOOP_HOME=/opt/module/HA/hadoop-3.1.3
  • 7.分发Hadoop目录和my_env.sh文件
xsync /opt/module/HA/hadoop-3.1.3/
xsync /etc/profile.d/my_env.sh
  • 8.刷新环境变量

分别在三个节点上刷新环境变量:

source /etc/profile.d/my_env.sh

四、Hadoop HA自动模式✨

  • 1.修改hadoop/etc/hadoop/hadoop-env.sh文件
vim /opt/module/HA/hadoop-3.1.3/etc/hadoop/hadoop-env.sh

在末尾插入以下内容,sky是用户名,因为我至始至终都没使用root账号.

export HDFS_ZKFC_USER=sky
export HDFS_JOURNALNODE_USER=sky
  • 2.分发
xsync /opt/module/HA/hadoop-3.1.3/
  • 2.启动与初始化集群

启动Zookeeper:

zkServer.sh start

刷新环境变量:

source /etc/profile.d/my_env.sh

启动Hdfs:

myhadoop start

myhadoop是我另外一个Hadoop集群启停脚本,具体的脚本内容和使用请参考:Hadoop集群启停脚本

  • 3.查看namenode的活跃状态
zkServer.sh status

五、HA脚本分享✨

脚本名字是myHA.sh,功能是实现一键启动和停止Zookeeper和Hdfs,查看zookeeper状态.

#! /bin/bash
if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit;
fi


case $1 in
"start"){
    echo "----------启动zookeeper----------"
	for i in hadoop102 hadoop103 hadoop104
	do
        echo ---------- zookeeper $i 启动 ------------
		ssh $i "/opt/module/HA/zookeeper/bin/zkServer.sh start"
	done
    echo "---------- 启动hdfs------------"
    ssh hadoop102 "/opt/module/HA/hadoop-3.1.3/sbin/start-dfs.sh"
    echo "---------- hadoop HA启动成功------------"
};;
"stop"){
    echo "----------关闭hdfs----------"
    ssh hadoop102 "/opt/module/HA/hadoop-3.1.3/sbin/stop-dfs.sh"
    echo "----------关闭zookeeper----------"
	for i in hadoop102 hadoop103 hadoop104
	do
        echo ---------- zookeeper $i 停止 ------------
		ssh $i "/opt/module/HA/zookeeper/bin/zkServer.sh stop"
	done
    echo "---------- hadoop HA停止成功------------"
};;
"status"){
	for i in hadoop102 hadoop103 hadoop104
	do
        echo ---------- zookeeper $i 状态 ------------    
		ssh $i "/opt/module/HA/zookeeper/bin/zkServer.sh status"
	done
};;
*)
    echo "Input Args Error"
;;
esac

七、结语💕

😎 本文主要讲解了如何搭建Hdfs的高可用(HA),后期还会出加上Yarn的高可用教程,大家可以期待一下哦!😊

这就是今天要分享给大家的全部内容了,我们下期再见!😊

🍻 世间所有的相遇,都是久别重逢~ 😍

🏠 我在CSDN等你哦!😍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/556593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式调度XXL-JOB

分布式调度XXL-JOB 1.概述 1.1什么是任务调度 比如: 某电商平台需要每天上午10点&#xff0c;下午3点&#xff0c;晚上8点发放一批优惠券某银行系统需要在信用卡到期还款日的前三天进行短信提醒某财务系统需要在每天凌晨0:10分结算前一天的财务数据&#xff0c;统计汇总 以…

【图床】SpringBoot上传图片

知识目录 一、写在前面✨二、新建开源仓库✨2.1 新建仓库2.2 将仓库设置为开源2.3 生产私人令牌 三、代码实现&#x1f604;3.1 工具类3.2 上传图片 四、总结撒花&#x1f60a; 一、写在前面✨ 大家好&#xff01;我是初心&#xff0c;很高兴再次和大家见面。 今天跟大家分享…

【Unity】Animation Playable Bug、限制及解决方案汇总

【Unity】Animation Playable Bug、限制及解决方案汇总 先自荐一下我的PlayableGraph监控工具&#xff0c;比官方的Visualizer好用得多&#xff1a;https://github.com/SolarianZ/UnityPlayableGraphMonitorTool Bug 文中提及的各项Bug及解决方案的最小化测试工程可在此仓库下…

基于java的竞赛预约管理信息系统的设计与实现

背景 本系统提供给管理员对首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;项目分类管理&#xff0c;竞赛项目管理&#xff0c;赛事预约管理&#xff0c;系统管理等诸多功能进行管理。本系统对于用户输入的任何信息都进行了一定的验证&#xff0c;为管理员操作提高…

2023语言与智能技术竞赛开辟“双赛道”:寻找“全民测评官”,探索AI多模态能力...

开年以来&#xff0c;人工智能大语言模型&#xff08;LLM&#xff09;掀起新一轮全球科技竞赛&#xff0c;全球科技巨头打响“百模大战”。当大语言模型正深刻改变人类生产生活方式时&#xff0c;该如何进一步释放其潜能&#xff0c;成为业界关注的问题&#xff0c;也成为了202…

计网之HTTP请求的构造

文章目录 1. form表单请求构造2. ajax请求构造3. Postman的简单使用 常见的构造 HTTP 请求的方式有以下几种: 直接通过浏览器地址栏, 输入一个 URL 就可以构造出一个 GET 请求.直接点击收藏夹, 得到的也是 GET 请求.HTML 中的一些特殊标签也会触发 GET 请求, 如: link, script…

线程池ThreadPoolExecutor底层原理源码分析

线程池执行任务的具体流程是怎样的&#xff1f; ThreadPoolExecutor中提供了两种执行任务的方法&#xff1a; void execute(Runnable command)Future<?> submit(Runnable task) 实际上submit中最终还是调用的execute()方法&#xff0c;只不过会返回⼀个Future对象&am…

【项目实战】基于Vue3+TypeScript+Pinia的后台管理系统(coderwhy)

是基于Vue3、Pinia、VueRouter、Vite、ElementPlus、TypeScript、Echarts等后台系统 效果 项目地址 https://gitee.com/yangyang993/vue3_ts_cms_admin.git 超级管理员 登录 系统总览 侧边栏是动态形成的&#xff1a;动态路由加载。路由地址路径和菜单相匹配。 注意&…

CAN总线上的报文帧类型(N_PCI)

1.四种报文类型&#xff08;简洁明了&#xff09; 请记住对于CAN报文来说&#xff0c;可以通过识别每条CAN的首个字节来确定它的类型&#xff0c;4种&#xff1a; 单帧 0 首帧 1 连续帧 2 流控帧 3 2. 单帧&#xff08;SF&#xff0c;Single Frame&#xff09; 0X 单帧首个…

【Spring MVC】后端处理多文件上传如何保持最大的灵活性

文章目录 前言找文档Spring MVC 如何接收多文件formdata 接收其他传参结论 前言 有一个多文件上传的需求&#xff0c;翻看了Spring MVC的官网&#xff0c;总结一下&#xff1a; 如何根据版本号找官方文档后端如何声明Controller能保持较好的灵活性 找文档 spring-framework…

Hive基础概论

HIVE 基础 Hive基础什么是Hive&#xff1f;为什么用Hive&#xff1f;Hive与Hadoop的关系Hive架构、组件组件用户接口元数据存储Driver驱动程序&#xff0c;包括语法解析器、计划编译器。优化器、执行器执行引擎 数据模型Data ModelDataBase 数据库Tables 表Partitions 分区Buck…

LIMUML04数据标注(note)

数据标注的思维导图 目标&#xff1a;是提升模型还是提升标注&#xff0c;本小节讨论提升标准&#xff0c;提升模型后面介绍。 如果有足够标注&#xff1a;使用半监督学习 没有足够标注&#xff0c;有足够预算&#xff1a;请人标注 没有足够预算&#xff1a;使用弱监督学习 问题…

每日学术速递5.22

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Drag Your GAN: Interactive Point-based Manipulation on the Generative Image Manifold(SIGGRAPH 2023) 标题&#xff1a;拖动你的 GAN&#xff1a;生成图像流形上基于点的交互…

基础IO(总)

接口介绍 open&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); pathname&#xff1a;要打开或创建的目标文件 fla…

两数之和 C++实现(力扣题目1)

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值 target 的那两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案…

SQL案例-高校信息管理系统实现要求

SQL案例-高校信息管理系统实现要求 (1) 建表 stuInfo(学生信息表) 字段名称数据类型说明stuName字符学生姓名&#xff0c;该列必填&#xff0c;要考虑姓氏可能是两个字的&#xff0c;如欧阳俊雄stuNo字符学号&#xff0c;该列必填&#xff0c;学号不能重复&#xff0c;且必须…

AC规则-4-规则和冲突解决

3.3 Introduction to Access Control Rule Conflict Resolution 3.3 访问控制规则冲突解决简介 本节从高层次讨论访问控制规则冲突解决。 本文档稍后会提供更多详细信息。 规则的优先级不是基于它在其他规则中的阅读顺序。 管理冲突规则的策略基于三个基本原则&#xff08;…

linux中 list_entry 设计背景及原理解析

Linux 2.4.22 在这一版本中的 list_entry的宏定义实现如下&#xff1a; #define list_entry(ptr, type, member) \((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))乍一看&#xff0c;会觉得特别复杂&#xff0c;其实分析之后&#xff0c;会发现清晰…

LeetCode高频算法刷题记录8

文章目录 1. 零钱兑换【中等】1.1 题目描述1.2 解题思路1.3 代码实现 2. 最小栈【最小栈】2.1 题目描述2.2 解题思路2.3 代码实现 3. 最长有效括号【困难】3.1 题目描述3.2 解题思路3.3 代码实现 4. 从前序与中序遍历序列构造二叉树【中等】4.1 题目描述4.2 解题思路4.3 代码实…

day8 域名解析与http服务器实现原理

域名解析gethostbyname函数 主机结构在 <netdb.h> 中定义如下 结构的成员包括&#xff1a; h_name &#xff1a;主机的正式名称 h_aliases&#xff1a;主机的备用名称数组&#xff0c;以 NULL 结尾指针 h_addrtype&#xff1a;地址类型;&#xff08;AF_INET或AF_INET…