Hadoop2.7.7搭建高可用(HA)集群

一、准备工作

1、集群规划

49.235.8.131  masterNameNode、DataNode、NodeManager、QuorumPeerMain、ResourceManager、DFSZKFailoverController、JournalNode
180.76.149.30 slave1NameNode、DataNode、NodeManager、QuorumPeerMain、ResourceManager、DFSZKFailoverController、JournalNode
183.76.179.221 slave2DataNode、NodeManager、JournalNode、QuorumPeerMain

2、三台机器安装JDK

3、配置SSH免密登录

4、搭建zookeeper集群

二、Hadoop集群安装

1、上传Hadoop安装包hadoop-2.7.7.tar.gz,并将其解压到hadoop(新建)目录下。

#上传安装包
[root@master hadoop]# rz -y
#解压到指定目录
[root@master software]# tar -xzvf hadoop-2.7.7.tar.gz -C /home/hadoop/

2、在hadoop目录下新建hdfs目录,hdfs目录下新建data、name、tmp目录。

[root@master hdfs]# mkdir -p /home/hadoop/hdfs
[root@master hdfs]# mkdir -p /home/hadoop/hdfs/data
[root@master hdfs]# mkdir -p /home/hadoop/hdfs/name
[root@master hdfs]# mkdir -p /home/hadoop/hdfs/tmp

3、修改hadoop-env.sh文件,配置HAVA_HOME如下

[root@master hdfs]# vim /home/hadoop/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/java/jdk1.8.0_161

4、修改core-site.xml

<configuration>
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
<property>
   <name>hadoop.tmp.dir</name>
   <value>/home/hadoop/hdfs/tmp</value>
</property>
<property>
   <name>io.file.buffer.size</name>
   <value>131072</value>
</property>
<property>
   <name>hadoop.proxyuser.root.hosts</name>
   <value>*</value>
</property>
<property>
   <name>hadoop.proxyuser.root.groups</name>
   <value>*</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
  <name>ha.zookeeper.quorum</name>
  <value>master:2181,slave1:2181,slave2:2181</value>
</property>
</configuration>

5、修改hdfs-site.xml

<configuration>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- nn1,nn2的rpc远程过程调用地址和端口-->
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>master:9000</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>slave1:9000</value>
</property>
<!-- 两个名称节点nn1,nn2的webserver地址-->
<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>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/home/hadoop/journal/data/</value>
</property>

<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 指定该集群出故障时,哪个实现类负责执行故障切换 -->
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--容灾发生时,用于杀死原先active node,确保只有一个active态node-->
<!-- shell(/bin/true)确保防护方法最后返回成功 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!--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、修改mapred-site.xml

<configuration>
<!-- 指定mr框架为yarn方式 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

7、修改yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
<!-- 开启RM高可用 -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>

<!-- 指定RM的cluster id -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yrc</value>
    </property>

<!-- 指定RM的名字 -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>

<!-- 分别指定RM的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>master</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>slave1</value>
    </property>

<!-- 指定zk集群地址 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
    </property>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

</configuration>

8、修改slaves

master
slave1
slave2

三、Hadoop集群启动

1、启动zookeeper集群(master、slave1、slave2)

[root@master hadoop]# /home/zookeeper/zookeeper-3.4.14/bin/zkServer.sh start
[root@slave1 hadoop]# /home/zookeeper/zookeeper-3.4.14/bin/zkServer.sh start
[root@slave2 hadoop]# /home/zookeeper/zookeeper-3.4.14/bin/zkServer.sh start
#查看状态:一个leader,两个follower
[root@master hadoop]# /home/zookeeper/zookeeper-3.4.14/bin/zkServer.sh status
[root@slave1 hadoop]# /home/zookeeper/zookeeper-3.4.14/bin/zkServer.sh status
[root@slave2 hadoop]# /home/zookeeper/zookeeper-3.4.14/bin/zkServer.sh status

2、手动启动journalnode(分别在master、slave1、slave2上执行)

[root@master hadoop]# hadoop-daemon.sh start journalnode
[root@slave1 hadoop]# hadoop-daemon.sh start journalnode
[root@slave2 hadoop]# hadoop-daemon.sh start journalnode
#运行jps命令检验,master、slave1、slvae2上多了JournalNode进程

3、格式化namenode

 #格式化后会在根据core-site.xml中的hadoop.tmp.dir配置的目录下生成个hdfs初始化文件
[root@master hadoop]# hdfs namenode -format

4、把hadoop.tmp.dir配置的目录下所有文件拷贝到另一台namenode节点所在的机器上。

[root@master hadoop]# scp -r /home/hadoop/hdfs/ root@slave1:/home/hadoop/

5、格式化ZKFC(在active上执行即可)

[root@master hadoop]# hdfs zkfc -formatZK

6、启动HDFS

[root@master hadoop]# start-dfs.sh

7、启动YARN

[root@master hadoop]# start-yarn.sh

8、还需要手动在standby上手动启动备份的 resourcemanager

[root@slave1 hdfs]# yarn-daemon.sh start resourcemanager

9、JPS 查看启动进程

#master机器上
[root@master hadoop]# jps
28625 Jps
16258 DataNode
16472 JournalNode
5385 QuorumPeerMain
16793 ResourceManager
16906 NodeManager
16666 DFSZKFailoverController
17565 NameNode

#slave1 机器上jps
[root@slave1 hdfs]# jps
11328 NodeManager
11011 DataNode
10358 ResourceManager
11240 DFSZKFailoverController
7784 QuorumPeerMain
11113 JournalNode
11933 Jps
#slave2 机器上jps
[root@slave1 hdfs]# jps
11328 NodeManager
11011 DataNode
10358 ResourceManager
11240 DFSZKFailoverController
7784 QuorumPeerMain
11113 JournalNode
11933 Jps


四、验证集群可用性

http://49.235.8.131:50070/dfshealth.html#tab-overview

master:9000(active)

http://180.76.149.30:50070/dfshealth.html#tab-overview

slave1:9000' (standby)

测试集群工作状态的一些指令 :

# 查看hdfs的各节点状态信息
[root@master hadoop]# hdfs dfsadmin -report

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我是搬砖工人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值