设为首页 加入收藏

TOP

Hadoop2.7.5 HA(高可用)
2019-01-10 00:22:25 】 浏览:27
Tags:Hadoop2.7.5 可用

1.高可用的概念

HA(High Available):高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。

2.hadoop为什么需要高可用

client:访问hadoop的客服端

NameNode:主节点,接受和响应客户端的请求,管理数据

SecondaryNameNode:第二个主节点,并不是NameNode的备份,而是为NameNode镜像备份和日志与镜像的定期合并,防止Namenode的节点故障,并减少NameNode的启动时间

DataNode:存放数据块的节点,为数据提供冗余保护

block:数据块,旧版(1.x)的hadoop的block默认大小为64mb,新版(2.x)的block默认大小为128mb,也可以手动设置大小和副本数,默认副本数为3

那么问题来了,当运行NameNode的服务器死机,那么整个hadoop就无法使用

3.Hadoop的高可用架构(hadoop2.x以后才支持HA)

zookeeper:本身是一个高可用的集群,用于维护配置信息,命名,提供分布式同步和提供组服务

journalnode(hadoop自带的):管理NameNode的edits,也是高可用的集群依赖于zookeeper

zkfc(进程):检查NameNode运行状态,当活跃的NameNode死掉后,会通知

阜莸腘ameNode切换为活跃状态

NameNode:分为两种状态active(活跃),standby(备份)

4.Hadoop2.7.5高可用部署

前提zookeeper安装完毕

jdk安装:www.baidu.com(输入正确的关键词)

zokeeper安装:可以参考https://blog.csdn.net/qq_40856560/article/details/81063704

1)环境准备

5台虚拟机

192.168.1.3 master NameNode resourcemange DFSZKFailoverController(zkfc) (jdk hadoop)
192.168.1.4 slave1 DataNode、NodeManager、JournalNode、QuorumPeerMain (jdk hadoop zookeeper)
192.168.1.5 slave2 DataNode、NodeManager、JournalNode、QuorumPeerMain (jdk hadoop zookeeper)
192.168.1.6 slave3 DataNode、NodeManager、JournalNode、QuorumPeerMain (jdk hadoop zookeeper)
192.168.1.7 slave4 NameNode resourcemange DFSZKFailoverController(zkfc) (jdk hadoop)

2)解压Hadoop并配置环境变量

解压Hadoop和改名

tar -zxvf hadooop-2.7.5.tar.gz -C /opt

mv /opt/hadoop2.7.5 hadoop

配置环境变量

vi /etc/profile

在文件末尾加入

export HADOOP_HOME=/opt/hadoop

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

3)修改配置文件

所有的配置文件都在 /opt/hadoop/etc/hadoop 下

a. hadoop-env.sh

找到export JAVA_HOME=${JAVA_HOME}

修改为

export JAVA_HOME=/opt/jdk(jdk安装的路径)

b.core-site.xml

vi core-site.xml

<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1/</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>slave1:2181,slave2:2181,slave3:2181</value>
</property>
</configuration>

c.hdfs-site.xml

vihdfs-site.xml

<configuration>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>master:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>master:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>slave4:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>slave4:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://slave1:8485;slave2:8485;slave3:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/hadoop/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</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>
</configuration>

d.mapred-site.xml

mv mapred-site.xml.template mapred-site.xml

vi mapred-site.xml

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

e.yarn-site.xml

vi 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>yu</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>slave1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave2</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>slave1:2181,slave2:2181,slave3:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

f.slaves

vi slaves

slave1
slave2
slave3

4)分发安装包

scp -r /opt/hadoop slave1:/opt/

scp -r /opt/hadoop slave2:/opt/

scp -r /opt/hadoop slave3:/opt/

scp -r /opt/hadoop slave4:/opt/

###注意:严格按照下面的步骤
1.启动zookeeper集群(分别在slave1、slave2、slave3上启动zk)

可以参考:https://blog.csdn.net/qq_40856560/article/details/81063704
zkServer.sh start
#查看状态:一个leader,两个follower
zkServer.sh status

2启动journalnode(分别在在slave1、slave2、slave3上执行)
hadoop-daemon.sh start journalnode
#运行jps命令检验 slave1、slave2、slave3上多了JournalNode进程(下图是slave1的,slave2和slave3也要启动)

3.格式化HDFS
#在weekend01上执行命令:
hdfs namenode -format
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/weekend/hadoop-2.4.1/tmp,然后将/weekend/hadoop-2.4.1/tmp拷贝到weekend02的/weekend/hadoop-2.4.1/下。
scp -r tmp/ slave4:/opt/hadoop
##也可以这样,建议hdfs namenode -bootstrapStandby
PS:如果不报错就没有问题,报错可以留言
4.格式化ZKFC(在weekend01上执行即可)
hdfs zkfc -formatZK

5.启动HDFS(在weekend01上执行)
start-dfs.sh

6.启动YARN
start-yarn.sh


到此,hadoop-2.4.1配置完毕,可以统计浏览器访问:
http://192.168.1.3:50070
NameNode 'master:9000' (standby)


http://192.168.1.7:50070
NameNode 'slave4:9000' (active)


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇结合案例讲解MapReduce重要知识点.. 下一篇Flume日志收集

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }