高可用hadoop集群配置就收藏这一篇,动手搭建Hadoop(5)

高可用hadoop集群配置就收藏这一篇,动手搭建Hadoop(5)

首页冒险解谜SCP Site19更新时间:2024-05-09

完成了前面四步,现在做hadoop的高可用。其实和之前的lvs的高可用差不多的。如果我们有两个namenode节点,分别是node01和node02。假设node01是主节点,node02是从节点,当node01挂掉了以后,node02自动成为主节点。这里通过zookeeper的方式来实现,node01,node02都会注册到zookeeper当中,由zookeeper来实现高可用。文章有点长先收藏再阅读,开始。

准备

node01(192.168.146.101):namenode01 ,ZKFC,JNN(journalnode)

node02(192.168.146.102):namenode02,datanode,zookeeper,ZKFC,JNN

node03(192.168.146.103): datanode, zookeeper, JNN

node04(192.168.146.104): datanode,zookeeper,

hadoop配置修改

修改hadoop_env.sh 文件

在原来的基础上指定ZKFC 和journalnode 两个进程的角色,这里注意我们之前用到的从节点sencondarynamenode现在用不着了,可以remark起来。

cd /usr/hadoop-3.1.2/etc/hadoop

export JAVA_HOME=/usr/java/jdk-12.0.1

export hdfs_NAMENODE_USER=root

export HDFS_DATANODE_USER=root

#export HDFS_SECONDARYNAMENODE_USER=root

export HDFS_ZKFC_USER=root

export HDFS_JOURNALNODE_USER=root

修改core-site.xml 文件

只用修改临时文件的目录即可,原来指向full现在建立一个新目录指向ha

vi core-site.xml

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://node01:9820</value>

</property>

<property>

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

<value>/var/hadoop/ha</value>

</property>

</configuration>

修改hdfs-site.xml 文件

由于原先所有的datanode都需要和一个namenode做关联,现在做高可用需要让datanode和多个namenode做关联。因此,需要给namenode起一个logic name。同时需要配置两个namenode服务器(node01,node02)对应的rpc和httpaddress的信息。两个namenode进行同步的配置,这里需要指定journalnode服务器的地址。以及故障转移的代理类。

vi hdfs-site.xml

<configuration>

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

#逻辑namenode 名字

<property>

<name>dfs.nameservices</name>

<value>mycluster</value>

</property>

#配置两个namenode服务器

<property>

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

<value>nn1,nn2</value>

</property>

#配置rpc的调用

<property>

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

<value>node01:8020</value>

</property>

<property>

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

<value>node02:8020</value>

</property>

#配置http address

<property>

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

<value>node01:9870</value>

</property>

<property>

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

<value>node02:9870</value>

</property>

#配置journalnode节点

<property>

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

<value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>

</property>

#配置故障转移的调用

<property>

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

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

</property>

#故障隔离 当一个从节点即将要成为主节点的时候,会通知原来的主节点使之成为从节点。

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

#配置journalnode的存储地址

<property>

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

<value>/var/hadoop/ha/journalnode</value>

</property>

<property>

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

<value>true</value>

</property>

</configuration>

再回到core-site.xml文件的配置

原来配置的是一个固定的主节点的名字,现在需要使用逻辑的namenode的服务名称,也就是我们在上面hdfs-site.xml中定义的 mycluster 这个名字。以及对zookeeper集群的配置。

<property>

<name>fs.defaultFS</name>

<value>hdfs://mycluster</value>

</property>

<property>

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

<value>node02:2181,node03:2181,node04:2181</value>

</property>

分发core-site.xml hdfs-site.xml 和 hadoop-env.sh 三个文件到其他三个服务器(node02,node03,node04)

scp core-site.xml hdfs-site.xml hadoop-env.sh node02:`pwd`

scp core-site.xml hdfs-site.xml hadoop-env.sh node03:`pwd`

scp core-site.xml hdfs-site.xml hadoop-env.sh node04:`pwd`

安装配置zookeeper

由于我们之前定义的zookeeper的安装是在node02,node03,node04三个服务器。所以copy下载zookeeper的安装包。对其进行解压。这里我把zk放到/usr 这个目录下面了。

tar xf zookeeper-3.4.6.tar.gz -C /usr/

配置环境变量

export ZOOKEEPER_HOME=/usr/zookeeper-3.4.6

PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin

再将这个配置分发到其余的两个服务器node03,node04

scp /etc/profile node03:/etc/profile

scp /etc/profile node04:/etc/profile

source /etc/profile

修改zoo.cfg,指定文件存放地址;并且告之参与zk集群的端口的具体信息

cd /usr/zookeeper-3.4.6/conf

mv zoo_sample.cfg zoo.cfg

vi zoo.cfg

dataDir=/var/zookeeper

server.1=node02:2888:3888

server.2=node03:2888:3888

server.3=node04:2888:3888

分发zk到node02,node03

scp -r zookeeper-3.4.6/ node03:`pwd`

scp -r zookeeper-3.4.6/ node04:`pwd`

在三个节点创建zk的存储文件

mkdir /var/zookeeper

指定每个节点对应的服务器的名称根据zoo.cfg中的定义

server.1=node02

server.2=node03

server.3=node04

所以在node02中执行

echo 1 > /var/zookeeper/myid

所以在node03中执行

echo 2 > /var/zookeeper/myid

所以在node04中执行

echo 3 > /var/zookeeper/myid

启动zookeeper

分别在node02,node03,node04上运行zookeeper,并且查看启动后的状态。

zkServer.sh start

zkServer.sh status

可以看到node04作为leader,node02和node03都是follower。

启动journalnode 节点

我配置了三个journalnode节点,分别是node01,node02,node03.所以在这三个节点分别执行以下指令。

hdfs --daemon start journalnode

启动以后会在对应的目录下面生成存储edits持久化文件的目录。这个目录我配置到了/var/hadoop/ha,在前面的cord-site.xml 中有说明。

针对主节点,node01,node02 进行namenode的格式化。这里我们选择node01进行格式化,然后启动namenode做为主节点。再到node02上面去同步node01上面的数据,这样node01是active node02是standby,node02上面同步了node01的namenode的数据,一旦node01无法使用了,node02会变成active状态接替node01的工作。

node01操作

hdfs namenode -format

hdfs --daemon start namenode

node02操作

hdfs namenode -bootstrapStandby

这样node02就把node01的namenode数据同步过来了。

可以到 /var/hadoop/ha/dfs/name 下面的VERSION文件中检查两个节点的clusterID是否相同。

初始化zookeeper

zookeeper需要注册两个主从节点,node01,node02.注册以后当一个节点服务down机或者和zookeeper失去联系了,那么另外一个节点就会接替主节点的位置成为active状态。

ps:可以通过 zkCli.sh 命令打开zookeeper客户端查看zookeeper情况。

node01上运行

hdfs zkfc -formatZK

启动hadoop集群

到node01节点上启动集群

start-dfs.sh

运行完命令以后打开zookeeper客户端,查看

zkCli.sh

ls /hadoop-ha/mycluster

我们看到在myclusert这个集群下面多了两个节点,这两个节点就是zookeeper注册的主从节点,node01,node02。可以通过以下命令查看两个节点的状态。

get /hadoop-ha/mycluster/ActiveBreadCrumb

get /hadoop-ha/mycluster/ActiveStandbyElectorLock

测试高可用效果

去网站看看结果。在浏览器输入192.168.146.101:9870 和 192.168.146.102:9870

node01是active,node02是standby

然后把node01的namenode关掉。

到node01节点上运行

hdfs --daemon stop namenode

可以看到node01无法访问了,这个时候node02成为active状态,依旧可以提供访问。

到此hadoop高可用的配置和启动过程就完毕了。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved