文章目录
- 一.HDFS-HA 集群配置
- 1.1 配置 HDFS-HA 集群
- 1.2 启动 HDFS-HA 集群
- 1.3 配置 HDFS-HA 自动故障转移
- 二、YARN-HA 配置
- 2.1 配置 YARN-HA 集群
一.HDFS-HA 集群配置
1.1 配置 HDFS-HA 集群
- 1.HDFS 高可用集群规划,请保证 Hadoop 完全分布式和 ZooKeeper 完全分布式环境已经安装完成。
hadoop集群搭建
hadoop110 | hadoop111 |
---|---|
NameNode | NameNode |
- 2.在 hadoop110 配置 core-site.xml :
<!-- 默认节点为namenode集群 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!-- hdfs的临时文件的目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/install/hadoop/hdfsTmp</value>
</property>
<!-- 其他机器的root用户可访问 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!-- 其他root组下的用户都可以访问 -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
- 3.在 hadoop110 配置 hdfs-site.xml
<!-- 设置数据块应该被复制的份数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop111:50090</value>
</property>
<!-- 完全分布式集群名称 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- 集群中 NameNode 节点都有哪些,这里是 nn1和nn2可自定义-->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- nn1 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hadoop110:9000</value>
</property>
<!-- nn2 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop111:9000</value>
</property>
<!-- nn1 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop110:50070</value>
</property>
<!-- nn2 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop111:50070</value>
</property>
<!-- 指定 NameNode 元数据在 JournalNode 上的存放位置要把所有机器加进去 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop110:8485;hadoop111:8485;hadoop112:8485/mycluster</value>
</property>
<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要 ssh 无秘钥登录,每个人的目录可能不一样-->
<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>/opt/install/hadoop/data/jn</value>
</property>
<!-- 关闭权限检查-->
<property>
<name>dfs.permissions.enable</name>
<value>false</value>
</property>
<!-- 访问代理类:client,mycluster,active 配置失败自动切换实现方 式-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
注意修改完配置文件将这俩文件用scp命令全部发送到其他机器上
1.2 启动 HDFS-HA 集群
- 1.在各个 JournalNode 节点上,输入以下命令启动 journalnode 服务:
hadoop-daemon.sh start journalnode
- 2.在[nn1]上,对其进行格式化,并启动,格式化只在第一次启动时需要以后不需要:
hdfs namenode -format
,hadoop-daemon.sh start namenode
- 3.在[nn2]上,同步 nn1 的元数据信息,只在第一次启动时需要,以后不需要:
hdfs namenode -bootstrapStandby
- 4.启动[nn2]:
hadoop-daemon.sh start namenode
- 5.查看 web 页面显示,如下:
- 6.在[nn1]上,启动所有 datanode :
hadoop-daemons.sh start datanode
- 7.将[nn1]切换为 Active :
hdfs haadmin -transitionToActive nn1
- 8.查看是否 Active :
hdfs haadmin -getServiceState nn1
,效果如下:
- 9.刷新hadoop110网页,效果如下:
1.3 配置 HDFS-HA 自动故障转移
- 1.在 hdfs-site.xml 中增加
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
- 2.在 core-site.xml 文件中增加
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop110:2181,hadoop111:2181,hadoop112:2181</value>
</property>
-
3.启动
-
1)关闭所有 HDFS 服务:
stop-dfs.sh
-
2)启动 Zookeeper 集群,即在所有机器输入如下命令:
zkServer.sh start
-
3)初始化 HA 在 Zookeeper 中状态:
hdfs zkfc -formatZK
-
4)启动 HDFS 服务:
start-dfs.sh
-
5)在各个 NameNode 节点上启动 DFSZK Failover Controller,先在哪台机器启动,哪个机器的NameNode就是Active NameNode :
hadoop-daemon.sh start zkfc
,启动后如下:
-
4.验证
-
1)将 Active NameNode 进程 kill:
kill -9 namenode 的进程 id
-
2)将 Active NameNode 机器断开网络:
service network stop
二、YARN-HA 配置
2.1 配置 YARN-HA 集群
- 1.规划集群
hadoop110 | hadoop111 |
---|---|
ResourceManager | ResourceManager |
- 2.yarn-site.xml 修改:
<!-- reducer获取数据方式 -->
<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>
<!--声明两台 resourcemanager 的地址-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-yarn1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop110</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop111</value>
</property>
<!--指定 zookeeper 集群的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop110:2181,hadoop111:2181,hadoop112:2181</value>
</property>
<!--启用自动恢复-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--指定 resourcemanager 的状态信息存储在 zookeeper 集群-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!-- 日志聚集功能使用 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
配置完用scp命令将文件发送到其他机器
- 3.启动 yarn
- 1)在 hadoop110 中执行:
start-yarn.sh
- 2)在 hadoop111 中执行:
yarn-daemon.sh start resourcemanager
- 3)查看服务状态:
yarn rmadmin -getServiceState rm1
,如下: