5节点hadoop-2.7.3 HA集群搭建

一、集群规划

共5个节点,主机名分别是node-01、node-02、node-03、node-04、node-05

初始启动集群,node-01上运行active namenode即主namenode;node-02上运行standby namenode即从namenode

每个节点运行的进程如下表

机器名运行进程
node-01NameNode/zkfc/Zookeeper/Journalnode/DataNode/NodeManager
node-02NameNode/zkfc/Zookeeper/Journalnode/DataNode/NodeManager
node-03Zookeeper/Journalnode/DataNode/NodeManager
node-04ResourceManager
node-05ResourceManager

二、五节点Hadoop HA搭建

准备5台虚拟机,在做五节点hadoop-2.7.3 HA安装之前,要求完成每台虚拟机的环境准备。

1. 虚拟机环境准备

windows|mac安装VMWare虚拟化软件

VMWare下安装CenoOS7

虚拟机关闭防火墙

禁用selinux

配置虚拟网卡

配置虚拟机网络

安装JDK

配置时间同步

修改主机名

修改ip地址

修改/etc/hosts

各节点免密钥登陆

重启虚拟机

2. 安装zookeeper集群

在node-01、node-02、node-03上安装zookeeper集群

3. 五节点Hadoop HA搭建

注意:

此文档使用普通用户操作,如linann;

hadoop安装到用户主目录下,如/home/linann

请根据自己的实际情况修改

3.1 解压hadoop压缩包

在node-01上解压hadoop压缩包到用户主目录(**~**表示用户主目录/home/linann)

#压缩包在/home/linann/tgz中
[linann@node-01 ~]$ cd /home/linann/tgz
[linann@node-01 tgz]$ tar -xzvf hadoop-2.7.3.tar.gz -C ~

3.2 修改hadoop-env.sh

hadoop2.x的配置文件全部在$HADOOP_HOME/etc/hadoop下

cd $HADOOP_HOME/etc/hadoop

修改hadoop-env.sh;保存退出

export JAVA_HOME=/usr/java/jdk1.8.0_211-amd64

注意:JAVA_HOME值修改为自己jdk的实际目录

3.3 修改core-site.xml

注意:

情况一:值/home/linann/hadoop-2.7.3/tmp根据实际情况修改

情况二:值node-01:2181,node-02:2181,node-03:2181根据实际情况修改,修改成安装了zookeeper的虚拟机的主机名

<configuration>
	<!-- 指定hdfs的nameservice为ns1 -->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://ns1</value>
	</property>
	<!-- 指定hadoop临时目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/home/linann/hadoop-2.7.3/tmp</value>
	</property>
	<!-- 指定zookeeper地址 -->
	<property>
		<name>ha.zookeeper.quorum</name>
		<value>node-01:2181,node-02:2181,node-03:2181</value>
	</property>
</configuration>

3.4 修改hdfs-site.xml

注意:

情况一:属性值qjournal://node-01:8485;node-02:8485;node-03:8485/ns1中的主机名,修改成实际安装zookeeper的虚拟机的主机名

情况二:属性值/home/linann/hadoop-2.7.3/journal中”/home/linann/hadoop-2.7.3”替换成实际hadoop文件夹的路径

情况三:属性值/home/linann/.ssh/id_rsa中/home/linann根据实际情况替换

<configuration>
	<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
	<property>
		<name>dfs.nameservices</name>
		<value>ns1</value>
	</property>
	<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
	<property>
		<name>dfs.ha.namenodes.ns1</name>
		<value>nn1,nn2</value>
	</property>
	<!-- nn1的RPC通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.ns1.nn1</name>
		<value>node-01:9000</value>
	</property>
	<!-- nn1的http通信地址 -->
	<property>
		<name>dfs.namenode.http-address.ns1.nn1</name>
		<value>node-01:50070</value>
	</property>
	<!-- nn2的RPC通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.ns1.nn2</name>
		<value>node-02:9000</value>
	</property>
	<!-- nn2的http通信地址 -->
	<property>
		<name>dfs.namenode.http-address.ns1.nn2</name>
		<value>node-02:50070</value>
	</property>
	<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://node-01:8485;node-02:8485;node-03:8485/ns1</value>
	</property>
	<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/home/linann/hadoop-2.7.3/journal</value>
	</property>
	<!-- 开启NameNode失败自动切换 -->
	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
	<!-- 配置失败自动切换实现方式 -->
	<property>
		<name>dfs.client.failover.proxy.provider.ns1</name>
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
	<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
	<property>
		<name>dfs.ha.fencing.methods</name>
		<value>
		sshfence
		shell(/bin/true)
		</value>
	</property>
	<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
	<property>
		<name>dfs.ha.fencing.ssh.private-key-files</name>
		<value>/home/linann/.ssh/id_rsa</value>
	</property>
	<!-- 配置sshfence隔离机制超时时间 -->
	<property>
		<name>dfs.ha.fencing.ssh.connect-timeout</name>
		<value>30000</value>
	</property>
</configuration>

3.5 修改mapred-site.xml

重命名文件

mv mapred-site.xml.template mapred-site.xml

修改mapred-site.xml

<configuration>
	<!-- 指定mr框架为yarn方式 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
</configuration>

3.6 修改yarn-site.xml

注意:

情况一:属性yarn.resourcemanager.hostname.rm1的值node-04根据实际情况替换

情况二:属性yarn.resourcemanager.hostname.rm2的值node-05根据实际情况替换

情况三:属性值node-01:2181,node-02:2181,node-03:2181根据实际情况替换;替换成实际安装zookeeper的虚拟机的主机名

<configuration>
	<!-- 开启RM高可靠 -->
	<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
	</property>
	<!-- 指定RM的cluster id为yrc,意为yarn cluster -->
	<property>
		<name>yarn.resourcemanager.cluster-id</name>
		<value>yrc</value>
	</property>
	<!-- 指定RM的名字 -->
	<property>
		<name>yarn.resourcemanager.ha.rm-ids</name>
		<value>rm1,rm2</value>
	</property>
	<!-- 分别指定RM的地址 -->
	<property>
		<name>yarn.resourcemanager.hostname.rm1</name>
		<value>node-04</value>
	</property>
	<property>
		<name>yarn.resourcemanager.hostname.rm2</name>
		<value>node-05</value>
	</property>
	<!-- 指定zk集群地址 -->
	<property>
		<name>yarn.resourcemanager.zk-address</name>
		<value>node-01:2181,node-02:2181,node-03:2181</value>
	</property>
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
</configuration>

3.7 修改slaves

node-01、node-02、node-03上运行了datanode、nodemanager,所以修改slaves内容替换为:

node-01
node-02
node-03

3.8 远程拷贝hadoop文件夹

说明:~表示用户主目录

scp -r ~/hadoop-2.7.3/ node-02:~
scp -r ~/hadoop-2.7.3/ node-03:~
scp -r ~/hadoop-2.7.3/ node-04:~
scp -r ~/hadoop-2.7.3/ node-05:~

3.9 配置环境变量

node-01到node-05五个节点,都配置环境变量

#将hadoop添加到环境变量中
vim ~/.bash_profile

添加内容如下(注意:若HADOOP_HOME已经存在,则修改):

export HADOOP_HOME=/home/linann/hadoop-2.7.3/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

编译文件,使新增环境变量生效

source ~/.bash_profile

4. 启动与初始化hadoop集群

**注意:**严格按照下面的步骤 先检查各台hadoop环境变量是否设置好

4.1 启动zookeeper集群

注意:根据zookeeper实际安装情况,启动zookeeper

分别在node-01、node-02、node-03上启动zookeeper

zkServer.sh start

#查看状态:一个为leader,另外两个为follower

zkServer.sh status

4.2 启动journalnode

分别在node-01、node-02、node-03上执行

hadoop-daemon.sh start journalnode

#运行jps命令检验,node-01、node-02、node-03上多了JournalNode进程

4.3 格式化HDFS

#根据集群规划node-01、node-02上运行namenode;所以只在主namenode节点即node-01上执行命令:

hdfs namenode -format

4.4 拷贝hadoop.tmp.dir

格式化后会根据core-site.xml中的hadoop.tmp.dir属性值/home/linann/hadoop-2.7.3/tmp,并生成此文件夹

将/home/linann/hadoop-2.7.3/tmp拷贝到node-02的/home/linann/hadoop-2.7.3中

scp -r /home/linann/hadoop-2.7.3/tmp/ node-02:/home/linann/hadoop-2.7.3/

4.4 格式化ZK

node-01上执行即可

hdfs zkfc -formatZK

4.5 启动HDFS

只在主namenode节点node-01上执行

start-dfs.sh

4.6 启动YARN

4.6.1 主resourcemanager

注意:只在主resourcemanagernode-04上执行start-yarn.sh

把namenode和resourcemanager部署在不同节点,是因为性能问题,因为他们都要占用大量资源

:在node-04上启动yarn之前,先依次从node-04 ssh远程连接到node-01、node-02、node-03、node-04、node-05;因为初次ssh时,需要交互,输入yes,回车

start-yarn.sh
4.6.2 从resourcemanager

从resourcemanager即node-05上启动rm

yarn-daemon.sh start resourcemanager

5. 验证集群是否可用

5.1 验证HDFS HA

5.1.1 访问WEB UI

node-01、node-02一主一备

http://node-01:50070
http://node-02:50070
5.1.2 模拟主备切换

在主namenode节点,运行

hadoop-daemon.sh stop namenode

访问之前为"备namenode"的WEB UI;发现状态更新为active

启动刚才手动停掉的namenode

hadoop-daemon.sh start namenode

访问它的WEB UI,发现状态更新为standby

5.2 验证Yarn HA

node-04、node-05主备切换

5.2.1 访问WEB UI

node-04浏览器访问

http://node-04:8088/cluster/cluster

node-05浏览器访问

http://node-05:8088/cluster/cluster
5.2.2 模拟主备切换

在主resourcemanager节点,运行

yarn-daemon.sh stop resourcemanager

访问之前为"备resourcemanager"的WEB UI;发现状态更新为active

启动刚才手动停掉的resourcemanager

yarn-daemon.sh start resourcemanager

访问它的WEB UI,发现状态更新为standby

5.2.3 运行MR示例

运行一下hadoop示例中的WordCount程序:

hadoop fs -put /home/linann/hadoop-2.7.3/LICENSE.txt /
hadoop jar hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /LICENSE.txt /w0727

6. 集群常用命令

6.1 关闭Hadoop HA集群

正确指令执行顺序如下

主namenode上运行

stop-dfs.sh

主resoucemanager上运行

stop-yarn.sh

从resoucemanager上运行

yarn-daemon.sh stop resourcemanager

关闭zookeeper集群;每个zk服务器运行

zkServer.sh stop

6.2 常用命令

单独启动namenode

hadoop-daemon.sh start namenode

单独启动datanode

hadoop-daemon.sh start datanode

单独启动journalnode

hadoop-daemon.sh start journalnode

启动zookeeper

./zkServer.sh start

启动hdfs

start-dfs.sh

启动yarn

start-yarn.sh

单独启动resorucemanager

yarn-daemon.sh start resouremanger

n.sh


从resoucemanager上运行

```shell
yarn-daemon.sh stop resourcemanager

关闭zookeeper集群;每个zk服务器运行

zkServer.sh stop

6.2 常用命令

单独启动namenode

hadoop-daemon.sh start namenode

单独启动datanode

hadoop-daemon.sh start datanode

单独启动journalnode

hadoop-daemon.sh start journalnode

启动zookeeper

./zkServer.sh start

启动hdfs

start-dfs.sh

启动yarn

start-yarn.sh

单独启动resorucemanager

yarn-daemon.sh start resouremanger
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐