hadoop HA(high available)集群搭建

这篇文章重现了我自己用七台centos6.7mnimal虚拟机搭建一个ha hadoop集群的过程。(之前配置虚拟机和搭建hadoop集群的文章:虚拟机的配置和Hadoop集群的配置)

环境准备

从以前安装的虚拟机克隆7台(已经装好jdk,hadoop)。

  • vi /etc/udev/rules.d/70-persistent-net.rules(把eth1改为eth0,删除eth0所在行)
  • vi /etc/sysconfig/network(修改主机名)
  • vi /etc/sysconfig/network-scripts/ifcfg-eth0(配置ip)
  • service iptables status(确认防火墙关闭)
  • reboot
  • vi /etc/hosts配置hosts
  • ssh免密登陆配置(ssh-keygen,ssh-copy-id xxx
  • 确定安装好jdk,配置好环境变量

集群规划

主机名 IP 安装的软件 运行的进程
ha1 192.168.23.205 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)
ha2 192.168.23.206 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)
ha3 192.168.23.207 jdk、hadoop ResourceManager
ha4 192.168.23.208 jdk、hadoop ResourceManager
ha5 192.168.23.209 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
ha6 192.168.23.210 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
ha7 192.168.23.211 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
  • 这里有两个NameNode,一个处于active状态,一个处于standby状态。ActiveNamenode对外提供服务,而StandbyNamenode则不对外提供服务,仅同步active namenode的状态,以便在故障时快速进行切换。hadoop2.0提供了两种HDFS HA的解决方案,NFS和QJM,这里我们使用QJM。在该方案中两个namenode间通过JournalNode同步元数据信息,一条数据只要写入JournalNode即认为写入成功。通常配置奇数个JournalNode,依靠zookeeper来协调。这里还配置了一个zookeeper集群,用于ZKFC故障转移。ResourceManager也是有一个Active,一个Standby,状态由zookeeper进行协调。

安装

zookeeper集群和简单的hadoop集群搭建前面已经介绍过
关于zookeeper:配置的要点是zoo.cfg(配置dataDir,server)和myid(在dataDir中),然后拷贝分发到奇数个节点(加上这个)上(mkdir datadir,修改myid)。
关于hadoop,添加环境变量,然后配置$HADOOP_HOME/etc/hadoop下的文件:

  • hadoop-env.sh
    export JAVA_HOME=/apps/jdk1.7.0_45
  • core-site.xml



fs.defaultFS
hdfs://bigdata/



hadoop.tmp.dir
/home/hadoop/hdpdata/



ha.zookeeper.quorum
ha5:2181,ha6:2181,ha7:2181


  • hdfs-site.xml



dfs.nameservices
bigdata



dfs.ha.namenodes.bigdata
nn1,nn2



dfs.namenode.rpc-address.bigdata.nn1
ha1:9000



dfs.namenode.http-address.bigdata.nn1
ha1:50070



dfs.namenode.rpc-address.bigdata.nn2
ha2:9000



dfs.namenode.http-address.bigdata.nn2
ha2:50070



dfs.namenode.shared.edits.dir
qjournal://ha5:8485;ha6:8485;ha7:8485/bigdata



dfs.journalnode.edits.dir
/home/hadoop/journaldata



dfs.ha.automatic-failover.enabled
true



dfs.client.failover.proxy.provider.bigdata
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider



dfs.ha.fencing.methods

sshfence
shell(/bin/true)




dfs.ha.fencing.ssh.private-key-files
/home/hadoop/.ssh/id_rsa



dfs.ha.fencing.ssh.connect-timeout
30000


  • mapred-site.xml



mapreduce.framework.name
yarn


  • yarn-site.xml



yarn.resourcemanager.ha.enabled
true



yarn.resourcemanager.cluster-id
yrc



yarn.resourcemanager.ha.rm-ids
rm1,rm2



yarn.resourcemanager.hostname.rm1
ha3


yarn.resourcemanager.hostname.rm2
ha4



yarn.resourcemanager.zk-address
ha5:2181,ha6:2181,ha7:2181


yarn.nodemanager.aux-services
mapreduce_shuffle


  • slaves(datanode,nodemanager的主机)
ha5
ha6
ha7
  • 配置文件改好后,将hadoop拷贝到其他节点
scp -r /hadoop ha2:/
……

启动(按照顺序)

  • 启动zookeeper集群
cd /hadoop/apps/zookeeper-3.4.5/bin/
./zkServer.sh start
./zkServer.sh status
  • 启动JournalNode
cd /hadoop/hadoop-2.6.4
sbin/hadoop-daemon.sh start journalnode
  • 格式化hdfs
hdfs namenode -format
然后拷到另一个namenode下
scp -r tmp/ hadoop02:/home/hadoop/app/hadoop-2.6.4/
(hdfs namenode -bootstrapStandby)

生成了hdpdata的数据

  • 格式化zkfc(在ha1上执行一次即可)
hdfs zkfc -formatZK
可以/zookeeper/bin/zkCli.sh连上去查看
  • 启动hdfs
start-dfs.sh
  • 启动yarn
start-yarn.sh
hadoop HA(high available)集群搭建_第1张图片
启动hdfs的过程

hadoop HA(high available)集群搭建_第2张图片
启动yarn的过程

启动yarn时还需要手动起ha4主机上的resourcemanager(可能那个脚本没写好):
yarn-daemon.sh start resourcemanager
高可用的hadoop集群在这里配置完毕!
ha解决了hadoop 1namenode的单点故障问题,federation解决了扩容问题,namenode容量可以水平拓展。

你可能感兴趣的:(hadoop HA(high available)集群搭建)