HDFS HA 环境搭建
1.在完成zookeeper的基础上搭建
2.在完全分布式集群的主节点上修改配置文件
cd /usr/local/src/hadoop-2.6.0/etc/hadoop
核心配置文件
core-site.xml -> 修改
HDFS配置文件
hadoop-env.sh -> 不变
hdfs-site.xml -> 修改
MapReduce配置文件
mapred-env.sh -> 不变
mapred-site.xml -> 不变
slaves -> 修改
vi core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
<description>把两个NameNode的地址组装成一个集群mycluster</description>
</property>
# 这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/src/hadoop-2.6.0/data/ha/tmp</value>
<description>指定hadoop运行时产生文件的存储目录</description>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node:2181,node1:2181,node2:2181</value>
<description>指定ZKFC故障自动切换转移</description>
</property>
vi hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
<description>设置dsf副本数,默认3个</description>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
<description>完全分布式集群名称</description>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
<description>集群中NameNode节点都有哪些</description>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node:8020</value>
<description>nn1的RPC通信地址</description>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node1:8020</value>
<description>nn2的RPC通信地址</description>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node:50070</value>
<description>nn1的http通信地址</description>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node1:50070</value>
<description>nn2的http通信地址</description>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node:8485;node1:8485;node2:8485/mycluster</value>
<description>指定NameNode元数据在JournalNode上的存放位置</description>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
<description>配置隔离机制,即同一时刻只能由一台服务器对外响应</description>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
<description>使用隔离机制时需要ssh无密钥登录</description>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/export/server/hadoop-2.6.0/data/ha/jn</value>
<description>声明journalnode服务器存储目录</description>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
<description>关闭权限检查</description>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
<description>指定mycluster出现故障时,负责执行故障切换的类</description>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
<description>配置自动故障转移</description>
</property>
vi slaves
node
node1
node2
3.将主节点的配置文件分发给从节点
# 怎么分发要看所在文件夹位置和安装位置
scp -r ../hadoop node1:/$HADOOP_HOME/etc
scp -r hadoop node2:/usr/local/src/hadoop-2.6.0/etc
4.关闭集群,启动 zookeeper
# 在主节点输入,服务关闭的就不用管了
stop-all.sh
# 在所有节点输入
zkServer.sh start
zkServer.sh status # 查看状态,正确的状态只有一台机器时leader,其余为follower
# 用jpa查看的进程时QuorumPeerMain
5.在主节点上格式化 zookeeper
hdfs zkfc -formatZK # 目的是在Zookeeper集群上建立HA响应节点
6.启动 JournalNode 集群
# 在所有节点输入
hadoop-daemon.sh start journalnode # 启动JournalNode是为了创建/data/ha/jn,此时jn里面是空的
7.格式化NameNode
# 格式化集群的一个NameNode节点,可以在nn1和nn2任选一个格式化。这里选nn1即主节点
hdfs namenode -format
# 格式化NameNode,此里面jn会产生集群等ID等信息,/data/ha/tmp也会产生相关信息。
8.启动 NameNode,并同步到备用 NameNode
# 在nn1即node(主节点)节点单独启动namenode进程:
hadoop-daemon.sh start namenode
# 将格式化的namenode节点信息同步到备用的NameNode(nn2即node1节点),并启动namenode进程:
# 在 node1 节点输入
hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode
9.启动所有的 DataNode
# DataNode 是在 slaves 文件中配置的,所以在 nn1 即 node 节点上启动所有的 datanode 进程。
hadoop-daemons.sh start datanode
10.启动 ZKFailoverCotroller
# 在 node 和 node1 上分别启动 ZkFailoverCotroller(主备切换控制器),
# 是 NameNode 机器 上一个独立的进程(进程名为 zkfc)。
hadoop-daemon.sh start zkfc
11.到此就可以使用 jps 命令查看进程
node 六个
node1 六个
node2 四个
查看NameNode的节点状态
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
关于故障转移机制无效,下载插件
yum install psmisc
Yarn HA 环境搭建
1.在完成 HDFS HA 的基础上安装
关闭所有进程。
2.同样在hadoop目录下修改配置文件
vi yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>NodeManager上运行的附属服务。
指定NodeManager获取数据的方式是shuffle
需配置成mapreduce_shuffle,才可运行MapReduce程序</description>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
<description>启用resourcemanager ha</description>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>rmCluster</value>
<description>指定resourcemanager的cluster-id</description>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
<description>声明两台resourcemanager的名字</description>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node</value>
<description>指定第一台resourcemanager的地址</description>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node1</value>
<description>指定第二台resourcemanager的地址</description>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node:2181,node1:2181,node2:2181</value>
<description>指定zookeeper集群的地址</description>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
<description>启用自动恢复</description>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
<description>指定resourcemanager的状态信息存储在zookeeper集群地址</description>
</property>
3.远程分发
scp -r yarn-site.xml node1:/usr/local/src/hadoop-2.6.0/etc/hadoop/
scp -r yarn-site.xml node2:/usr/local/src/hadoop-2.6.0/etc/hadoop/
# 查看两个ResourceManager的节点状态
yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2
yarn rmadmin -transitionToStandby rm1
port:8088
4.启动 Hadoop HA 集群
(1).在三个节点上启动 ZooKeeper。zkServer.sh start
(2).在 node 和 node1 上启动 zkfc。hadoop-daemon.sh start zkfc
(3).在 node 上启动 hadoop 集群。start-all.sh
(4).在 node1 上启动 resourcemanager。yarn-daemon.sh start resourcemanager
-getServiceState rm2
yarn rmadmin -transitionToStandby rm1
port:8088
#### 4.启动 Hadoop HA 集群
(1).在三个节点上启动 ZooKeeper。zkServer.sh start
(2).在 node 和 node1 上启动 zkfc。hadoop-daemon.sh start zkfc
(3).在 node 上启动 hadoop 集群。start-all.sh
(4).在 node1 上启动 resourcemanager。yarn-daemon.sh start resourcemanager
**注:全部启动后。节点数分别为** **8 8 5**