美文网首页
HDFS使用QJM搭建HA环境

HDFS使用QJM搭建HA环境

作者: 让随着风飘 | 来源:发表于2018-07-27 13:57 被阅读23次

简介

    HA即为高可用,由于namenode有单节点故障风险所以引入HA功能。本文主要介绍如何让集群具备该功能,仅限HDFS。写下来以便可以快速参考。

本文内容主要来源于官网,若想详细了解可移步NameNode HA With QJM

环境

软件版本:hadoop3.0.3,zookeeper-3.4.9(hadoop3.0.3采用版本)

me1:namenode,datanode,JournalNode,zookeeper,DFSZKFailoverController

me2:namenode,datanode,JournalNode,zookeeper,DFSZKFailoverController

me3:namenode,datanode,JournalNode,zookeeper,DFSZKFailoverController

配置

core-site.xml

<property>

    <name>fs.defaultFS</name>

    <value>hdfs://mycluster</value>

</property>

<--配置了这个就不用配置本地存储namespace的fsimage,editlog的目录,和datanode存放数据的目录了,因为默认会存放在这个目录下面的dfs下面的name和data目录下面-->

<property>

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

    <value>/opt/data/hadoop</value>

</property>

hdfs-site.xml

<--配置nameservice服务,这个配置可以配置多个nameservice,每个nameservice都有单独的名字空间,这里只配置一个-->

<property>

    <name>dfs.nameservices</name>

    <value>mycluster</value>

</property>

<--配置HA模式一个nameservice由多少namenode组成,namenode至少两个,建议不超过5个,建议3个-->

<property>

    <name>dfs.nameservices</name>

    <value>mycluster</value>

</property>

<property>

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

    <value>nn1,nn2, nn3</value>

</property>

<--这里配置某个nameservice下面某个namenode的rpc端口-->

<property>

    <name>dfs.namenode.rpc-address.mycluster.nn1</name>

    <value>me1:8020</value>

</property>

<property>

    <name>dfs.namenode.rpc-address.mycluster.nn2</name>

    <value> me2:8020</value>

</property>

<property>

    <name>dfs.namenode.rpc-address.mycluster.nn3</name>

    <value>me3:8020</value>

</property>

<--这里配置某个nameservice下面某个namenode的http端口-->

<property>

    <name>dfs.namenode.http-address.mycluster.nn1</name>

    <value>me1:9870</value>

</property>

<property>

    <name> dfs.namenode.http-address.mycluster.nn2</name>

    <value>me2:9870</value>

</property>

<property>

    <name> dfs.namenode.http-address.mycluster.nn3</name>

    <value>me3:9870</value>

</property>

<--journalnode节点存储editlog的本地目录,建议使用nameservice的名字,这个目录存在于配置【dfs.journalnode.edits.dir】下面,建议手动创建,测试貌似没有自动创建-->

<property>

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

    <value>qjournal://me1:8485;me2:8485;me3:8485/mycluster</value>

</property>

<property>

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

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

</property>

<--这个是一种fence方式,就是检查传说死了的那个active节点到底死了没有,没死弄死,防止脑裂,会使用到fuser命令,建议提前检查是否安装了-->

<property>

    <naem>dfs.ha.fencing.methods</name>

    <value>sshfence</value>

</property>

<property>

    <name>dfs.ha.fencing.ssh.private-key-files</name>

    <value>/home/wanger/.ssh/id_rsa</value>

</property>

<--journalnode存储editlog和一些状态信息的目录-->

<property>

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

    <value>/opt/data/hadoop/jn</value>

</property>

<--开启failover功能-->

<property>

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

    <value>true</value>

</property>

<property>

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

    <value>me1:2181,me2:2181,me3:2181</value>

</property>.

hadoop-env.sh

自行修改为自己的目录

export hadoop.tmp.dir=/opt/data/hadoop

export JAVA_HOME=/opt/jdk1.8.0_144

export HADOOP_HOME=/opt/hadoop-3.0.3

配置启动datanode的节点

etc/hadoop/workers

me1

me2

me3

每台机子上需要有.ssh目录,里面需要有完整的公钥私钥等文件,参考命令ssh-keygen -t rsa

每台机子上需要有fuser工具,若未安装可执行 yum install -y psmisc,检查可用type fuser查看命令文件位置

步骤一:在me1,me2,me3安装并启动zookeeper

步骤二:将三个配置文件分别配置到每台机子上,hadoop-env.sh新增三条export即可。

步骤三:在每台namenode的节点上启动QJM,hdfs --daemon start journalnode

步骤四:新创建HA集群使用hdfs namenode -format,只需要在一个namenode节点执行即可。

步骤五:hdfs zkfc -formatZK将HA状态记录到zookeeper

步骤六:start-dfs.sh也可以一个一个地启动,这里会启动一个DFSZKFailoverController进程来监控namenode是否死亡,如果死亡发起failover操作。

步骤七:如果有namenode没有启动成功,执行hdfs namenode -bootstrapStandby,手动启动状态置为standby状态。

测试:打开me1:9870,me2:9870,me3:9870三个web页面,其中会有一个是active,另外两个是standby。

使用命令hdfs --daemon stop namenode杀死active的节点,如果正常会有一个standby转化为active。

注意事项:

正常情况下三个节点应有的进程

NameNode,DataNode,JournalNode,DFSZKFailoverController,QuorumPeerMain(zookeeper)

DFSZKFailoverController:可用hdfs --daemon start zkfc启动

hdfs --daemon start [namenode|datanode|journalnode]

需要手动创建的目录:

/opt/data/hadoop这个目录下面存放namespace,和datanode上的数据

/opt/data/hadoop/jn : QJM节点用来存放editlog文件和一些临时信息的目录,需要手动创建,包括里面的mycluster【这个是QJM所服务的nameservice名字】

虽然我自觉都写到了,看官可能会觉得有些地方可能不太详尽,若有问题,请参考官方文档,在简介连接里面。

相关文章

  • HDFS使用QJM搭建HA环境

    简介 HA即为高可用,由于namenode有单节点故障风险所以引入HA功能。本文主要介绍如何让集群具备该功能,仅...

  • HDFS

    HDFS2.0利用QJM实现HA策略

  • 基于QJM的HDFS HA

    一、目的 本指南描述了HDFS HA的特性以及如何使用QJM(Quorum Journal Manager)来配置...

  • HDFS 高可用 使用Quorum Journal Manage

    目的: 本指南提供了HDFS HA 特征,以及通过 QJM如何配置和管理 一个HA的HDF 集群的一个概览。本指南...

  • Hadoop HA

    NameNode HA NameNode HA With QJM 在Hadoop 1.X中 NameNode 存在...

  • Hadoop QJM的HA集群搭建

    一、背景说明 在Hadoop2.0.0出现之前,在HDFS集群中,NameNode是存在单点故障问题的。集群中只有...

  • Hadoop(HDFS,YARN)的HA集群安装-TOGET

    搭建Hadoop的HDFS HA及YARN HA集群,基于2.7.1版本安装。 安装规划 安装用户 garriso...

  • hadoop学习大纲

    Hadoop集群环境搭建 Hadoop集群环境搭建 HDFS 图说HDFS基本原理hadoop的shell命令操作...

  • Hadoop课程大纲

    Hadoop集群环境搭建 Hadoop集群环境搭建 HDFS 图说HDFS基本原理hadoop的shell命令操作...

  • Hadoop课程大纲

    Hadoop集群环境搭建 Hadoop集群环境搭建 HDFS 图说HDFS基本原理hadoop的shell命令操作...

网友评论

      本文标题:HDFS使用QJM搭建HA环境

      本文链接:https://www.haomeiwen.com/subject/ncawmftx.html