Hadoop搭建笔记(28)

本文是我学习Hadoop搭建过程中的各种笔记,内容来自于各种公开的教程,起点非常低,从Linux基础开始,直至在PC上搭建Hadoop成功,是真正的从零开始。

感谢过程中帮助我的各位认识的和不认识的老师。

50、Hdfs的ha介绍:

Hadoop集群1.X    单节点故障问题

ha是Hadoop集群的高可用

看图片可知,集群,一个NameNode管理3台DataNode;这样的集群存在着问题,一旦NameNodehdfs的服务就停止对外提供服务,存在着单节点故障问题,老大只有一个;

SNN : SecondaryNameNode

衍生出下面的:

Hadoop集群2.X  ,多了共享数据的存储和失败转移器

不再是一个NameNode,而是两个,一个是Active,另一个是Standby;

但是没有SecondaryNameNode,而多了一个Quorum-based Storage Share Data,这个是一个共享日志,共享数据的存储;

ZKFC :失败控制转移器 

每个老大上面都有Health Monitor, Failover,健康老大的健康情况,NameNode Active)坏了没关系,ZKFC离开切到另一个NameNode (Standby)上,由NameNode (Standby)继续提高服务;NameNodeActive)进行修复。

Zookeeper Cluster :进行监控

Hadoop 2.6 利用QJM 和 zookeeper 实现HDFS 高可用

HA: 7*24

高可用:每周7天,每天24小时都可用,不间断

前提说明apache   cdh   hdp

hadoop2.X中通常有两个NameNode组成,一个处于Active状态,另一个处于Standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步 active namenode 的状态,以便能够在它失败时快速进行切换

Hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM(由cloudra提出,原理类似zookeeper),这里使用QJM完成。主备NameNode之间通过的是一组lournalNode同步元数据信息,一条数据只有成功写入,多数lournalNode即认为写入成功。通常配置奇数个lournalNode。

高可用做规划:

hdfs的HA

规划:

IP地址

主机名称

规划

192.168.216.111

hadoop01

namenode、datanode、jouranlnode、quroumPeerMani、zkf

192.168.216.112

hadoop02

namenode、datanode、jouranlnode、quroumPeerMani、zkf

192.168.216.113

hadoop03

datanode、jouranlnode、quroumPeerMani、kf

hadoop01hadoop02上,分别启动5个进程,多了一个namenode;jouranlnode奇数个就行,一般三个.

免登陆:

老大和小弟之间:

hadoop01 --->hadoop01,hadoop02,hadoop03

hadoop02 --->hadoop01,hadoop02,hadoop03

连个老大之间:

hadoop02 < --- >hadoop01

解压配置环境变量

配置文件:

./etc/hadoop/hadoop-env.sh

./etc/hadoop/core-site.xml

./etc/hadoop/hdfs-site.xml

./etc/hadoop/slaves

配置前停止集群:stop-all.sh

[root@hadoop01 zookeeper-3.4.12]# stop-all.sh

停止集群的同时,进行备份,以免后面用到普通集群,解压从新来装:

mv/usr/local/hadoop-2.7.1/ /usr/local/hadoop-2.7.1_bak

克隆hadoop01,在克隆下的操作:

[root@hadoop01 ~]# mv /usr/local/hadoop-2.7.1/ /usr/local/hadoop-2.7.1_bak

同样的备份,分别在hadoop02,hadoop03上进行:

[root@hadoop02 ~]# mv /usr/local/hadoop-2.7.1/ /usr/local/hadoop-2.7.1_bak

[root@hadoop03 ~]# mv /usr/local/hadoop-2.7.1/ /usr/local/hadoop-2.7.1_bak

备份后,后面重新解压来装

51、Hdfs的ha配置:

此时which hadoop是没有的:

[root@hadoop01 zookeeper-3.4.12]# which hadoop

/usr/bin/which: no hadoop in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/jdk1.8.0_144//bin:/usr/local/hadoop-2.7.1//bin:/usr/local/hadoop-2.7.1//sbin:/usr/local/zookeeper-3.4.12//bin:/root/bin)

解压,在hadoop01下操作:

[root@hadoop01 zookeeper-3.4.12]# tar -zxvf /home/hadoop-2.7.1.tar.gz -C /usr/local/

 

[视频是Windows连接集群来配置]


修改env-site.xml

export JAVA_HOME=/usr/local/jdk1.8.0_144/

修改core-site.xml

 

[root@hadoop01 hadoop-2.7.1]# vi ./ect/hadoop/core-site.xml

<configuration>

<!—指定hdfs的命名空间-->   【虚拟的服务名】

<property>

<name>fs.defaultFS</name>

<value>hdfs://qf </value>

</property >

<property>

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

<value>/home/hahadoopdata/tmp</value>

</property>

<property>

<name>io.file.buffer.size</name>

<value>4096</value>

</property>

<!--指定zk的集群地址,用来协调namenode的服务-->

<property>

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

<value>hadoop01.example.com:2181,hadoop02.example.com:2181,hadoop03.example.com:2181</value>

</property>

</configuration>

配置的文件,是可以在官网找到的,直接复制过来,即可,但是很难找到,都是一个字一个字输的,一点不一样,后面就不会识别,集群不成功。

修改hdfs-site.xml 

[root@hadoop01 hadoop-2.7.1]# vi ./ect/hadoop/hdfs-site.xml

<configuration>

<!--配置副本数 -->

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<!--块大小-->

<property>

<name>dfs.block.size</name>

<value>134217728</value>

</property>

<!--hdfs的元数据存储的位置-->

<property>

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

<value>/home/hahadoopdata/dfs/name</value>

</property>

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

<value>/home/hahadoopdata/dfs/name</value>

</property>

<!--hdfs的数据存储的位置-->

<property>

<name>dfs.datanode.data.dir</name>

<value>/home/hahadoopdata/dfs/data</value>

</property>

<!--指定hdfs的虚拟服务名-->

<property>

<name>dfs.nameservices</name>

<value>qf</value>

</property>

<!--指定hdfs的虚拟服务名下的namenode的名字-->

<property>

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

<value>nn1,nn2</value>

</property>

<!--指定namenode的内部通信地址-->

<property>

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

<value>hadoop01:9000</value>   【或8020】【nn1启动在hadoop01上】

</property>

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

<value>hadoop02:9000</value>   nn2启动在hadoop02上】

</property>

<!--指定namenode的web ui通信地址-->

<property>

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

<value>hadoop01:50070</value>

</property>

<property>

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

<value>hadoop02:50070</value>

</property>

<!--指定jouranlnode数据共享目录-->

<property>

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

<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/qf</value>

</property>

<!--指定jouranlnode本地共享目录-->

<property>

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

<value>/home/hahadoopdata/journal/data</value>

</property>

<!--开启namenode失败进行自动切换-->

<property>

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

<value>true</value>

</property>

<!--指定namenode失败进行自动切换的主类-->

<property>

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

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

</property>

<!--防止多个namenode同时active (闹裂),采用某种方式杀死其中一个 -->

<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.ha.fencing.ssh.connect-timeout </name>

<value>30000</value>

</property>

<configuration>

修改slaves   (老大找小弟)

hadoop01

hadoop02

hadoop03

视频配置在图片上的地方修改,下面尝试在xshell中修改,没成功



猜你喜欢

转载自blog.csdn.net/zxqjinhu/article/details/80549646
今日推荐