Hadoop集群的高可用(HA)搭建

环境准备

bash

export ZK_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZK_HOME/bin

plaintext

dataDir=/usr/local/src/zookeeper/zkdata
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

配置 HDFS 高可用性

xml

<configuration>
    <!-- hdfs分布式文件系统名字/地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>
    <!--存放namenode、datanode数据的根路径 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/src/hadoop/data</value>
    </property>
    <!-- 存放journalnode数据的地址 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/src/hadoop/data/jn</value>
    </property>
    <!-- 列出运行ZooKeeper服务的主机端口对 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
</configuration>

xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- 服务的逻辑名称,使用mycluster替换master:9000作为逻辑名称 -->
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>master:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>slave1:8020</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>master:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>slave1:50070</value>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
    </property>
    <property>
        <name>dfs.journalnode.http-address</name>
        <value>${dfs.namenode.http-address}:8480</value>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
</configuration>

配置 YARN 高可用性

修改hadoop/etc/hadoop/yarn-site.xml文件,添加以下内容:

<configuration>
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>mycluster</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address.rm1</name>
        <value>master:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address.rm2</name>
        <value>slave1:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>master:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>slave1:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
</configuration>

启动 Hadoop 集群

  • 节点规划:假设我们有一个三节点的集群,节点名称分别为 master、slave1、slave2,其中 master 节点运行 Active NameNode 和 ResourceManager,slave1 节点运行 Standby NameNode 和 ResourceManager,slave2 节点作为辅助节点,三个节点都运行 ZooKeeper、DataNode 和 NodeManager。
  • 软件安装:确保每个节点都安装了 Java 环境,并且安装了 Hadoop 和 ZooKeeper 软件,可通过解压相应的安装包进行安装,并配置好环境变量。
  • 时间同步:确保所有节点的时间同步,可使用 NTP 服务进行时间同步。
  • 免密登录:配置各节点之间的免密登录,特别是 NameNode 节点之间以及 NameNode 与其他节点之间
  • 配置 ZooKeeper 集群

  • 解压 ZooKeeper 安装包,例如:tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/src
  • 设置环境变量,在.bash_profile文件中添加:
  • 配置zoo.cfg文件,先创建数据目录mkdir zkdata,然后在zoo.cfg中添加以下内容:
  • 将 ZooKeeper 目录分发到其他节点,如:scp -r zookeeper/ root@slave2:/usr/local/src
  • 在每个节点的zkdata目录中创建myid文件,并根据节点编号写入相应的数字,如在 master 节点上执行echo 1>myid,在 slave1 节点上执行echo 2>myid,在 slave2 节点上执行echo 3>myid
  • 启动 ZooKeeper,在每个节点上执行cd /usr/local/src/zookeeper/bin,然后执行./zkServer.sh start,并通过./zkServer.sh status查看状态。
  • 修改hadoop/etc/hadoop/core-site.xml文件,添加以下内容:
  • 修改hadoop/etc/hadoop/hdfs-site.xml文件,添加以下内容:
  • 启动 JournalNode,在每个节点上执行hadoop-daemon.sh start journalnode
  • 格式化其中一个 NameNode,如在 master 节点上执行hdfs namenode -format
  • 启动格式化后的 NameNode,执行hadoop-daemon.sh start namenode
  • 将该 NameNode 的元数据同步到另一个 NameNode,在 slave1 节点上执行hdfs namenode -bootstrapStandby
  • 格式化 ZooKeeper 中的 HA 状态,执行hdfs zkfc -formatZK
  • 启动 HDFS 集群,执行start-dfs.sh
  • 启动 YARN 集群,执行start-yarn.sh
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值