规划整个集群由3台虚拟机组成,部署规划如下:
| 服务器 | NameNode | DataNode | ResourceManager | NodeManager | JournalNode | Zookeeper | ZKFC |
|---|---|---|---|---|---|---|---|
| hadoop01 | √ | √ | √ | √ | √ | √ | √ |
| hadoop02 | √ | √ | √ | √ | √ | √ | |
| hadoop03 | √ | √ | √ | √ |
首先搭配普通Hadoop集群,有三台虚拟机,分别为:hadoop01、hadoop02、hadoop03
三、配置Hadoop高可用集群(以下文件都在解压后hadoop…文件下的etc/hadoop里)
1、修改core-site.xml文件在该文件配置HDFS端口,指定Hadoop临时目录和Zookeeper集群地址:2、修改hdfs-site.xml文件配置两台NameNode的端口地址和通信方式,并指定NameNode的元数据的存放位置,开启NameNode失败自动切换以及配置sshfence(通过ssh远程登录到前一个ActiveNameNode并将其结束进程)fs.defaultFS hdfs://ns1 hadoop.tmp.dir /export/servers/hadoop-2.7.4/tmp ha.zookeeper.quorum hadoop01:2181,hadoop02:2181,hadoop03:2181
(首先得创建/export/data/hadoop/name、/export/data/hadoop/data、/export/data/hadoop/journaldata这三个目录)
3、修改mapred-site.xml文件配置MapReduce计算框架为YARN方式dfs.replication 2 dfs.namenode.name.dir file:/export/data/hadoop/name dfs.datanode.data.dir file:/export/data/hadoop/data dfs.webhdfs.enabled true dfs.nameservices ns1 dfs.ha.namenodes.ns1 nn1,nn2 dfs.namenode.rpc-address.ns1.nn1 hadoop01:9000 dfs.namenode.http-address.ns1.nn1 hadoop01:50070 dfs.namenode.rpc-address.ns1.nn2 hadoop02:9000 dfs.namenode.http-address.ns1.nn2 hadoop02:50070 dfs.namenode.shared.edits.dir qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns1 dfs.journalnode.edits.dir /export/data/hadoop/journaldata dfs.ha.automatic-failover.enabled true dfs.client.failover.proxy.provider.ns1 org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.fencing.methods sshfence shell(/bin/true) dfs.ha.fencing.ssh.private-key-files /root/.ssh/id_rsa dfs.ha.fencing.ssh.connect-timeout 30000
4、修改yarn-site.xml文件,开启ResourceManager高可用,指定RescoureManager的端口名称地址,并配置Zookeeper集群地址mapreduce.framework.name yarn
5、修改slaves,配置集群主机名称yarn.nodemanager.resource.memory-mb 2048 yarn.scheduler.maximum-allocation-mb 2048 yarn.nodemanager.resource.cpu-vcores 1 yarn.resourcemanager.ha.enabled true yarn.resourcemanager.cluster-id yrc yarn.resourcemanager.ha.rm-ids rm1,rm2 yarn.resourcemanager.hostname.rm1 hadoop01 yarn.resourcemanager.hostname.rm2 hadoop02 yarn.resourcemanager.zk-address hadoop01:2181,hadoop02:2181,hadoop03:2181 yarn.nodemanager.aux-services mapreduce_shuffle
hadoop01 hadoop02 hadoop036、修改hadoop-env.sh,配置JDK环境变量(首先看你的jdk放在哪个目录) 7、将配置好的文件分发传送给hadoop02和hadoop03 四、启动Hadoop高可用集群
- 启动集群各个节点的Zookeeper服务,命令如下:
zkServer.sh start
- 启动集群各个节点监控NameNode的管理日志JournalNode,命令如下:
hadoop-daemon.sh start journalnode
- 在hadoop01节点格式化NameNode,并将格式化后的目录复制到hadoop02中,具体命令如下:
hadoop namenode -format scp -r /export/data/hadoop hadoop02:/export/data
- 在hadoop01节点上格式化ZKFC,命令如下:(为了连接上zookeeper集群,然后在zookeeper集群上面创建一个znode节点: /hadooop-ha/ns1,所以在哪里格式化zkfc其实不并重要,重要的是在zookeeper集群上创建znode。)
hdfs zkfc -formatZK
- 在hadoop01节点上启动HDFS,命令如下:
start-dfs.sh (可以看到启动了两个namenode一主一备、三个datanode,三个journalnode、两个zkfc)
- 在hadoop01节点上启动Yarn,命令如下:
start-yarn.sh
-
用jps查看进程
-
在hadoop02节点上手动启动备用的resourcemanager
sbin/yarn-daemon.sh start resourcemanager
-
最后通过宿主机浏览器分别访问http://ip地址:50070和http://ip地址:8088查看HDFS和YARN集群状态,效果如下:
从上面可以看出:
在高可用集群HDFS集群中,通常有两台或两台以上的机器充当NameNode,在任意时间内,都要保证至少有一台机器处于活动状态(Active)状态,一台机器处于备用状态。处于活动状态的NameNode负责处理客户端请求,而处于备用状态的NameNode则处于“随时待命状态”。
-
需注意的问题:在以后启动hadoop和zookeeper过程中,要先启动zookeeper,再启动hadoop,否则会出现以下问题:
用jps查看的时候没有ZKFC(故障恢复控制器)
-
总结
Hadoop Ha集群搭建的启动步骤
HDFS高可用启动顺序主要分为以下几步:
(1)启动所有journalNode进程,用来存之后namenode的元数据
(2)格式化主namenode,并启动主namenode进程
(3)将主namenode上的元数据信息复制到从的namenode所在节点
(4)在主namenode上格式化ZKFC,只需要在主namenode上进行即可
(5)停掉所有Journalnode进程和主namenode
(6)使用start-dfs.sh脚本一次性启动所有HDFS的进程
Yarn高可用启动顺序主要分以下几步:
(1)直接在主的ResourceManager上利用start-yarn.sh脚本启动yarn集群
(2)在从的ResourceManager上手动启动从resourcemanager进程



