hadoop hdfs ha(高可用)配置步骤

步骤

背景

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

hadoop2.x官方提供了两种HDFS HA的解决方案,一种是NFS,一种是QJM。QJM主要是主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode.

前提

  1. 三台服务器分别为hadoop01,hadoop02,hadoop03且已经在hosts中配置
  2. 三台服务器网络连通
  3. 三台服务器都已经安装好jdk和zookeeper

1. 首先解压hadoop

tar -zxvf hadoop-3.1.2.tar.gz -C /home/hadoop/app/

2. 配置环境变量

HADOOP_HOME=/home/hadoop/app/hadoop-3.1.2
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

3. 配置core-site.xml
进入配置文件目录:

cd ./hadoop-3.1.2/etc/hadoop

修改配置文件:

vi core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<!--指定hdfs的命名空间-->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://qf</value>
</property>

<property>
    <name>dfs.nameservices</name>
    <value>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:2181,hadoop02:2181,hadoop03:2181</value>
</property>

</configuration>

4. 配置hdfs-site.xml
编辑hdfs-site.xml

vi hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<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>

<!--hdfs数据存储的位置-->
<property>
<name>dfs.namenode.name.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>
</property>

<property>
    <name>dfs.namenode.rpc-address.qf.nn2</name>
    <value>hadoop02:9000</value>
</property>

<!--指定namenode的web ui通信地址-->
<property>
    <name>dfs.namenode.http-address.qf.nn1</name>
    <value>hadoop01:50070</value>
</property>

<property>
    <name>dfs.namenode.http-address.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/journaldata</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>

5. 配置hadoop启停用户
在start-dfs.sh和stop-dfs.sh中头部加入如下代码:

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

在start-yarn.sh和stop-yarn.sh中头部加入如下代码:

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

6. 配置服务器之间免密登录
首先生成密钥,在hadoop01上执行:

ssh-keygen -t rsa
ssh-copy-id -i hadoop01
ssh-copy-id -i hadoop02

完成之后直接在hadoop02这台服务器上ssh连接hadoop01

ssh hadoop01

出现如下则说明ssh免密配置成功
在这里插入图片描述
继续在hadoop02上执行如下操作:

ssh-keygen -t rsa
ssh-copy-id -i hadoop01
ssh-copy-id -i hadoop02

7. 启动zookeeper
在三台机器上分别执行zkServer.sh start:

zkServer.sh start

然后查看zookeeper的状态:

zkServer.sh status

[外链图片转存失败(img-fukm9TgS-1569397659751)(en-resource://database/2632:0)]
[外链图片转存失败(img-Izl1oD5S-1569397659752)(en-resource://database/2634:0)]
[外链图片转存失败(img-VyoBQqzC-1569397659752)(en-resource://database/2636:0)]

8. 启动journalnode
在三台服务器上分别执行如下命令:

hadoop-daemon.sh start journalnode

jps查看journalnode是否启动

9. 格式化hdfs
在hadoop01上执行如下命令:

hdfs namenode -format(首次启动执行)
hadoop-daemon.sh start namenode

在hadoop02上执行:

hdfs namenode -bootstrapStandby(首次启动执行)
hadoop-daemon.sh start namenode

10. 格式化ZKFC
在hadoop01上执行

hdfs zkfc -formatZK(首次启动执行)

11. 启动hdfs
在hadoop01上执行

hadoop-daemon.sh start zkfc
start-dfs.sh

在hadoop02上执行

hadoop-daemon.sh start zkfc

12. 测试
输入 http://192.168.130.136:50070和http://192.168.130.137:50070查看谁是active谁是standby
[外链图片转存失败(img-V5lkYqKB-1569397659753)(en-resource://database/2638:0)]
[外链图片转存失败(img-ar0hVZz6-1569397659753)(en-resource://database/2640:0)]
我的机器是hadoop01为active,hadoop02为standby

所以在hadoop01上杀死namenode进行,查看hadoop02状态是否变为active
[外链图片转存失败(img-AFFgc1Bf-1569397659754)(en-resource://database/2642:0)]

可以看到hadoop02变为active
[外链图片转存失败(img-Sn3eiPrl-1569397659755)(en-resource://database/2644:0)]

问题:hadoop HA自动切换不成功
配置好之后杀掉active的namenode,另一台服务器并没有变为active
解决办法:yum install psmisc

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值