zookeeper+Hadoop-3.2.1高可用(HA)环境搭建

第一步:搭建系统环境(前期准备)

1.服务器规划

准备三台Centos8服务器,系统安装规划如下:

节点

namenode

datanode

resourcemanager

journalnode

zookeeper

zkfc

hadoop-master

hadoop-slave1

hadoop-slave2

 

 

 

2.安装JAVA环境(可选)

首先要确保每台服务器上已经正确安装JAVA环境。执行如下命令安装JAVA:

yum install java-1.8.0-openjdk-devel.x86_64

执行如下命令安装jdk-devel:

yum install jdk-devel

说明:若jdk-devel没有安装,则不能执行jps命令(jps命令是显示当前所有java进程的命令,可以查看hadoop相关进程是否已经启动);若jdk-devel已经安装,则不需要此步。

3.下载hadoop-3.2.1和zookeeper

下载hadoop-3.2.1,并上传到主服务器

执行命令解压:

tar -xzvf hadoop-3.2.1.tar.gz

将解压好的目录拷贝到/usr目录下:

cp -r hadoop-3.2.1 /usr

下载zookeeper.3.6.1,并上传到服务器:

执行解压命令:

tar -zxvf apache-zookeeper-3.6.1.tar.gz

将解压后的目录拷贝到/usr目录下

cp -r apache-zookeeper-3.6.1-bin /usr/zookeeper-3.6.1

提醒:下载zookeeper3.5.5以上版本,必须下载-bin版本

4.关闭系统防火墙:为保证系统的正常访问,先在每一台服务器上执行如下命令,关闭系统防火墙。

systemctl stop firewalld #关闭防火墙

systemctl disable firewalld #禁止开机启动

说明:查看防护墙状态使用命令:firewall-cmd –state

5.修改主机名

hostnamectl set-hostname hadoop-master #在主节点执行此命令

hostnamectl set-hostname hadoop-slave1 #在第二个节点执行此命令

hostnamectl set-hostname hadoop-slave2 #在第三个节点执行此命令

说明:主机名用户根据自己情况自己定义

6.添加主机解析

编辑每台主机上的/etc/hosts文件,在文件尾部填写如下内容

x.x.x.x hadoop-master

x.x.x.x hadoop-slave1

x.x.x.x hadoop-slave2

说明:x.x.x.x为服务器实际IP地址

7.设置免密登录

在所有NN(namenode)节点服务器上生成秘钥(执行如下命令),设置服务器之间免密登录。

ssh-****** #一路回车

将生成的公钥拷贝到其它节点(生成authorized_keys文件):

ssh-copy-id [email protected]

ssh-copy-id [email protected]

ssh-copy-id [email protected]

或者:

cp /root/.ssh/ id_rsa.pub /usr/.ssh/authorized_keys

scp /root/.ssh/ authorized_keys [email protected]:/root/.ssh/

scp /root/.ssh/ authorized_keys [email protected]:/root/.ssh/

8.设置目录路径

编辑/etc/profile文件,在文件尾添加如下内容:

export HADOOP_HOME=/usr/hadoop-3.2.1

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64/jre

export ZOOKEEPER_HOME=/usr/zookeeper-3.6.1

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

说明:以上操作需要在每台服务器上完成;修改完成后执行命令source /etc/profile,使之立即生效。

第二步:配置zookeeper

1.修改配置文件

进入/usr/zookeeper-3.6.1/conf目录,拷贝zoo_sample.cfg文件为zoo.cfg

cd /usr/zookeeper-3.6.1/conf

cp zoo_sample.cfg zoo.cfg

修改zoo.cfg文件,在文件中添加如下内容:

dataDir=/usr/zookeeper-3.6.1/data

dataLogDir=/usr/zookeeper-3.6.1/logs

server.1=hadoop-master:2888:3888

server.2=hadoop-slave1:2888:3888

server.3=hadoop-slave2:2888:3888

说明:server.id=host:port1:port2

其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。

host是该zk进程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口。

2.生成myid文件

在dataDire目录下生成myid文件

echo ‘1’ > /usr/zookeeper-3.6.1/data/myid

说明:1为server.id=host:port1:port2中的id,在每台服务器上都要执行此命令,每台服务器myid文件内容为其所对应的id

3.拷贝zookeeper到其他服务器

scp -r /usr/zookeeper-3.6.1 [email protected]:/usr

scp -r /usr/zookeeper-3.6.1 [email protected]:/usr

说明:在hadoop-slave1和hadoop-slave2服务器上要修改myid文件的内容分别为2和3(文件均位于/usr/zookeeper-3.6.1/data目录下)

第三步:配置hadoop

在主节点服务器(hadoop-master)对hadaoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、workers文件进行配置。

1.配置hadoop-env.sh文件

在文件hadoop-env.sh中增加如下内容:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64/jre

说明:指定JAVA库所在主目录。

export HDFS_NAMENODE_USER=root

export HDFS_DATANODE_USER=root

export HDFS_SECONDARYNAMENODE_USER=root

export HDFS_RESOURCEMANAGER_USER=root

export YARN_RESOURCEMANAGER_USER=root

export YARN_NODEMANAGER_USER=root

export HDFS_JOURNALNODE_USER=root

说明:指定hadoop各模块均以root身份运行。

2.配置core-site.xml文件

在文件core-site.xml中增加以下内容:

<configuration>

        <!--设置fs.defaultFS为nameservices的逻辑主机名-->

        <property>

                <name>fs.defaultFS</name>

                <value>hdfs://hdcluster</value>

        </property>

        <property>

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

                <value>/usr/hadoop-3.2.1/tmp</value>

        </property>

        <!--指定zookeeper地址-->

        <property>

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

                <value>hadoop-master:2181,hadoop-slave1:2181,hadooop-slave2:2181</value>

        </property>

</configuration>

说明:默认情况下hadoop的data和name目录在hadoop.tmp.dir指定目录下的dfs目录下,tmp目录需要手动建立,tmp目录下的dfs目录及dfs目录下的data和name目录系统会自动建立;也可在hdfs-site.xml文件中通过dfs.datanode.data.dir指定data目录,通过dfs.namenode.name.dir指定name目录。

3.配置hdfs-site.xml文件

在文件hdfs-site.xml中增加以下内容:

<configuration>

        <property>

                <name>dfs.replication</name>

                <value>3</value>

        </property>

        <property>

                <name>dfs.nameservices</name>

                <value>hdcluster</value>

        </property>

        <property>

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

                <value>nn1,nn2</value>

        </property>

        <property>

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

                <value>hadoop-master:8020</value>

        </property>

        <property>

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

                <value>hadoop-slave1:8020</value>

        </property>

        <property>

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

                <value>hadoop-master:9870</value>

        </property>

        <property>

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

                <value>hadoop-slave1:9870</value>

        </property>

        <property>

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

                <value>qjournal://hadoop-master:8485;hadoop-slave1:8485;hadoop-slave2:8485/hdcluster</value

>

        </property>

        <property>

                <name>dfs.client.failover.proxy.provider.hdcluster</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>

        <property>

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

                <value>/usr/hadoop-3.2.1/tmp/jn</value>

        </property>

        <property>

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

                <value>true</value>

        </property>

</configuration>

4.配置yarn-site.xml文件

在文件yarn-site.xml中增加以下内容:

<configuration>

<!-- Site specific YARN configuration properties -->

        <property>

                <name>yarn.resourcemanager.ha.enabled</name>

                <value>true</value>

        </property>

        <property>

                <name>yarn.resourcemanager.cluster-id</name>

                <value>hdcluster</value>

        </property>

        <property>

                <name>yarn.resourcemanager.ha.rm-ids</name>

                <value>rm1,rm2</value>

        </property>

        <property>

                <name>yarn.resourcemanager.hostname.rm1</name>

                <value>hadoop-master</value>

        </property>

        <property>

                <name>yarn.resourcemanager.hostname.rm2</name>

                <value>hadoop-slave1</value>

        </property>

        <property>

                <name>yarn.resourcemanager.webapp.address.rm1</name>

                <value>hadoop-master:8088</value>

        </property>

        <property>

                <name>yarn.resourcemanager.webapp.address.rm2</name>

                <value>hadoop-slave1:8088</value>

        </property>

        <property>

                <name>hadoop.zk.address</name>

                <value>hadoop-master:2181,hadoop-slave1:2181,hadoop-slave2:2181</value>

        </property>

</configuration>

5.配置mapred-site.xml文件

在文件mapred-site.xml文件中增加以下内容:

<configuration>

        <property>

                <name>mapreduce.framework.name</name>

                <value>yarn</value>

        </property>

</configuration>

6.配置workers文件

在文件workers文件中增加以下内容:

hadoop-master

hadoop-slave1

hadoop-slave2

说明:workers文件中的主机为datanode节点主机名。

第四步:部署hadoop

hadoop配置文件修改好后,要将整个hadoop目录复制到其它所有服务器上。

scp -r /usr/Hadoop-3.2.1 [email protected]:/usr

scp -r /usr/Hadoop-3.2.1 [email protected]:/usr

第五步:启动hadoop高可用集群

1.启动zookeeper

在每台服务器上执行如下命令启动zookeeper:

zkServer.sh start

说明:启动hadoop高可用集群,首先要在每台服务器上启动zookeeper;zookeeper启动成功后可使用jps命令查看进程,如:

zookeeper-3.6.1+Hadoop-3.2.1高可用(HA)安装

看到QuorumPeerMain表明zookeeper正在运行。

2.创建主备切换命名空间

在任意一台namenode上执行如下命令:

hdfs zkfc -formatZK

3.启动journalnode

在所有服务器上启动journalnode,执行如下命令:

hdfs –daemon start journalnode

4.格式化namenode

在主namenode上执行以下命令:

hdfs namenode -format

5.启动主备切换进程:

在每一台namenode节点服务器上执行如下命令:

hdfs –daemon start zkfc

说明:只有启动了主备切换进程DFSZKFailoverController,namenode才能自主切换主备;如果先启动了namenode,在启动DFSZKFailoverController进程,则哪个namenode为主节点是不确定的,因此,一般在启动namenode前先启动DFSZKFailoverController。

5.启动主集群

在主namenode上执行以下命令:

start-all.sh

执行成功后,在主和备namenode上使用jps会看到如下进程:

zookeeper-3.6.1+Hadoop-3.2.1高可用(HA)安装

 

至此,一套高可用的hadoop环境搭建完成。可在浏览器中通过IP地址访问namenode和yarn集群,其中,namenode节点访问端口为:9870,yarn访问端口为:8088。

zookeeper-3.6.1+Hadoop-3.2.1高可用(HA)安装

zookeeper-3.6.1+Hadoop-3.2.1高可用(HA)安装

 

相关文章: