Hadoop及Yarn的HA集群安装
1、环境及选用的版本说明:
本教程需要3台Linu机器,主机也好,虚机也好。本例中每台内存不少于2G。系统使用CentOS7。
本教程并未采用CDH这样的成型产品,原因有二,一是CDH占用内存较多,少于16G内存的电脑,无法用虚机完成所有教程中的内容;二是学习大数据的时候还是应该尽量从基本的操作开始,这样在遇到问题时更容易定位错误。
如果是生产环境,仍然建议使用CDH,毕竟稳定和监控才是生产环境的追求。
大数据领域,各组件还在各自发展,所以各组件版本间会存在一些适配的情况,如果是第一次安装,建议使用和教程一样的版本安装和学习。
Hadoop | 2.9.2 |
ZooKeeper | 3.5.6 |
Spark | 2.4.4 |
如果是使用虚机的话,当然有很多选择。本教程中使用的是VmWare,版本是15.5。
操作默认在root用户下,如更换用户会明确说明。生产环境建议使用单独的用户。
2、本章目标
Hadoop集群安装,NameNode的HA配置,Yarn的ResourceManager的HA配置。
本章,最终搭建后的服务分配如下:
主机名 | node01 | node02 | node03 |
Hadoop | NameNode | NameNode | |
DataNode | DataNode | DataNode | |
JournalNode | JournalNode | JournalNode | |
DFSZKFailoverController | DFSZKFailoverController | ||
ZooKeeper | QuorumPeerMain | QuorumPeerMain | QuorumPeerMain |
Yarn | ResourceManager | ResourceManager | |
NodeManager | NodeManager | NodeManager | |
JobHistoryServer |
3、服务器的环境搭建
1)IP改为静态
vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO="static" IPADDR=192.168.32.110 NETMASK=255.255.255.0 GATEWAY=192.168.32.2 DNS1=8.8.8.8
ifcfg-ens33是网卡的名称,因机器而异。
ip地址和gateway请根据实际情况配置。
三台机器的ip最后一段分别为110,120,130。
2)关闭三台机器的防火墙
在root用户下执行如下命令
systemctl stop firewalld systemctl disable firewalld
3)关闭三台机器的安全强化
在root用户下执行如下命令,在打开的文件中添加如下一行,并保存退出(:wq)
vi /etc/selinux/config SELINUX=disabled
4)修改三台机器的主机名
第一台:
hostnamectl set-hostname node01
第二台:
hostnamectl set-hostname node02
第三台:
hostnamectl set-hostname node03
5)修改三台主机名与IP地址的映射关系
在打开的文件中增加如下三行。
vi /etc/hosts 192.168.32.110 node01 192.168.32.120 node02 192.168.32.130 node03
6)同步三台机器的时间
安装ntp服务,启动ntp
yum install -y ntp systemctl enable ntpd systemctl start ntpd
设置时区为上海
timedatectl set-timezone Asia/Shanghai timedatactl set-ntp yes
查看时间状态
ntpq -p
7)在三台机器上安装JDK
使用Oracle的JDK8。
检查是否已经安装JDK
rpm -qa|grep jdk
如果已经安装了openjdk,删除。
yum -y remove java-1.7.0-openjdk*
安装JDK8的rpm包。安装包从此处下载:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
创建一个目录存放后面所需要的组件安装文件
>mkdir /tools
将下载的rpm包上传到tools目录中,执行安装命令
rpm -ivh jdk-8u211-linux-x64.rpm
验证安装
java -version
如果显示了java的版本号则标识安装成功。
8)root用户免密登录
三台机器上执行如下命令
ssh-keygen -t rsa
将密钥互相拷贝
ssh-copy-id node01 ssh-copy-id node02 ssh-copy-id node03
验证。在三台机器上可以互相免密ssh登录旧可以了。
ssh node0${n}
9)设置系统环境变量
在profile文件最后添加
vi /etc/profile export JAVA_HOME=/usr/java/default export PATH=$PATH:$JAVA_HOME/bin
让设置生效
source /etc/profile
4、安装ZooKeeper
zookeeper的原理并不复杂,就是在一个分布式环境里建不同的目录,目录里存一些值。其他系统通过设置和读取zookeeper里的值,来明确多个服务之间的竞争关系。
很多大数据组件都是通过zookeeper来实现高可用的。
1)安装wget
在node01上安装wget
yum install -y wget
2)下载压缩包并解压
wget https://www-us.apache.org/dist/zookeeper/zookeeper-3.5.6/apache-zookeeper-3.5.6-bin.tar.gz
解压
tar zxf apache-zookeeper-3.5.6-bin.tar.gz
为了后续简化命令,重命名一下目录
mv apache-zookeeper-3.5.6-bin zk-3.5.6
3)编辑配置文件
从sample复制一份配置文件
cd zk-3.5.6/conf cp zoo_sample.cfg zoo.cfg vi zoo.cfg
按如下修改
tickTime=2000 dataDir=/data/zkdata clientPort=2181 initLimit=5 syncLimit=2 server.1=node01:2888:3888 server.2=node02:2888:3888 server.3=node03:2888:3888
将node01上的zk-3.5.6目录拷贝到node02和node03上
scp -r zk-3.5.6/ root@node02:/tools scp -r zk-3.5.6/ root@node03:/tools
在三台机器上创建数据目录
mkdir -p /data/zkdata
创建myid文件,myid文件中保存server.X中的X。
node01上编辑
vi /data/zkdata/myid 1
node02上编辑
vi /data/zkdata/myid 2
node03上编辑
vi /data/zkdata/myid 3
4)将zookeeper加入环境变量
修改三台机器的profile文件
vi /etc/profile export ZOOKEEPER_HOME=/tools/zk-3.5.6 export PATH=$PATH:$ZOOKEEPER_HOME/bin
配置生效
source /etc/profile
5)启动zookeeper
三台机器都执行启动命令
zkServer.sh start
出现Starting zookeep ... STARTED,则表示起送成功。
查看状态
zkServer.sh status
三台机器中有1台是leader,2台是follower。
用jps命令可以看到QuorumPeerMain的一个进程。
zookeeper安装完毕,有兴趣的可以用zkCli.sh -server node01:2181来登录进zookeeper查看里面的目录结构和值。推出zkCli的命令是quit。
关闭zookeeper的命令是zeServer.sh stop
5、Hadoop的HA集群安装
Hadoop的HA是指NameNode的HA。
1)下载压缩包并解压
在node01上下载hadoop压缩包
cd /tools wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz
解压
tar zxf hadoop-2.9.2.tar.gz
修改目录权限
chown -R root:root hadoop-2.9.2
2)编辑环境文件
编辑三台机器的/etc/profile
vi /etc/profile export HADOOP_HOME=/tools/hadoop-2.9.2 export HADOOP_PREFIX=$HADOOP_HOME export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
配置生效
source /etc/profile
在node01上设置${HADOOP_HOME}/etc/hadoop/hadoop-env.sh、mapred-env.sh、yarn-env.sh三个文件里的JAVA_HOME
export JAVA_HOME=/usr/java/default
以上是必须配置的。除此以外还可以配置各个服务启动时的参数。
生产环境中有应该再配置HADOOP_PID_DIR和HADOOP_LOG_DIR,两个目录的权限应该设为hadoop的用户才能访问。HADOOP_HEAPSIZE根据机器的内存设置,默认1000MB。
3)编辑配置文件
编辑${HADOOP_HOME}/etc/hadoop/hdfs-site.xml,configuration中增加:
<!-- 为名称服务集群其一个名字 --> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!-- 为每个节点的名称服务起一个名字,当前最多只能配2个节点 --> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <!-- 配置每个节点的rpc监听地址,我们选用node01和node02做名称服务节点 --> <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服务地址 --> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>node01:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>node02:50070</value> </property> <!-- 设置共享目录服务,用于存储名称服务的共享信息 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value> </property> <!-- HDFS客户端联系激活的名称节点的class --> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 主名称服务发生故障时的,尝试关闭主节点的方法。生产环境中最好先配置sshfence,shell的也不能少 --> <property> <name>dfs.ha.fencing.methods</name> <value>shell(/bin/true)</value> </property> <!-- 设置journalnode的编辑目录 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/data/hadoop/journal</value> </property> <!-- 数据备份数,生产环境不用配这个 --> <property> <name>dfs.replication</name> <value>2</value> </property> <!-- 名称节点和数据节点的存储目录 --> <property> <name>dfs.namenode.name.dir</name> <value>/data/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/hadoop/dfs/data</value> </property>
在三台机器上创建目录
mkdir -p /data/hadoop/journal mkdir -p /data/hadoop/dfs
编辑${HADOOP_HOME}/etc/hadoop/core-site.xml,configuration中增加:
<property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property>
编辑${HADOOP_HOME}/etc/hadoop/slaves文件
vi hadoop-2.9.2/etc/hadoop/slaves node01 node02 node03
4)部署
将node01的hadoop-2.9.2拷贝到node02和node03
scp -r hadoop-2.9.2 root@node02:/tools/ scp -r hadoop-2.9.2 root@node03:/tools/
在三台机器上启动JournalNode守护程序
hadoop-daemon.sh start journalnode
在node01格式化NameNodfe
hdfs namenode -format
启动node01的namenode
hadoop-daemon.sh start namenode
在node02上复制namenode信息
hdfs namenode -bootstrapStandby
关闭node01的namenode
hadoop-daemon.sh stop namenode
启动HDFS
start-dfs.sh
验证,在三台机器上执行jps命令(如果启动了zookeeper,还会有QuorumPeerMain)
JournalNode | JournalNode | JournalNode |
DataNode | DataNode | DataNode |
NameNode | NameNode | Jps |
Jps | Jps |
此时用ha管理工具查看两个namenode都是standby状态
hdfs haadmin -getAllServiceState node01:8020 standby node02:8020 standby
至此我们设置了2个namenode。激活一个后就可以正常工作了,但是激活的发生故障时并不会自动改变另一个的standby状态。所以需要下面的步骤。
先停止HDFS服务,在node01上执行
stop-dfs.sh
5)配置自动故障转移
编辑node01上的${HADOOP_HOME}/etc/hadoop/hdfs-site.xml,configuration中增加:
<property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property>
编辑node01上的${HADOOP_HOME}/etc/hadoop/core-site.xml,configuration中增加:
<property> <name>ha.zookeeper.quorum</name> <value>node01:2181,node02:2181,node03:2181</value> </property>
拷贝配置文件到node02和node03上
cd /tools/hadoop-2.9.2/etc/hadoop scp hdfs-site.xml root@node02:`pwd` scp hdfs-site.xml root@node03:`pwd` scp core-site.xml root@node02:`pwd` scp core-site.xml root@node03:`pwd`
三台机器上启动zookeeper(如果已经启动,忽略此步)
在zookeeper里初始化HA的状态
hdfs zkfc -formatZK
启动HDFS
start-dfs.sh
用jps验证服务是否已启动
QuorumPeerMain | QuorumPeerMain | QuorumPeerMain |
JournalNode | JournalNode | JournalNode |
DFSZKFailoverController | DFSZKFailoverController | DataNode |
NameNode | NameNode | |
DataNode | DataNode |
6)验证自动故障转移
查看当前激活的NameNode是哪个
hdfs haadmin -getAllServiceState node01:8020 active node02:8020 standby
如上,将node01的NameNode服务kill掉,或拔掉node01的网线,或关掉node01,再检查一下NameNode的激活状态,应该变为node02 active。
hdfs haadmin -getAllServiceState 19/12/06 15:25:11 INFO ipc.Client: Retrying connect to server: node01/192.168.32.110:8020. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=1, sleepTime=1000 MILLISECONDS) node01:8020 Failed to connect: Call From node01/192.168.32.110 to node01:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused node02:8020 active
6、YARN的HA集群安装
yarn的HA是指ResourceManager的高可用。
1)编辑配置文件
编辑node01上的${HADOOP_HOME}/etc/hadoop/yarn-site.xml,configuration中增加:
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 启动ResourceManager的HA --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 集群名称 --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>cluster1</value> </property> <!-- ResourceManager的逻辑名称 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 每个节点对应的主机地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>node01</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>node03</value> </property> <!-- 每个节点的web地址 --> <property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>node01:8088</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>node03:8088</value> </property> <!-- zookeeper服务地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>node01:2181,node02:2181,node03:2181</value> </property> <!-- 日志相关设置 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> <property> <name>yarn.log.server.url</name> <value>http://node03:19888/jobhistory/logs</value> </property>
拷贝到node02和node03机器上
cd /tools/hadoop-2.9.2/etc/hadoop scp yarn-site.xml root@node02:`pwd` scp yarn-site.xml root@node03:`pwd`
编辑node01上的${HADOOP_HOME}/etc/hadoop/mapred-site.xml,configuration中增加:
此步与HA无关,运行mapreduce时需要
cd /tools/hadoop-2.9.2/etc/hadoop cp mapred-site.xml.template mapred-site.xml vi mapred-site.xml <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>node03:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node03:19888</value> </property>
2)启动YARN
先启动HDFS,如果已启动请忽略
start-dfs.sh
启动YARN
start-yarn.sh
此时只会启动一个ResouceManager,在node03再启动ResourceManager。
yarn-daemon.sh start resourcemanager
在node03上启动jobhistory服务(此步与HA无关)
mr-jobhistory-daemon.sh start historyserver
验证
yarn rmadmin -getAllServiceState node01:8033 active node03:8033 standby
验证HA,kill掉node01的ResourceManager,再查看状态
yarn rmadmin -getAllServiceState 19/12/06 16:48:38 INFO ipc.Client: Retrying connect to server: node01/192.168.32.110:8033. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=1, sleepTime=1000 MILLISECONDS) node01:8033 Failed to connect: Call From node01/192.168.32.110 to node01:8033 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused node03:8033 active
7、Web UI
配置客户端的host,增加node01-03的对应关系。
NameNode nn1:node01:50070
NameNode nn2:node02:50070
ResourceManage:node01(node03):8088 #会自动跳转到激活的主机
JobHistory: node03:19888/jobhistory
附录1:服务启停常用命令
zookeeper
开启服务:zkServer.sh start
关闭服务:zkServer.sh stop
命令行客户端:zkCli.sh -server xx.xx.xx.xx:2181
hadoop
启动HDFS:start-dfs.sh
关闭HDFS:stop-dfs.sh
启动JournalNode:hadoop-daemon.sh start journalnode
关闭JournalNode:hadoop-daemon.sh stop journalnode
启动NameNode:hadoop-daemon.sh start namenode
关闭NameNode:hadoop-daemon.sh stop namenode
yarn
启动yarn:start-yarn.sh
关闭yarn:stop-yarn.sh
启动ResourceManager:yarn-daemon.sh start resourcemanager
关闭ResourceManager:yarn-daemon.sh stop resourcemanager
启动JobHistoryServer:mr-jobhistory-daemon.sh start historyserver
关闭JobHistoryServer:mr-jobhistory-daemon.sh stop historyserver
附录2:启动关闭脚本
写两个脚本,用于启动和关闭所有服务。
hadoop本身带的start-all.sh并不适用于HA的情况,所以需要在node01上写一个。参考如下:
start-mycluster.sh
#!/bin/bash zkServer.sh start ssh node02 > /dev/null 2>&1 <<eeooff zkServer.sh start exit eeooff echo "node02 started ZK." ssh node03 > /dev/null 2>&1 <<eeooff zkServer.sh start exit eeooff echo "node03 started ZK." start-dfs.sh && start-yarn.sh ssh node03 > /dev/null 2>&1 <<eeooff yarn-daemon.sh start resourcemanager mr-jobhistory-daemon.sh start historyserver exit eeooff echo "node03 started resourceManager and historyServer."
stop-mycluster.sh
#!/bin/bash ssh node03 > /dev/null 2>&1 <<eeooff mr-jobhistory-daemon.sh stop historyserver yarn-daemon.sh stop resourcemanager exit eeooff echo "node03 stoped historyServer and resourceManager." stop-yarn.sh && stop-dfs.sh zkServer.sh stop ssh node02 > /dev/null 2>&1 << eeooff zkServer.sh stop exit eeooff echo "node02 stoped ZK." ssh node03 > /dev/null 2>&1 << eeooff zkServer.sh stop exit eeooff echo "node03 stoped ZK."
给两个执行文件权限
chmod 700 start-mycluster.sh chmod 700 stop-mycluster.sh
参考
[1] https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-common/core-default.xml core-site.xml的参数和默认值
相关推荐
【Hadoop HA集群部署】是高可用(High Availability)配置的一种,主要目的是为了确保Hadoop分布式文件系统在遇到单点故障时,能够自动切换到备用节点,保证服务不间断。这通常涉及到NameNode HA,Secondary NameNode...
【Hadoop HA 集群部署与 YARN HA 测试Job 教学】 在大数据处理领域,Hadoop 是一个至关重要的分布式计算框架,它提供了高可用性(HA)的特性来确保服务的连续性和稳定性。Hadoop HA 主要指的是 HDFS(Hadoop ...
本文详细介绍了Hadoop 2.7.2 HA集群的安装过程,从环境准备到最终的集群启动及验证。通过上述步骤,您可以成功搭建一个高性能、可靠的Hadoop HA集群,为大数据处理任务提供支持。在未来的工作中,还可以进一步优化...
在搭建Hadoop 2.6.4 HA集群之前,我们需要进行以下准备工作: 1. **配置Linux环境**:首先确保所有节点的操作系统版本一致,并且已安装必要的软件包。此外,还需要设置正确的主机名和IP地址映射。 2. **网络配置**...
配置Hadoop HA集群需要对这些文件进行精确调整,以实现命名节点的自动故障切换、保证数据的安全性和一致性,以及优化资源分配和任务调度。在实际操作中,还需要关注其他配置,比如Zookeeper的设置(用于协调NN的故障...
6. **格式化文件系统**:在Hadoop HA集群部署之前,需要先格式化HDFS文件系统。 #### Hadoop HA配置步骤 1. **修改Hadoop配置文件**: - 修改`core-site.xml`,设置HDFS相关的路径。 - 修改`hdfs-site.xml`,...
本文将深入探讨Hadoop HA集群的部署模式、主要组件及其配置方法。 1. **什么是HA?** HA(High Availability)是一种系统设计策略,旨在减少服务中断时间。在Hadoop中,这意味着当主节点(如NameNode或...
HadoopHA高可用集群配置 yarn-site.xml slave
### Hadoop HA高可用集群配置详解 #### 一、引言 Hadoop 是一个能够对大量数据进行分布式处理的软件框架。随着业务需求的增长和技术的发展,对于数据处理平台的稳定性和可靠性提出了更高的要求。Hadoop HA(High ...
HadoopHA高可用集群配置 yarn-site.xml yarn两台namenode配置不同
总之,配置Hadoop HA集群是一个复杂的过程,涉及到多个组件的协同工作,尤其是ZooKeeper作为基石,对于整个集群的稳定性和高可用性至关重要。正确配置和管理ZooKeeper集群是实现Hadoop HA的关键步骤之一。
hadoop HA 搭建 包含 hdfs HA 集群搭建 以及yarn HA 集群搭建 适用于hadoop所有版本
所谓HA,即高可用,实现高可用最关键的是消除单点故障,hadoop-ha严格来说应该分成各个组件的HA机制——HDFS的HA、YARN的HA;通过双namenode消除单点故障;通过双namenode协调工作
Hadoop HA集群的启动涉及到多个组件和服务的启动和配置,包括JournalNode、NameNode、Zookeeper、ResourceManager和NodeManager。每个组件都有其特定的角色和职责,确保整个集群的高可用性和稳定性。正确配置和启动...
【Hadoop高可用集群安装详解】 Hadoop是一个开源的分布式计算框架,其高可用性是通过复制和故障切换机制来保证服务的连续性和数据的安全性。在这个实验项目中,我们将探讨如何在完全分布式模式下安装和配置Hadoop的...
在搭建Hadoop集群之前,确保所有服务器都运行相同的Linux发行版,并安装了Java Development Kit (JDK) 8或以上版本,因为Hadoop依赖Java环境。同时,配置好网络环境,确保节点间可以互相通信。 2. **配置环境变量*...
- **Hadoop**:在主节点(hadoop001)上执行`$HADOOP_HOME/sbin/start-all.sh`,并在副节点(hadoop002)上执行`$HADOOP_HOME/sbin/yarn-daemon.sh start resourcemanager`以及`$HADOOP_HOME/sbin/mr-jobhistory-daemon....
例如,为Hadoop集群配置HA(High Availability)以确保服务的稳定性,通过调整配置参数提升Hive的查询速度,以及设置合适的权限控制以保护数据安全。 总之,Hadoop集群的搭建和Hive的使用是大数据处理的基础。通过...
#### 四、Hadoop 2.x 集群安装与配置 1. **下载并解压Hadoop安装包**: - 使用命令`tar -zxvf hadoop-2.4.1.tar.gz -C /weekend/`将Hadoop解压至指定目录。 2. **配置Hadoop核心文件**: - 修改`core-site.xml`...
以下是我根据自身经验总结的Hadoop HA安装流程,这个流程已经在实际工作中得到验证,可以确保稳定运行。 一、环境准备 1. 操作系统:通常选择CentOS或Ubuntu等Linux发行版,确保系统稳定可靠。 2. 软件依赖:安装...