配置高可用
1.安装zookeeper
2.编辑那个安装zookeeper目录下conf文件夹里面的zoo_cfg
没有的话拷贝zoo_(添加到里面三台机器的ip地址,创建目录,在目录下创建myid,然后在每个myid下添加1,2,3、分别对应第一台,第二三台机器)
dataDir=/home/hadoop/apps/zkdata
server.1=192.168.80.10:2888:3888
server.2=192.168.80.11:2888:3888
server.3=192.168.80.12:2888:3888
3.在每台机器上开启服务
zkServer.sh start
开启失败时,去看下etc/hosts 将第一行注释很大原因是它,要么就是版本不匹配
4.查看状态
zkServer.sh status
5配置所有文件
vi core-site.xml
<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://qf/</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hdpdata</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>mini01:2181,mini02:2181,mini03:2181</value>
</property>
</configuration>
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.block.size</name>
<value>134217728</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/name1</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/apps/hadoop/data</value>
</property>
<!--指定hdfs的虚拟服务名-->
<property>
<name>dfs.nameservices</name>
<value>qf</value>
</property>
<!--指定hdfs的虚拟服务名下的namenode-->
<property>
<name>dfs.ha.namenodes.qf</name>
<value>nn1,nn2</value>
</property>
<!--指定namenode的内部通信地址-->
<property>
<name>dfs.namenode.rpc-address.qf.nn1</name>
<value>mini01:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.qf.nn2</name>
<value>mini02:9000</value>
</property>
<!--指定namenode的web ui通信地址-->
<property>
<name>dfs.namenode.http-address.qf.nn1</name>
<value>mini01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.qf.nn2</name>
<value>mini02:50070</value>
</property>
<!--指定journalnode数据共享目录-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://mini01:8485;mini02:8485;mini03:8485/qf</value>
</property>
<!--存放journalnode本地存放目录-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/apps/hadoop/journaldata</value>
</property>
<!--开启namenode失败是否自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--指定namanode失败进行自动切换的主类-->
<property>
<name>dfs.client.failover.proxy.provider.qf</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--指定脑裂时,采用某种方式杀死期中一个-->
<!--防止多个namenode,同active(脑裂)-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
在hdfs高可用HA的基础上搭建yarn
配置运行环境
vi mapred-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_67
vi yarn-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_67
##### 配置配置文件
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
vi yarn-site.xml
<configuration>
<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<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>mini01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>mini02</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>mini01:2181,mini02:2181,mini03:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
分发:
scp命令
scp -r hadoop-2.7.7 root@hadoop02:$PWD
scp -r hadoop-2.7.7 root@hadoop03:$PWD
免密:
各台机器间的免密设置
两台resourecmanager之间一定要免密
启动
启动zk
zkServer.sh start
jps查看
2674 Jps
2647 QuorumPeerMain
启动journalnode服务
hadoop-daemon.sh start journalnode
jps查看
2739 JournalNode
2788 Jps
2647 QuorumPeerMain
挑选两个namenode之中的一台来格式化
hdfs namenode -format
然后启动namenode,任意一台
hadoop-daemonsh start namenode
在另一台namenode的机子上拉取元数据
hdfs namenode -bootstrapStandby
格式化zkfc(在namenode节点)
hdfs zkfc -formatZK,两个节点
开启服务
start-all.sh
注意:每次重新启动开启服务时,保证zookeeper服务和journalnode是启动的再去启动所有服务。
还有namenode和zookeeper的格式化不宜频繁,在完美成功一次后尽量不要在初始化。
此次问题:
每次的namenode只能启动一台,并且hadoop01挂掉后hadoop02也会挂掉,最后发现在每次删除namenode和datanode的存放路径时连带把zookeeper下的配置路径下的myid也删除,有这个原因导致后面的集群启动失败,后来zookeeper的进程只能强制杀死,最后重新启动zookeeper并格式化,重新启动集群。注意:一定要按顺序启动。