4. hdfs高可用集群搭建

news2024/11/28 16:43:26

简介

前面把hadoop机器已经准备好了,zk集群搭建好了,本本就是开始搭建hdfs环境

hadoop环境准备

创建hadoop用户

三台机器都创建hadoop用户

useradd hadoop -d /home/hadoop
echo "1q1w1e1r"  | passwd --stdin hadoop

hadoop用户相互免密登录

进入hadoop用户 su - hadoop

生成一个ssh密钥,执行如下命令一直回车就行

ssh-keygen -t rsa -C 'shura@qq.com'

执行免密脚本,自己也需要跟自己互连

ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@hadoop01
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@hadoop02
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@hadoop03

校验,可以ssh就没问题了

[hadoop@hadoop01 ~]$ ssh hadoop02
Last login: Thu Nov 16 10:10:29 2023
[hadoop@hadoop02 ~]$

上传hadoop包

hadoop选择3.2.4版本

hadoop3.2.4

scp hadoop-3.2.4.tar.gz hadoop@hadoop01:/home/hadoop
scp hadoop-3.2.4.tar.gz hadoop@hadoop02:/home/hadoop
scp hadoop-3.2.4.tar.gz hadoop@hadoop03:/home/hadoop

解压

tar -zxvf hadoop-3.2.4.tar.gz

配置环境变量

vi ~/.bash_profile

export HADOOP_HOME=/home/hadoop/hadoop-3.2.4
PATH=$PATH:$HADOOP_HOME/bin
export PATH

source ~/.bash_profile 使环境变量生效

查看hadoop版本

[hadoop@hadoop01 ~]$ hadoop version
Hadoop 3.2.4
Source code repository Unknown -r 7e5d9983b388e372fe640f21f048f2f2ae6e9eba
Compiled by ubuntu on 2022-07-12T11:58Z
Compiled with protoc 2.5.0
From source with checksum ee031c16fe785bbb35252c749418712
This command was run using /home/hadoop/hadoop-3.2.4/share/hadoop/common/hadoop-common-3.2.4.jar

如上所示表示环境变量配置成功,其它两台机器一样操作

集群规划

我们要搭建的是hdfs的HA集群,需要规划NameNode与DataNode的部署,由于我们只有三台机器,DataNode肯定三台都需要部署,NameNode就一主一备,zkfc与NameNode对应,journalnode每台机器都部署

集群如下

hadoop01hadoop02hadoop03
NameNodeNameNode
DataNodeDataNodeDataNode
journalnodejournalnodejournalnode
zkfczkfc

同步脚本

由于后面需要修改配置文件,并且每台主机配置都是需要一样的,那么可以写一个同步脚本

同步脚本如下,通过修改hadoop01的配置,执行脚本同步到hadoop02与hadoop03

syncFile.sh

#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器
for host in hadoop02 hadoop03
do
    echo ====================  $host  ====================
    #3. 遍历所有目录,挨个发送

    for file in $@
    do
        #4. 判断文件是否存在
        if [ -e $file ]
            then
                #5. 获取父目录
                pdir=$(cd -P $(dirname $file); pwd)

                #6. 获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done

执行效果如下

[hadoop@hadoop01 hadoop-3.2.4]$ /home/hadoop/hadoop-3.2.4/syncFile.sh /home/hadoop/hadoop-3.2.4/etc/
==================== hadoop02 ====================
sending incremental file list

sent 983 bytes  received 19 bytes  668.00 bytes/sec
total size is 109,238  speedup is 109.02
==================== hadoop03 ====================
sending incremental file list

sent 983 bytes  received 19 bytes  2,004.00 bytes/sec
total size is 109,238  speedup is 109.02

配置文件修改

core-site.xml定义了hadoop的全局配置信息

core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!--hadoop集群的默认文件系统,hdfs高可用集群中写nameservice名称,不能出现下划线-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://shura/</value>
    </property>

    <!-- 指定hadoop工作目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/hadoop-3.2.4/tmp</value>
    </property>

    <!-- 指定zookeeper集群访问地址 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
    </property>

    <!-- 配置为了解决以后其他组件连接HDFS集群  -->
    <property>
        <name>hadoop.proxyuser.bigdata.hosts</name>
        <value>*</value>
    </property>

    <property>
        <name>hadoop.proxyuser.bigdata.groups</name>
        <value>*</value>
    </property>

    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>hadoop</value>
    </property>

</configuration>

hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- 指定HDFS的nameservices为 crm, 需要跟core-site.xml中保持一致 -->
    <property>
        <name>dfs.nameservices</name>
        <value>shura</value>
    </property>

    <!-- NameNode持久化存储命名空间和事务日志的本地文件系统上的路径。 -->
      
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/hadoop-3.2.4/dfs/namenode</value>
    </property>
      <!-- DataNode 存放块位置写,逗号隔开 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/hadoop-3.2.4/dfs/datanode/1,/home/hadoop/hadoop-3.2.4/dfs/datanode/2</value>
    </property>
    <property>
        <!--指定hdfs保存数据的副本数量-->
        <name>dfs.replication</name>
        <value>2</value>
    </property>


    <!-- 设置crm集群有两个namenode, 分别为nn1,nn2 -->
    <property>
        <name>dfs.ha.namenodes.shura</name>
        <value>nn1,nn2</value>
    </property>

    <!-- 配置nn1 的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.shura.nn1</name>
        <value>hadoop01:9000</value>
    </property>

    <!-- 配置nn1的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.shura.nn1</name>
        <value>hadoop01:50070</value>
    </property>

    <!-- 配置nn2 的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.shura.nn2</name>
        <value>hadoop03:9000</value>
    </property>

    <!-- 配置nn2的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.shura.nn2</name>
        <value>hadoop03:50070</value>
    </property>

    <!-- 指定JournalNode 在本地磁盘存放数据的位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/home/hadoop/hadoop-3.2.4/journaldata</value>
    </property>

    <!-- 指定NameNode的edits元数据在journalNode上的服务器 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/shura</value>
    </property>

    <!-- 开启NameNode 自动切换 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>

    <!-- 配置nameNode失败自动切换的实现方式 shura一定保持与core-site一样-->
    <property>
        <name>dfs.client.failover.proxy.provider.shura</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

    <!-- 配置隔离机制方法 -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>
            sshfence
            shell(/bin/true)
        </value>
    </property>

    <!-- 使用sshfence隔离机制时需要ssh免密登陆 -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/hadoop/.ssh/id_rsa</value>
    </property>

    <!-- 配置sshfence隔离机制超时时间 -->
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>

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


workers

hadoop01
hadoop02
hadoop03

以上配置文件在hadoop01上修改,通过syncFile.sh脚本同步

[hadoop@hadoop01 hadoop]$ /home/hadoop/hadoop-3.2.4/syncFile.sh /home/hadoop/hadoop-3.2.4/etc/
==================== hadoop02 ====================
sending incremental file list
etc/hadoop/
etc/hadoop/core-site.xml
etc/hadoop/hdfs-site.xml
etc/hadoop/workers

sent 5,601 bytes  received 113 bytes  11,428.00 bytes/sec
total size is 112,138  speedup is 19.63
==================== hadoop03 ====================
sending incremental file list
etc/hadoop/
etc/hadoop/core-site.xml
etc/hadoop/hdfs-site.xml
etc/hadoop/workers

sent 5,601 bytes  received 113 bytes  11,428.00 bytes/sec
total size is 112,138  speedup is 19.63

启动journalnode

journalnode的定义见上一篇文章,hdfs概述与高可用原理

hdfs --daemon start journalnode
WARNING: /home/hadoop/hadoop-3.2.4/logs does not exist. Creating.

## 查看java进程
[hadoop@hadoop01 ~]$ jps
30272 JournalNode
31554 Jps

格式化HDFS

在hadoop01执行下面命令

hdfs namenode -format

该命令会在hdfs上创建一个新的文件系统,并且初始化其目录结构与元数据信息,它会清空NameNode节点的数据目录,包括fsimage和edits文件并且创建新的,是一个比较危险的动作,一般环境搭建的时候使用

fsimage 文件系统的元数据信息

edits 元数据的变化历史记录

执行完后目录效果

[hadoop@hadoop01 hadoop-3.2.4]$ ls -lrt dfs/ journaldata/
journaldata/:
total 4
drwxrwxr-x 4 hadoop hadoop 4096 Nov 16 16:01 shura

dfs/:
total 8
drwxrwxr-x 3 hadoop hadoop 4096 Nov 16 16:00 namenode
drwxrwxr-x 4 hadoop hadoop 4096 Nov 16 16:02 datanode

standby同步元数据

我们有两个NameNode,一个是active,一个是standby,standby是用于同步,在搭建环境的时候,可以手动进行一次同步

需要启动active ,在hadoop01启动

hdfs --daemon start namenode

[hadoop@hadoop01 ~]$ jps
30272 JournalNode
32617 NameNode
32686 Jps

在hadoop03,执行同步命令

hdfs namenode -bootstrapStandby

格式化zkfc

hdfs zkfc -formatZK

启动hdfs集群

只需要一台机器执行start-dfs.sh就可以了

/home/hadoop/hadoop-3.2.4/sbin/start-dfs.sh

## hadoop01
[hadoop@hadoop01 sbin]$ jps
30272 JournalNode
1153 DataNode
1683 Jps
32617 NameNode
1545 DFSZKFailoverController

## hadoop02
[hadoop@hadoop02 ~]$ jps
22608 DataNode
20283 JournalNode
1581 Jps

## hadoop03
[hadoop@hadoop03 ~]$ jps
19265 JournalNode
1227 Jps
21725 DataNode
21598 NameNode
21934 DFSZKFailoverController

查看状态

[hadoop@hadoop01 ~]$ hdfs haadmin  -getAllServiceState
hadoop01:9000                                      active
hadoop03:9000                                      standby

访问

访问NameNode,我们配置的http地址是50070

hadoop01

hadoop03

如上结果所示,与我们规划部署一致

总结

hdfs的部署就到这了,下节我们开始简单使用hdfs


欢迎关注,学习不迷路!

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

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

相关文章

语义检索系统【全】:基于milvus语义检索系统指令全流程-快速部署版

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…

Linux操作系统基础 – 正则表达式快速入门

Linux操作系统基础 – 正则表达式快速入门 Linux Operating System Essentials - Introduction to Regular Expressions 通常在计算机科学领域&#xff0c;正则表达式被解释为对字符串操作的一种逻辑公式&#xff0c;即用事先定义好的特定字符及其组合组成所谓的“规则字符串”…

SpringBoot使用DevTools实现后端热部署

&#x1f4d1;前言 本文主要SpringBoot通过DevTools实现热部署的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日一句&…

GZ038 物联网应用开发赛题第10套

2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 &#xff08;第10套卷&#xff09; 工位号&#xff1a;______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具&#xff0c;操作安全规范&#xff1b; 2、竞赛过程中如有异议&#xff0c;可向现场考…

ai剪辑矩阵系统源码+无人直播系统源码技术开发

开发AI剪辑矩阵系统和无人直播系统源码&#xff0c;需要以下步骤&#xff1a; 1. 市场调研&#xff1a;了解市场需求和竞品情况&#xff0c;明确系统的功能和特点。 2. 系统设计&#xff1a;设计系统的整体架构和功能模块&#xff0c;包括视频剪辑、直播推流、实时互动、数据分…

【Linux】Ubuntu16.04下安装python高版本--源码安装

Ubuntu16.04下完美安装python高版本及对应版本的pip 方法一:直接用命令安装python3.6&#xff08;但我没安装成功&#xff09; 好像是因为Ubuntu16.04的软件仓库&#xff08;源&#xff09;中python的最高版本就是python3.5&#xff0c;所以无法直接用apt来安装 #方法一 sudo…

学习c#的第十四天

目录 C# 接口&#xff08;Interface&#xff09; 接口的特点 定义接口 接口继承 接口和抽象类的区别 C# 命名空间&#xff08;Namespace&#xff09; using 关键字 定义命名空间 嵌套命名空间 C# 接口&#xff08;Interface&#xff09; 接口定义了所有类继承接口时应…

Linux系统进程——进程的退出、子进程退出的收集、孤儿进程

进程退出 进程退出主要分为两种&#xff1a;正常退出、异常退出 正常退出 正常退出分为以下几种&#xff1a; 1.main函数调用return 2.进程调用exit(),标准c库 3.进程调用 _exit() 或者 _Exit() &#xff0c;属于系统调用 4.进程最后一个线程返回 5.最后一个线程调用pthrea…

asp.net网上书店管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目

一、源码特点 asp.net网上书店管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 asp.net网上书店系统1 二、功能介绍 本系统使用Microsoft Visual Studio 2019为开发工具&#xff0c;SQL Server为…

影响气膜建筑坍塌的原因

气膜建筑以其轻盈、透光、环保等特性&#xff0c;逐渐在建筑领域崭露头角。然而&#xff0c;这种建筑形式并非没有缺陷&#xff0c;其安全性与稳定性直接影响到建筑物的使用寿命和人员安全。 一、结构设计不合理 气膜建筑的结构设计是影响其稳定性的关键因素。良好的结构设计能…

LeetCode(24)文本左右对齐【数组/字符串】【困难】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 文本左右对齐 1.题目 给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单…

delphi电子处方流转 sm2 sm4(药店)

【delphi电子处方流转(药店)】支持 处方下载、处方核验、处方审核、药品销售出库明细上传、药品销售出库明细撤销等功能。技术交流Q 648437169 下载链接&#xff1a;https://download.csdn.net/download/liushenglin123/88543771

数据结构(c语言版本) 二叉树的遍历

要求 实现二叉树的创建&#xff0c;并输入二叉树数据 然后先序遍历输出二叉树、中序遍历输出二叉树、后序输出二叉树 例如二叉树为&#xff1a; 该二叉树的先序遍历结果为&#xff1a; A B D C E F 该二叉树的中序遍历结果为&#xff1a; B D A E C F 该二叉树的后序遍历结果…

从0开始学习JavaScript--JavaScript 函数

JavaScript中的函数是编写可维护、模块化代码的关键。本文将深入研究JavaScript函数的各个方面&#xff0c;包括基本语法、函数作用域、闭包、高阶函数、箭头函数等&#xff0c;并通过丰富的示例代码来帮助读者更好地理解和应用这些概念。 函数的基本语法 函数是一段可被重复…

Java网页版即时通讯聊天系统(附源码)

疫情期间,整天闷在家里又不能聚会,大把的空余时间差点让我发霉,后来有个客户发来新年祝贺,情不自禁想起了一件事情,就是他曾经提起过,要是在后台管理系统里面整合个聊天功能该多好啊,有了这个念头,马上行动起来!!! 一.系统演示 1.1 聊天窗体主界面演示 1.2 模拟两…

Java集合List报错,java.lang.UnsupportedOperationException

目录 一、点击Arrays.asList源码&#xff0c;一探究竟二、习惯了Arrays.asList&#xff0c;就是想用.add()添加元素&#xff0c;怎么办&#xff1f;三、又有一个同事&#xff0c;是这样写的四、重新点击Arrays.asList源码&#xff0c;一探究竟五、全是坑&#xff0c;怎么办&…

iframe渲染后端接口文件和实现下载功能

一&#xff1a;什么是iframe&#xff1f; 1、介绍 iframe 是HTML 中的一种标签&#xff0c;全称为 Inline Frame&#xff0c;即内联框架。它可以在网页中嵌入其他页面或文档&#xff0c;将其他页面的内容以框架的形式展示在当前页面中。iframe的使用方式是通过在HTML文档中插入…

python连接elasticsearch

问题一&#xff1a;urllib3.exceptions.ProtocolError: (‘Connection aborted.’, RemoteDisconnected(‘Remote end closed connection without response’)) 协议写错了&#xff0c;是https 问题一&#xff1a;SSLError([SSL: CERTIFICATE_VERIFY_FAILED] certificate ver…

uni-app:如何配置uni.request请求的超时响应时间(全局+局部)

方法一&#xff1a;全局配置响应时间 一、进入项目的manifest.json的代码视图模块 二、写入代码 "networkTimeout": {"request": 5000 }, 表示现在request请求响应时间最多位5秒 方法二&#xff1a;局部设置响应时间 一、直接在uni.request中写入属性…

Redis7.2.3集群安装,新增节点,删除节点,分配哈希槽,常见问题

概念&#xff1a; 【Redis】高可用之三&#xff1a;集群&#xff08;cluster&#xff09; - 知乎 实操&#xff1a; Redis集群三种模式 主从模式 优势&#xff1a; 主节点可读可写 从节点只能读&#xff08;从节点从主节点同步数据&#xff09; 缺点&#xff1a; 当主节点…