HDFS HA高可用性
1.active namenode 对外提供服务,standby namenode 时刻待机准备
2.保证两个namenode的元数据相同
3.共同读取日志文件
4.一写写多份,再读取
5.JournalNode 日志节点,专门管理日志文件
JN是轻量级的,可以和其他守护线程放在一起
6.DataNode需要实时想standby 提供信息
7.在任何时候都保证只有一个namenode提供服务,由zk选举
8.隔离机制,
SSH
shell
==================================================================================================================
HDFS HA 高可用环境配置
官方文档网址:
http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
hadoop官网>doc>HDFS--High Availability With QJM
1.准备(zk和hadoop在同一目录下)
一个完全分布式hadoop环境
一个完全分布式zookeeper环境
建议备份,跌倒可以迅速爬起来
配置之前,关闭所有服务
2.修改配置
修改hdfs-site.xml文件
删除:
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>bigdata-senior01.ibeifeng.com:50090</value>
</property>
添加属性:namenode管理的元数据空间起一个逻辑名称
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
//指定两个namenode的逻辑名称
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
//指定两个namenode的实例,RPC内部通讯,监听地址
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>bigdata-senior01.ibeifeng.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>bigdata-senior02.ibeifeng.com:8020</value>
</property>
//指定两个namenode的实例,http监听地址
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>bigdata-senior01.ibeifeng.com:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>bigdata-senior02.ibeifeng.com:50070</value>
</property>
//指定journalnode日志节点的URI
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://bigdata-senior01.ibeifeng.com:8485;bigdata-senior02.ibeifeng.com:8485;bigdata-senior03.ibeifeng.com:8485/ns1</value>
</property>
//本地journalnode存储日志的路径
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/app/hadoop-2.5.0/data/dfs/jn</value>
</property>
//代理服务器
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
//隔离机制 (使用ssh的方式)(还有一种方式是shell脚本方式)
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/user/.ssh/id_rsa</value>
</property>
//指定是否开启故障自动转移功能
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
在core-site.xml中配置
//指定zk的实例和端口号
<property>
<name>ha.zookeeper.quorum</name>
<value>bigdata-senior01.ibeifeng.com:2181,bigdata-senior02.ibeifeng.com:2181,bigdata-senior03.ibeifeng.com:2181</value>
</property>
//修改value,指定管理的命名空间
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
3.将配置分发到各个节点上(-r是递归操作,将文件夹下所有文件一起发送)
scp -r hadoop/ bigdata-senior02.ibeifeng.com:/opt/app/hadoop-2.5.0/etc/
scp -r hadoop/ bigdata-senior03.ibeifeng.com:/opt/app/hadoop-2.5.0/etc/
4.启动(所有机台都要开启)
在每个节点上都开启zk(在zk目录下)
bin/zkServer.sh start
bin/zkServer.sh status //查看zk的状态
注意:先启动所有节点的zk,再启动所有节点的jn
//在hadoop目录下启动journalnode
sbin/hadoop-daemon.sh start journalnode
5.如果是新的集群,要格式化namenode,如果不是新的集群,则不用
在hadoop目录下
bin/hdfs namenode -format //只需要格式化一台机器,(两个namenode管理的是同一个元数据空间)
//启动第一台的namenode
sbin/hadoop-daemon.sh start namenode
bin/hdfs namenode -help //查看namenode的帮助信息
//同步元数据(在第二台机器hadoop目录下执行,前提,第一台的namenode必须已经启动)
bin/hdfs namenode -bootstrapStandby
如果出现下面这段信息,表示同步成功:
=====================================================
About to bootstrap Standby ID nn2 from:
Nameservice ID: ns1
Other Namenode ID: nn1
Other NN's HTTP address: http://bigdata-senior01.ibeifeng.com:50070
Other NN's IPC address: bigdata-senior01.ibeifeng.com/192.168.120.100:8020
Namespace ID: 709894416
Block pool ID: BP-1204126035-192.168.120.100-1518074591381
Cluster ID: CID-fc247b74-47e8-4f4a-9f63-78b8661b7d4e
Layout version: -57
=====================================================
在页面上访问第一第二台机器的50070端口,查看namenode是否正常
启动datanode
sbin/hadoop-daemon.sh start datanode
//先暂时关闭namenode
sbin/hadoop-daemon.sh stop namenode
//开启监听器,在有主节点的机器上,其他机器开了也没效果,zkfc只会监听主节点
bin/hdfs zkfc -formatZK
//在有Nemenode的机器上开启监听器功能
sbin/hadoop-daemon.sh start zkfc
1.active namenode 对外提供服务,standby namenode 时刻待机准备
2.保证两个namenode的元数据相同
3.共同读取日志文件
4.一写写多份,再读取
5.JournalNode 日志节点,专门管理日志文件
JN是轻量级的,可以和其他守护线程放在一起
6.DataNode需要实时想standby 提供信息
7.在任何时候都保证只有一个namenode提供服务,由zk选举
8.隔离机制,
SSH
shell
==================================================================================================================
HDFS HA 高可用环境配置
官方文档网址:
http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
hadoop官网>doc>HDFS--High Availability With QJM
1.准备(zk和hadoop在同一目录下)
一个完全分布式hadoop环境
一个完全分布式zookeeper环境
建议备份,跌倒可以迅速爬起来
配置之前,关闭所有服务
2.修改配置
修改hdfs-site.xml文件
删除:
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>bigdata-senior01.ibeifeng.com:50090</value>
</property>
添加属性:namenode管理的元数据空间起一个逻辑名称
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
//指定两个namenode的逻辑名称
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
//指定两个namenode的实例,RPC内部通讯,监听地址
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>bigdata-senior01.ibeifeng.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>bigdata-senior02.ibeifeng.com:8020</value>
</property>
//指定两个namenode的实例,http监听地址
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>bigdata-senior01.ibeifeng.com:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>bigdata-senior02.ibeifeng.com:50070</value>
</property>
//指定journalnode日志节点的URI
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://bigdata-senior01.ibeifeng.com:8485;bigdata-senior02.ibeifeng.com:8485;bigdata-senior03.ibeifeng.com:8485/ns1</value>
</property>
//本地journalnode存储日志的路径
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/app/hadoop-2.5.0/data/dfs/jn</value>
</property>
//代理服务器
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
//隔离机制 (使用ssh的方式)(还有一种方式是shell脚本方式)
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/user/.ssh/id_rsa</value>
</property>
//指定是否开启故障自动转移功能
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
在core-site.xml中配置
//指定zk的实例和端口号
<property>
<name>ha.zookeeper.quorum</name>
<value>bigdata-senior01.ibeifeng.com:2181,bigdata-senior02.ibeifeng.com:2181,bigdata-senior03.ibeifeng.com:2181</value>
</property>
//修改value,指定管理的命名空间
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
3.将配置分发到各个节点上(-r是递归操作,将文件夹下所有文件一起发送)
scp -r hadoop/ bigdata-senior02.ibeifeng.com:/opt/app/hadoop-2.5.0/etc/
scp -r hadoop/ bigdata-senior03.ibeifeng.com:/opt/app/hadoop-2.5.0/etc/
4.启动(所有机台都要开启)
在每个节点上都开启zk(在zk目录下)
bin/zkServer.sh start
bin/zkServer.sh status //查看zk的状态
注意:先启动所有节点的zk,再启动所有节点的jn
//在hadoop目录下启动journalnode
sbin/hadoop-daemon.sh start journalnode
5.如果是新的集群,要格式化namenode,如果不是新的集群,则不用
在hadoop目录下
bin/hdfs namenode -format //只需要格式化一台机器,(两个namenode管理的是同一个元数据空间)
//启动第一台的namenode
sbin/hadoop-daemon.sh start namenode
bin/hdfs namenode -help //查看namenode的帮助信息
//同步元数据(在第二台机器hadoop目录下执行,前提,第一台的namenode必须已经启动)
bin/hdfs namenode -bootstrapStandby
如果出现下面这段信息,表示同步成功:
=====================================================
About to bootstrap Standby ID nn2 from:
Nameservice ID: ns1
Other Namenode ID: nn1
Other NN's HTTP address: http://bigdata-senior01.ibeifeng.com:50070
Other NN's IPC address: bigdata-senior01.ibeifeng.com/192.168.120.100:8020
Namespace ID: 709894416
Block pool ID: BP-1204126035-192.168.120.100-1518074591381
Cluster ID: CID-fc247b74-47e8-4f4a-9f63-78b8661b7d4e
Layout version: -57
=====================================================
在页面上访问第一第二台机器的50070端口,查看namenode是否正常
启动datanode
sbin/hadoop-daemon.sh start datanode
//先暂时关闭namenode
sbin/hadoop-daemon.sh stop namenode
//开启监听器,在有主节点的机器上,其他机器开了也没效果,zkfc只会监听主节点
bin/hdfs zkfc -formatZK
//在有Nemenode的机器上开启监听器功能
sbin/hadoop-daemon.sh start zkfc