HDFS高可用模式安装部署

实验步骤

  • 将ZooKeeper集群模式启动
  • 获取安装包
    • 安装包在本地:通过XFTP等工具将安装包上传到虚拟机中
    • 安装包在网络:
      • 虚拟机可以访问互联网
      • 虚拟机无法访问互联网
  • 解压缩安装包
  • 将解压出来安装目录重命名
  • 配置环境变量
  • 刷新环境变量,使新增的环境变量生效
  • 修改hadoop相关配置文件
    • 修改core-site.xml配置文件
    • 修改hdfs-site.xml配置文件
    • 修改hadoop-env.sh配置文件
    • 修改slaves配置文件
  • 将配置好的文件分发给集群中的其他节点
    • 将hadoop的安装包分发给集群中的其他节点
    • 将profile环境变量分发给集群中其他节点
  • 创建配置目录中所涉及到的目录
  • 启动管理日志Journalnode节点
  • 在第一台节点上格式化NameNode
  • 启动第一台节点的NameNode节点
  • 在第二台节点上同步hadoop01节点的元数据信息
  • 启动hadoop02节点的NameNode节点
  • zkfc对接hdfs,实现主备抢占
  • 启动zkfc服务进程
    • hadoop01节点上启动zkfc
    • hadoop02节点上启动zkfc
  • 启动DataNode节点

一、启动ZooKeeper集群服务

注意:一个一个的启动,即一个一个的使用zkServer.sh start命令后再使用zkServer.sh status命令查看节点状态。

1、启动hadoop01节点的ZooKeeper服务

[root@hadoop01 install]# zkServer.sh start

[root@hadoop01 install]# zkServer.sh status

输出结果,如下图所示:

2、启动hadoop02节点的ZooKeeper服务

[root@hadoop02 ~]# zkServer.sh start

[root@hadoop02 ~]# zkServer.sh status

输出结果,如下图所示:

3、启动hadoop03节点的ZooKeeper服务

[root@hadoop03 ~]# zkServer.sh start

[root@hadoop03 ~]# zkServer.sh status

输出结果,如下图所示:

二、安装Hadoop

1、将hadoop安装包解压到指定的安装目录

[root@hadoop01 install]# cd

[root@hadoop01 ~]# tar -zxvf hadoop-2.7.7.tar.gz -C /opt/install/

2、进入到安装目录,对hadoop的安装目录进行重命名

[root@hadoop01 ~]# cd /opt/install/

[root@hadoop01 install]# mv hadoop-2.7.7/ hadoop

3、配置hadoop的环境变量

[root@hadoop01 install]# vim /etc/profile

export HADOOP_HOME=/opt/install/hadoop

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

输出结果,如下图所示:

4、刷新环境变量,使得新增环境变量生效

[root@hadoop01 install]# source /etc/profile

5、验证hadoop版本信息

[root@hadoop01 install]# hadoop version

输出结果,如下图所示:

三、修改hadoop配置文件

1、修改core-site.xml配置文件

[root@hadoop01 ~]# cd /opt/install/hadoop/etc/hadoop/

[root@hadoop01 hadoop]# vim core-site.xml

<configuration>

    <property>

        <!--不启用服务级授权,默认为false-->

        <name>hadoop.security.authorization</name>

        <value>false</value>

    </property>

    <property>

        <!--配置hadoop的临时目录-->

        <name>hadoop.tmp.dir</name>

        <value>/data/hadoop/tmp</value>

    </property>

    <property>

        <!--指定hdfs的nameservice为cluster-->

        <name>fs.defaultFS</name>

        <value>hdfs://cluster</value>

    </property>

    <property>

        <!--指定 zookeeper地址-->

        <name>ha.zookeeper.quorum</name>

        <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>

    </property>

    <property>

        <!--指定ZooKeeper会话超时时间-->

        <name>ha.zookeeper.session-timeout.ms</name>

        <value>10000</value>

    </property>

</configuration>

输出结果,如下图所示:

2、修改hdfs-site.xml配置文件

[root@hadoop01 hadoop]# vim hdfs-site.xml

<configuration>

    <!--设置副本数量-->

    <property>

        <name>dfs.replication</name>

        <value>3</value>

    </property>

    <!--指定hdfs的nameservice为cluster-->

    <property>

        <name>dfs.nameservices</name>

        <value>cluster</value>

    </property>

    <!--cluster下有两个NameNode,分别是namenode01,namenode02-->

    <property>

        <name>dfs.ha.namenodes.cluster</name>

        <value>namenode01,namenode02</value>

    </property>

    <!--namenode01的RPC通信地址-->

    <property>

        <name>dfs.namenode.rpc-address.cluster.namenode01</name>

        <value>hadoop01:9000</value>

    </property>

    <!--namenode01的http通信地址-->

    <property>

        <name>dfs.namenode.http-address.cluster.namenode01</name>

        <value>hadoop01:8989</value>

    </property>

    <!--namenode02的RPC通信地址-->

    <property>

        <name>dfs.namenode.rpc-address.cluster.namenode02</name>

        <value>hadoop02:9000</value>

    </property>

    <!--namenode02的http通信地址-->

    <property>

        <name>dfs.namenode.http-address.cluster.namenode02</name>

        <value>hadoop02:8989</value>   

    </property>

    <!--是否启用HA自动切换-->

    <property>

        <name>dfs.ha.automatic-failover.enabled.cluster</name>

        <value>true</value>

    </property>

    <!--指定NameNode的元数据在JournalNode上的存放位置-->

    <property>

        <name>dfs.namenode.shared.edits.dir</name>

        <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/cluster</value>

    </property>

    <!--指定JournalNode在本地磁盘存放数据的位置-->

    <property>

        <name>dfs.journalnode.edits.dir</name>

        <value>/data/hadoop/journal</value>

    </property>

    <!--指定NameNode在本地磁盘存放数据的位置-->

    <property>

        <name>dfs.namenode.name.dir</name>

        <value>/data/hadoop/namenode</value>

    </property>

    <!--指定DataNode在本地磁盘存放数据的位置-->

    <property>

        <name>dfs.datanode.data.dir</name>

        <value>/data/hadoop/datanode</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>/root/.ssh/id_rsa</value>

    </property>

    <!--配置sshfence隔离机制超时时间-->

    <property>

        <name>dfs.ha.fencing.ssh.connect-timeout</name>

        <value>30000</value>

    </property>

    <!--配置失败自动切换实现方式-->

    <property>

        <name>dfs.client.failover.proxy.provider.cluster</name>

        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

    </property>

   <!--开启webHDFS-->

    <property>

        <name>dfs.webhdfs.enabled</name>

        <value>true</value>

    </property>

    <!--设置重新进行健康检查的时间-->

    <property>

        <name>heartbeat.recheck.interval</name>

        <value>2000</value>

    </property>

    <!--datanode会按照此间隙(单位是s)向namenode发送心跳,默认发送10次-->

    <property>

        <name>dfs.heartbeat.interval</name>

        <value>1</value>

    </property>

</configuration>

输出结果,如下图所示:

3、修改hadoop-env.sh配置文件

[root@hadoop01 hadoop]# vim hadoop-env.sh

export JAVA_HOME=/opt/install/java

输出结果,如下图所示:

4、修改slaves文件

[root@hadoop01 hadoop]# vim slaves

hadoop01

hadoop02

hadoop03

输出结果,如下图所示:

四、将配置好的文件分发给集群中其他节点

1、将hadoop的安装目录分发给集群中的其他节点

[root@hadoop01 hadoop]# cd /opt/install/

[root@hadoop01 install]# scp -r hadoop/ hadoop02:/opt/install/

[root@hadoop01 install]# scp -r hadoop/ hadoop03:/opt/install/

2、将配置好的环境变量分发给集群中的其他节点

[root@hadoop01 install]# scp /etc/profile hadoop02:/etc/

[root@hadoop01 install]# scp /etc/profile hadoop03:/etc/

五、创建配置文件中的所需目录

[root@hadoop01 install]# mkdir -p /data/hadoop/journal

[root@hadoop01 install]# mkdir -p /data/hadoop/namenode

[root@hadoop01 install]# mkdir -p /data/hadoop/datanode

[root@hadoop01 install]# mkdir -p /data/hadoop/tmp

六、启动管理日志的JournalNode

[root@hadoop01 install]# hadoop-daemon.sh start journalnode

[root@hadoop02 ]# hadoop-daemon.sh start journalnode

[root@hadoop03 ]# hadoop-daemon.sh start journalnode

七、格式化Namenode

1、在hadoop01节点上格式化Namenode

[root@hadoop01 install]# hdfs namenode -format

输出结果,如下图所示:

2、格式化成功后,在hadoop01节点上启动Namenode

[root@hadoop01 install]# hadoop-daemon.sh start namenode

输出结果,如下图所示:

八、在hadoop02上同步hadoop01的元数据

1、格式化hadoop02的Namenode,并同步hadoop01主节点的元数据信息

[root@hadoop02 install]# hdfs namenode -bootStrapStandby

输出结果,如下图所示:

2、启动hadoop02的NameNode节点

[root@hadoop02 install]# hadoop-daemon.sh start namenode

输出结果,如下图所示:

此时,我们可以通过web页面的形式观察namenode节点的状态

通过登录hadoop01可以看到,hadoop01此时为standby状态

登录hadoop02后,发现此时也同样为standby状态

九、zkfc对接hdfs,实现主备抢占

1、格式化zkfc

[root@hadoop01 install]# hdfs zkfc -formatZK

输出结果,如下图所示:

2、在hadoop01上启动zkfc

[root@hadoop01 install]# hadoop-daemon.sh start zkfc

输出结果,如下图所示:

3、在hadoop02上启动zkfc

[root@hadoop02 install]# hadoop-daemon.sh start zkfc

输出结果,如下图所示:

当zkfc启动成功后,再次刷新hadoop的web界面,并观察Namenode节点的状态,hadoop01的状态由原来的standby变为Active,成为主节点。

而hadoop02的状态则维持不变。

十、启动DataNode

所有节点启动DataNode节点

[root@hadoop01 install]# hadoop-daemons.sh start datanode

输出结果,如下图所示:

刷新web页面,单击“datanodes”标签

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql程序介绍,选项介绍(常用选项,指定选项的方式,特性),命令介绍(查看,部分命令),从sql文件执行sql语句的两种方法

目录 mysql程序 介绍 选项 介绍 常用选项 指定选项的方式 ​编辑配置文件 环境变量 选项特性 指定选项 选项名 选项值 命令 介绍 查看客户端命令 tee/notee prompt source system help contents 从.sql文件执行sql语句 介绍 方式 source 从外部直接导入…

PDF处理的创新工具:福昕低代码平台尝鲜实现PDF2word功能

在当今数字化时代&#xff0c;PDF文件的处理和管理变得越来越重要。福昕低代码平台是新发布的一款创新的工具&#xff0c;旨在简化PDF处理和管理的流程。通过这个平台&#xff0c;用户可以通过简单的拖拽界面上的按钮&#xff0c;轻松完成对Cloud API的调用工作流&#xff0c;而…

【C++】C++11(统一列表初始化、声明、右值引用)

&#x1f308;个人主页&#xff1a;秦jh_-CSDN博客&#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12575764.html?spm1001.2014.3001.5482 ​ 目录 C11简介 统一的列表初始化 &#xff5b;&#xff5d;初始化 std::initializer_list 声明 …

对比九种MySQL高可用方案

文章目录 一、读写分离如何在业务中落地什么时候需要读写分离MySQL 主从复制技术--binlog日志主从复制过程存在主从复制延时问题主从同步延迟的解决方案主从复制如何避免丢数据总结二、对比九种MySQL高可用方案组复制、半同步复制、异步复制主从复制方案选型-异步复制主从复制方…

再用RNN神经网络架构设计生成式语言模型

上一篇&#xff1a;《用谷歌经典ML方法方法来设计生成式人工智能语言模型》 序言&#xff1a;市场上所谓的开源大语言模型并不完全开源&#xff0c;通常只提供权重和少量工具&#xff0c;而架构、训练数据集、训练方法及代码等关键内容并未公开。因此&#xff0c;要真正掌握人…

httprunner实践样例

目录 1. 安装 HTTPRunner 2. 基本概念和目录结构 3. 编写一个 HTTPRunner 测试用例&#xff08;YAML 示例&#xff09; 4. 运行测试用例 5. 使用 Python 编写测试用例 6. 运行 Python 测试用例 7. 集成测试报告 8. 高级用法&#xff1a;集成环境变量、外部数据 9. 集成…

没有在 SCM 配置或者插件中的 Git 存储库配置错误

问题&#xff1a; jenkins 配置新项目后首次运行报错如下&#xff0c;同时git代码分支无法选择。 已返回默认值 没有在 SCM 配置或者插件中的 Git 存储库配置错误 选项"使用仓库"设置为:"http://xxxx.git 请检查配置 原因&#xff1a; 配置pipeline 脚本时指…

HBU深度学习实验15-循环神经网络(2)

LSTM的记忆能力实验 飞桨AI Studio星河社区-人工智能学习与实训社区 (baidu.com) 长短期记忆网络&#xff08;Long Short-Term Memory Network&#xff0c;LSTM&#xff09;是一种可以有效缓解长程依赖问题的循环神经网络&#xff0e;LSTM 的特点是引入了一个新的内部状态&am…

算法日记 46 day 图论(并查集)

题目&#xff1a;冗余连接 108. 冗余连接 (kamacoder.com) 题目描述 有一个图&#xff0c;它是一棵树&#xff0c;他是拥有 n 个节点&#xff08;节点编号1到n&#xff09;和 n - 1 条边的连通无环无向图&#xff08;其实就是一个线形图&#xff09;&#xff0c;如图&#xff…

二叉树优选算法(一)

一、根据二叉树创建字符串 题目介绍&#xff1a; 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 "()" 表示&#xff0c;转化后需…

RabbitMq死信队列延迟交换机

架构图 配置 package com.example.demo.config;import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class DeadLetterConfig {public String …

JavaWeb学习--cookie和session,实现登录的记住我和验证码功能

目录 &#xff08;一&#xff09;Cookie概述 1.什么叫Cookie 2.Cookie规范 3.Cookie的覆盖 4.cookie的最大存活时间 ​​​​​​&#xff08;Cookie的生命&#xff09; &#xff08;二&#xff09; Cookie的API 1.创建Cookie&#xff1a;new 构造方法 2.保存到客户端浏…

开启第二阶段---蓝桥杯

一、12.10--数据类型的范围及转化 今天是刚开始&#xff0c;一天一道题 对于这道题我想要记录的是Java中的整数默认是 int 类型&#xff0c;如果数值超出了 int 的范围&#xff0c;就会发生溢出错误。为了避免这个问题&#xff0c;可以将数字表示为 long 类型&#xff0c;方法…

黑马头条学习笔记

Day01-环境搭建 项目概述 课程大纲 业务说明 技术栈 Spring-Cloud-Gateway : 微服务之前架设的网关服务&#xff0c;实现服务注册中的API请求路由&#xff0c;以及控制流速控制和熔断处理都是常用的架构手段&#xff0c;而这些功能Gateway天然支持 运用Spring Boot快速开发…

详解RabbitMQ在Ubuntu上的安装

​​​​​​​ 目录 Ubuntu 环境安装 安装Erlang 查看Erlang版本 退出命令 ​编辑安装RabbitMQ 确认安装结果 安装RabbitMQ管理界面 启动服务 查看服务状态 通过IP:port访问 添加管理员用户 给用户添加权限 再次访问 Ubuntu 环境安装 安装Erlang RabbitMq需要…

SpringBoot【二】yaml、properties两配置文件介绍及使用

一、前言 续上一篇咱们已经搭建好了一个springboot框架雏形。但是很多初学的小伙伴私信bug菌说&#xff0c;在开发项目中&#xff0c;为啥.yaml的配置文件也能配置&#xff0c;SpringBoot 是提供了两种2 种全局的配置文件嘛&#xff0c;这两种配置有何区别&#xff0c;能否给大…

Excel的文件导入遇到大文件时

Excel的文件导入向导如何把已导入数据排除 入起始行&#xff0c;选择从哪一行开始导入。 比如&#xff0c;前两行已经导入了&#xff0c;第二次导入的时候排除前两行&#xff0c;从第三行开始&#xff0c;就将导入起始行设置为3即可&#xff0c;且不勾选含标题行。 但遇到大文…

Windows平台Unity3D下RTMP播放器低延迟设计探讨

技术背景 好多开发者希望我们分享下大牛直播SDK是如何在Unity下实现低延迟的RTMP播放的&#xff0c;以下是一些降低 Unity 中 RTMP 播放器延迟的方法&#xff1a; 一、选择合适的播放插件或工具 评估和选用专业的流媒体插件 市场上有一些专门为 Unity 设计的流媒体插件&…

PaddleOCR模型ch_PP-OCRv3文本检测模型研究(一)骨干网络

从源码上看&#xff0c;PaddleOCR一共支持四个版本&#xff0c;分别是PP-OCR、PP-OCRv2、PP-OCRv3、PP-OCRv4。本文选择PaddleOCR的v3版本的骨干网络作为研究对象&#xff0c;力图探究网络模型的内部结构。 文章目录 研究起点卷归层压发层残差层骨干网代码实验小结 研究起点 参…

log4j漏洞复现--vulhub

声明&#xff1a;学习过程参考了同站的B1g0rang大佬的文章 Web网络安全-----Log4j高危漏洞原理及修复(B1g0rang) CVE-2021-44228 RCE漏洞 Log4j 即 log for java(java的日志) &#xff0c;是Apache的一个开源项目&#xff0c;通过使用Log4j&#xff0c;我们可以控制日志信息输…