欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

HDFS高可用性HA架构原理及环境搭建

程序员文章站 2022-04-03 17:52:28
1、元数据同步 HDFS高可用性保证两个namenode内存中存储的文件系统元数据是一致的。 namenode的启动过程:一个namenode启动时,读取fsimage和edits文件,读...

1、元数据同步
HDFS高可用性保证两个namenode内存中存储的文件系统元数据是一致的。
namenode的启动过程:一个namenode启动时,读取fsimage和edits文件,读取后会生成新的fsimage和edits文件,另一个namenode同样需要去读取这两个文件,变化后的edits日志文件,同样需要读取。在启动过程中还需要注册、发送心跳报告、读取块的报告,需要向另一个namenode实时的汇报。
日志文件的安全性:cloudera公司提出:分布式日志存储方案。找到一个datanode节点目录,zookeeper在2n+1个节点上有n+1个节点日志文件写成功,就说明该日志文件写成功。写多份,再读取,节点数目必须是奇数。日志文件还可以存储在zookeeper上。
通过代理来让客户端判断现在对外提供服务的是哪台namenode。
有两个namenode,但是必须在任何情况下,只能有一个namenode对外提供服务。
HA架构还有JournalNode日志节点,用来保存运行日志,
而SecondaryNameNode在HA架构下就不需要了。
2、HDFS HA配置步骤
(1)关闭已经启动的所有进程。
(2)配置文件hdfs-site.xml。

    
            dfs.nameservices
            ns1
    

指定两个namenodeID名称:

    
            dfs.ha.namenodes.ns1
            nn1,nn2
    

指定namenode所在的机器位置以及交互端口号:

    
            dfs.namenode.rpc-address.ns1.nn1
            hadoop-senior.ibeifeng.com:8020
    
            dfs.namenode.rpc-address.ns1.nn2
            hadoop-senior02.ibeifeng.com:8020
    

指定namenode所在的机器位置以及外部交互端口号:

    
            dfs.namenode.http-address.ns1.nn1
            hadoop-senior.ibeifeng.com:50070
    
            dfs.namenode.http-address.ns1.nn2
            hadoop-senior02.ibeifeng.com:50070
    

指定日志节点的机器以及端口号以及命名空间名称:

    
            dfs.namenode.shared.edits.dir
            qjournal://hadoop-senior.ibeifeng.com:8485;hadoop-senior02.ibeifeng.com:8485;hadoop-senior03.ibeifeng.com:8485/ns1
    

指定并创建日志节点存储的位置路径:

    
           dfs.journalnode.edits.dir  
           /opt/app/hadoop-2.5.0/data/dfs/jn
    

指定代理访问文件系统:

    
           dfs.client.failover.proxy.provider.ns1
            org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
    

指定隔离的方式,选择的是SSH远程协议:

    
           dfs.ha.fencing.methods
           sshfence
    
           dfs.ha.fencing.ssh.private-key-files
           /home/beifeng/.ssh/id_rsa
    

(3)配置文件core-site.xml,指定命名空间:

    
            fs.defaultFS
            hdfs://ns1
    

(4)将配置分发到各个节点
[beifeng@hadoop-senior etc]$ scp -r hadoop/
hadoop-senior02.ibeifeng.com:/opt/app/hadoop-2.5.0/etc/
(5)先启动zookeeper和日志节点(三台机器上都启动)
$ cd /opt/app/zookeeper-3.4.5/
$ bin/zkServer.sh start
$ bin/zkServer.sh status
$ cd /opt/app/hadoop-2.5.0/
$ sbin/hadoop-daemon.sh start journalnode
(6)格式化namenode
注意:如果不清楚有什么选项,可以在输入的命令后加-help
$ bin/hdfs namenode -format
启动namenode(一台namenode启动)
$ sbin/hadoop-daemon.sh start namenode
另一台namenode做同步
$ bin/hdfs namenode -bootstrapStandby
启动datanode(三台datanode都启动)
$ sbin/hadoop-daemon.sh start datanode
将一台namenode转为活跃
$ bin/hdfs haadmin -transitionToActive
(7)向HDFS上传文件
$ bin/hdfs dfs -put etc/hadoop/hdfs-site.xml /user/beifeng/temp/conf
将活跃的namenode进程杀死
$ kill -9 3306
将不活跃的namenode进程转为活跃,通过查看HDFS上的文件,以验证HDFS是否共享
$ bin/hdfs haadmin -transitionToActive nn2
查看HA服务状态:
$ bin/hdfs haadmin -getServiceState
(8)关闭NameNode:
$ sbin/hadoop-daemon.sh stop namenode
关闭JournalNode:
$ sbin/hadoop-daemon.sh stop journalnode
关闭zookeeper:
zookeeper-3.4.5]$ bin/zkServer.sh stop