Hadoop的HA集群搭建

一. 环境准备

1. 三台机器(两个NameNode,三个DataNode)

备注:NameNode节点也可以当做DataNode
172.16.132.136     NameNode    DataNode
172.16.132.179     NameNode    DataNode
172.16.132.180                 DataNode

2. 设置每台机器的主机名

hostnamectl set-hostname node136
hostnamectl set-hostname node179
hostnamectl set-hostname node180

3. 检查每台机器的主机名是否设置成功

hostname

4. 在/etc/hosts文件设置主机名和ip的映射关系

二. 设置机器之间的免密登录

1. 分别在node134 node135 node136生成秘钥(公钥和私钥)

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 

2. 分别进入node134 node135 node136的/root/.ssh目录下,拷贝公钥到本机器和其他机器(共9次)

以node134为例:
ssh-copy-id -i ~/.ssh/id_rsa.pub node134
ssh-copy-id -i ~/.ssh/id_rsa.pub node135
ssh-copy-id -i ~/.ssh/id_rsa.pub node136

3. 检验免密登录是否成功(每台机器都要测试)

ssh node134   ssh node135   ssh node136

在这里插入图片描述

三. zookeeper搭建(资源协调)

参考:zookeeper集群搭建

四. 集群搭建

1.jdk配置(每台机器配置的目录要一致)

下载jdk包之后解压到相应的目录,我的安装路径位:/opt/jdk1.8
 安装后添加如下语句到/etc/profile中:
 export JAVA_HOME=/opt/jdk1.8
 export JRE_HOME=/opt/jdk1.8/jre
 export CLASS_PATH=$CLASS_PATH:$JAVA_HOME/lib:$JRE_HOME/lib
 export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

在这里插入图片描述

添加完之后保存,使用source /etc/profile命令使配置生效;

2.配置Hadoop环境

下载hadoop的二进制安装包,解压到/opt目录下
安装后添加如下语句到/etc/profile中:
export HADOOP_HOME=/opt/hadoop-3.1.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

在这里插入图片描述

3. 修改配置文件(目录:/opt/hadoop-3.1.2/etc/hadoop)

  vim hadoop-env.sh   vim yarn-env.sh    vim mapred-env.sh    

在这里插入图片描述

4. 配置core-site.xml

<configuration>
   <!--指定Hadoop的临时目录-->
   <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop-3.1.2/tmp</value>
   </property>
   <!--指定HDFS中NameNode的地址-->
   <!--在HA中需要和hdfs-site.xml中的dfs.nameservices属性保持一致-->
   <!--普通集群中配置成:hdfs://node136:9000-->
   <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
   </property>
   <property>
        <name>ha.zookeeper.quorum</name>
        <value>node136:2181,node179:2181,node180:2181</value>
     </property>
</configuration>

5. 配置hdfs-site.xml

<configuration>
    <!--数据备份数-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!--hdfs数据权限问题-->
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
    <!--名称自定义-->
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <!--这里高可用只配置两个namenode官方推荐3个,不超过5个-->
    <property>
      <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1, nn2</value>
    </property>
    <!--配置对应的rpc-->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>node136:9000</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>node179:9000</value>
    </property>
    <!--http的地址-->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>node136:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>node179:50070</value>
    </property>
    <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node136:8485;node179:8485;node180:8485/ns</value>
    </property>
    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/hadoop-3.1.2/journal</value>
    </property>
    <!--配置自动故障转移-->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>
                sshfence
                shell(bin/true)
        </value>
    </property>
    <!-- 配置失败自动切换实现方式 -->
    <!--name属性dfs.client.failover.proxy.provider.mycluster的mycluster必须和dfs.nameservices属性保持一致-->
    <!--否则报错:java.net.UnknownHostException: mycluster-->
    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</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>
</configuration>

6. mapreduce-site.xml配置

<configuration>
   <!--指定MapReduce运行在yarn上-->
   <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
   </property>
   <!--每个job运行完成之后的历史日志信息存入hdfs-->
   <property>
     <name>mapreduce.jobhistory.address</name>
     <value>node136:10020</value>
   </property>
   <!--通过web查看历史作业的运行情况-->
   <property>
     <name>mapreduce.jobhistory.webapp.address</name>
     <value>node136:19888</value>
   </property>
   <property>
     <name>mapred.jobtracker.address</name>
     <value>node136:9001</value>
   </property>
   <property>
      <name>yarn.app.mapreduce.am.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
   </property>
   <property>
      <name>mapreduce.map.env</name>
      <value>HADOOP_MAPRED_HOME=${HADDOP_HOME}</value>
   </property>
   <property>
      <name>mapreduce.reduce.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
   </property>
   <!--指定mapreduce的lib库,否则无法运行wordcount实例-->
   <property>
      <name>mapreduce.application.classpath</name>
      <value>/opt/hadoop-3.1.2/share/hadoop/mapreduce/*, /opt/hadoop-3.1.2/share/hadoop/mapreduce/lib/*</value>
   </property>
</configuration>

7. yarn-site.xml

<configuration>
   <!--开启高可用-->
   <property>
      <name>yarn.resourcemanager.ha.enabled</name>
      <value>true</value>
   </property>
   <property>
      <name>yarn.resourcemanager.cluster-id</name>
      <value>rmha</value>
   </property>
   <property>
      <name>yarn.resourcemanager.ha.rm-ids</name>
      <value>rm1,rm2</value>
   </property>
   <property>
      <name>yarn.resourcemanager.hostname.rm1</name>
      <value>node136</value>
   </property>
   <property>
      <name>yarn.resourcemanager.hostname.rm2</name>
      <value>node179</value>
   </property>
   <property>
      <name>yarn.resourcemanager.webapp.address.rm1</name>
      <value>node136:8088</value>
   </property>
   <property>
      <name>yarn.resourcemanager.webapp.address.rm2</name>
      <value>node179:8088</value>
   </property>
   <property>
      <name>hadoop.zk.address</name>
      <value>node136:2181,node179:2181,node180:2181</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

8. 配置workers(既DataNode节点)

在这里插入图片描述

五. 启动集群

1.在node136上启动journalnode

hadoop-daemons.sh start journalnode

2. 在node136上格式化HDFS

hdfs namenode -format

3. 在node136上启动NameNode

hadoop-daemon.sh start namenode

4. 在node179上同步node136的信息

hdfs namenode -bootstrapStandby

5. 在node136上暂停NameNode

hadoop-daemon.sh stop namenode

6.在node136上格式化zk

hdfs  zkfc  -formatZK

7. 在node136上启动集群

start-all.sh

8.启动之后在各个节点查看进程jps

node136
在这里插入图片描述
node179
在这里插入图片描述
node180
在这里插入图片描述

9.查看页面

node136为active状态
在这里插入图片描述
node179为standby状态
在这里插入图片描述

10. 测试mapreduce功能

在hdfs中创建目录,并上传需要计算的文件(英文txt)
在这里插入图片描述
进入到/opt/hadoop-3.1.2/share/hadoop/mapreduce目录(hadoop自带的示例)
在这里插入图片描述
执行wordcount示例:hadoop jar hadoop-mapreduce-examples-3.1.2.jar wordcount /in /out
注意:在执行之前out目录一定是不存在的,hadoop不允许计算结果覆盖。
在这里插入图片描述
页面查看计算结果(下载到本地查看统计结果)
在这里插入图片描述

六. 编写自己的MapReduce功能

下会分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Hadoop High Availability (HA) 集群是为了提高Apache Hadoop集群的可靠性和可用性而设计的一种架构。它通过将关键服务(如NameNode和JobTracker)冗余部署,并在主节点故障时自动切换到备用节点,保证了数据处理任务的持续进行。下面是Hadoop HA集群搭建的基本步骤: 1. **安装并配置Hadoop**: - 安装Hadoop到两个或更多节点上,每个节点都是一个独立的Hadoop集群实例。 - 配置`core-site.xml`和`hdfs-site.xml`文件,设置集群的名称节点(NameNode)和数据节点(DataNodes)。 2. **启用HDFS HA**: - 在`hdfs-site.xml`中,设置`ha.fencing.methods`指定节点之间的心跳检测方法,例如SSH或JMX。 - 创建一个HDFS HA配置文件,如`core-site.xml.template`,并在实际集群中创建对应的配置文件。 3. **配置高可用NameNode**: - 设置`ha.zookeeper.quorum`为ZooKeeper集群地址,用于选举新的Active NameNode。 - 配置`dfs.nameservice.id`定义NameNode服务名。 - 在`hdfs-site.xml`中启用`dfs.ha.namenodes.<nameservice-id>`属性。 4. **设置Secondary NameNode**: - 在`hdfs-site.xml`中启用`dfs.ha.automatic-failover.enabled`,并配置`dfs.ha.automatic-failover.retry-interval`和`dfs.ha.automatic-failover.timeout`。 5. **配置ZooKeeper**: - 如果没有使用ZooKeeper,需要配置一个或多个ZooKeeper服务器作为NameNode服务选举的协调器。 6. **启动HDFS服务**: - 启动HDFS集群,包括两个NameNode(一个为主,一个为备)和足够的DataNodes。 7. **验证集群状态**: 使用`hdfs haadmin`命令检查集群状态、启动/关闭心跳检测和手动触发Failover。 8. **配置YARN HA**: 对于YARN资源管理器,类似地,需要配置ResourceManager HA(RMHA),并设置HA模式。 9. **测试和监控**: 确保服务可用,执行负载测试,并设置监控工具(如Hadoop Metrics2或Ganglia)来监控性能和异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

victor-维克特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值