参考的Hadoop官
如果没有看过,请参照下文搭建!我们接下来的HA(高可用模式)是基于我们完全分布式的补充
先说一下此篇文章各个节点的角色
NameNode DataNode zookeeper journalNode zkfc
node01 * * *
node02 * * * * *
node03 * * *
node04 * *
环境:
1.已经搭好完全分布式的四台虚拟机
2.zookeeper-3.4.6.tar.gz
1.背景
在Hadoop 2.0.0之前,NameNode是HDFS集群中的单点故障(SPOF)。每个群集只有一个NameNode,并且如果该计算机或进程不可用,则整个群集将不可用,直到NameNode重新启动或在单独的计算机上启动。
这从两个方面影响了HDFS群集的总可用性:
如果发生意外事件(例如机器崩溃),则在操作员重新启动NameNode之前,群集将不可用。
计划内的维护事件,例如NameNode计算机上的软件或硬件升级,将导致群集停机时间的延长。
HDFS高可用性功能通过提供以下选项来解决上述问题:在具有热备用功能的主动/被动配置中,可以在同一群集中运行两个(自3.0.0起,超过两个)冗余NameNode。这可以在计算机崩溃的情况下快速故障转移到新的NameNode,或出于计划维护的目的由管理员发起的正常故障转移。
概念补充:
主从模式:一个主,多个从。主用于读写,从用于读,如果访问从节点想要写数据,那么从节点会转给主节点,让它进行写
主备模式:“养兵千日,用兵一时”,没错,就是先备着一台主机,当主的备胎,等主挂掉了之后,备机才会被使用,在这之前只是让其与主的数据同步,不会对其进行使用。
两者区别:根本区别,一个不养着,直接使用;另外一个,等到主挂了之后,才进行使用。
2.ssh免密node01,node02
node02:
cd ~/.ssh
ssh-keygen -t dsa -P ” -f ./id_dsa
cat id_dsa.pub >> authorized_keys
scp ./id_dsa.pub node01:`pwd`/node02.pub
node01:
cd ~/.ssh
cat node02.pub >> authorized_keys
3.zookeeper集群的搭建
node02~node04
node02:
(2)将zookeeper移动到 /opt/poke/bigdata中 : mv zookeeper… /opt/poke/bigdata
(3)cd /opt/poke/bigdata/zookeeper../conf
(4)cp zoo_sample.cfg zoo.cfg
(5)vi zoo.cfg
(6)创建一个和上图datadir对应的目录 :mkdir /var/poke/bigdata/hadoop/zk
(7)设置myid 对应上图的server.x :x为myid的数值,echo 1 > /var/poke/bigdata/hadoop/zk/myid
(8)修改/etc/profile:
source /etc/profile
(9)将zookeeper拷给node03 04
cd /opt/poke/bigdata
scp -r ./zookeeper-3.4.6 node03:`pwd`
scp -r ./zookeeper-3.4.6 node04:`pwd`
node03:
mkdir /var/poke/bigdata/hadoop/zk
echo 2 > /var/poke/bigdata/hadoop/zk/myid
配置/etc/profile
source /etc/profile
node04:
mkdir /var/poke/bigdata/hadoop/zk
echo 3 > /var/poke/bigdata/hadoop/zk/myid
配置/etc/profile
source /etc/profile
最后,打开node02-node04的zookeeper
zkServer.sh start
4.修改hadoop的相关配置
cd $HADOOP_HOME/etc/hadoop
core-site.xml
fs.defaultFS
hdfs://mycluster
ha.zookeeper.quorum
node02:2181,node03:2181,node04:2181
hdfs-site.xml
dfs.replication
2
dfs.namenode.name.dir
/var/poke/bigdata/hadoop/ha/dfs/name
dfs.datanode.data.dir
/var/poke/bigdata/hadoop/ha/dfs/data
dfs.namenode.secondary.http-address
node02:50090
dfs.namenode.checkpoint.dir
/var/poke/bigdata/hadoop/ha/dfs/secondary
dfs.nameservices
mycluster
dfs.ha.namenodes.mycluster
nn1,nn2
dfs.namenode.rpc-address.mycluster.nn1
node01:8020
dfs.namenode.rpc-address.mycluster.nn2
node02:8020
dfs.namenode.http-address.mycluster.nn1
node01:50070
dfs.namenode.http-address.mycluster.nn2
node02:50070
dfs.namenode.shared.edits.dir
qjournal://node01:8485;node02:8485;node03:8485/mycluster
dfs.journalnode.edits.dir
/var/poke/bigdata/hadoop/ha/dfs/jn
dfs.client.failover.proxy.provider.mycluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
dfs.ha.fencing.ssh.private-key-files
/root/.ssh/id_dsa
dfs.ha.automatic-failover.enabled
true
5.将node02的配置分发给node01,03,04
cd $HADOOP_HOME/etc
scp -r hadoop node01:`pwd`
scp -r hadoop node03:`pwd`
scp -r hadoop node04:`pwd`
6.初始化与启动
参照前面的各个节点角色表
(1)先启动JN (node01,02) hadoop-daemon.sh start journalnode
(2)选择一个NN 做格式化(node01或者node02):hdfs namenode -format
(3) 启动这个格式化的NN ,以备另外一台同步 hadoop-daemon.sh start namenode
(4) 在另外一台机器中: hdfs namenode -bootstrapStandby(另一台备用namenode输入这个命令)
(5) 格式化zk(node01): hdfs zkfc -formatZK
(6) 开启服务(node01):start-dfs.sh
7.结果与验证(这个自己去操作)
同学们如果感觉我的理解有误,请及时指出!
最后,写作不易,如果对您有帮助的话,请点个赞!
文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8775 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!