Hadoop高可用集群搭建(HA)

hadoop2.0已经发布了稳定版本了,增加了很多特性,比如HDFS HA、YARN等。最新的hadoop-2.4.1又增加了YARN HA

注意:apache提供的hadoop-2.4.1的安装包是在32位操作系统编译的,因为hadoop依赖一些C++的本地库,

建议第一次安装用32位的系统,此处我的环境是:VM12+CentOS6.8

1.修改Linux主机名
2.修改IP
3.修改主机名和IP的映射关系
######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机、阿里云主机等)
/etc/hosts里面要配置的是内网IP地址和主机名的映射关系

4.关闭防火墙
5.ssh免登陆
6.安装JDK,配置环境变量等

集群规划:
主机名 IP 安装的软件(jdk-1.7.0_79、hadoop-2.4.1、zookeeper-1.2.4)

gt01 192.168.11.21 jdk、hadoop、zookeeper
gt02 192.168.11.22 jdk、hadoop、zookeeper
gt03 192.168.11.23 jdk、hadoop、zookeeper                                                                                                                                                                                                                            gt04 192.168.11.24 jdk、hadoop、zookeeper

运行进程名称:(测试运行时输入jps即可查看)

gt01 NameNode、DFSZKFailoverController(zkfc)、Jps

gt02 NameNode、DataNode、QuorumPeerMain、JournalNode、Jps、

DFSZKFailoverController(zkfc)

gt03 DataNode、QuorumPeerMain、JournalNode、Jps、ResourceManager

gt04 DataNode、QuorumPeerMain、JournalNode、Jps、ResourceManager

说明:
1.在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态
2.hadoop-2.2.0中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop-2.4.1解决了这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调
安装步骤:
1.安装配置zooekeeper集群(在gt03上)
1.1解压
tar -zxvf zookeeper-3.4.5.tar.gz -C /gt/
1.2修改配置
cd /gt/zookeeper-3.4.5/conf/
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改:dataDir=/gt/zookeeper-3.4.5/data
在最后添加:
server.1=gt02:2888:3888
server.2=gt03:2888:3888
server.3=gt04:2888:3888
保存退出
然后创建一个data文件夹
mkdir /gt/zookeeper-3.4.5/fa
再创建一个空文件
touch /gt/zookeeper-3.4.5/data/myid
最后向该文件写入ID
echo 1 > /gt/zookeeper-3.4.5/data/myid
1.3将配置好的zookeeper拷贝到其他节点(首先分别在gt03、gt04根目录下创建一个gtt目录:mkdir /gt)
scp -r /gt/zookeeper-3.4.5/ gt03:/gt/
scp -r /gt/zookeeper-3.4.5/ gt04:/gt/

注意:修改gt03、gt04对应/gt/zookeeper-3.4.5/data/myid内容
gt03:
echo 2 > /gt/zookeeper-3.4.5/data/myid
gt04:
echo 3 > /gt/zookeeper-3.4.5/data/myid

2.安装配置hadoop集群(在gt01上操作)
2.1解压
tar -zxvf hadoop-2.4.1.tar.gz -C /gt/
2.2配置HDFS(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)
#将hadoop添加到环境变量中
vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_79
export HADOOP_HOME=/gt/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

#hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下
cd /gt/hadoop-2.4.1/etc/hadoop

2.2.1修改hadoo-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_79

2.2.2修改core-site.xml



fs.defaultFS
hdfs://ns1



hadoop.tmp.dir
/gt/hadoop-2.4.1/tmp



ha.zookeeper.quorum
gt02:2181,gt03:2181,gt04:2181



2.2.3修改hdfs-site.xml



dfs.nameservices
ns1



dfs.ha.namenodes.ns1
nn1,nn2



dfs.namenode.rpc-address.ns1.nn1
gt01:9000



dfs.namenode.http-address.ns1.nn1
gt01:50070



dfs.namenode.rpc-address.ns1.nn2
gt02:9000



dfs.namenode.http-address.ns1.nn2
gt02:50070



dfs.namenode.shared.edits.dir
qjournal://gt02:8485;gt03:8485;gt04:8485/ns1

(系统不会自己创建,等配置完成后需根据路径手动创建,切记!!!)

dfs.journalnode.edits.dir
/gt/hadoop-2.4.1/journal



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



2.2.4修改mapred-site.xml



mapreduce.framework.name
yarn



2.2.5修改yarn-site.xml



yarn.resourcemanager.ha.enabled
true



yarn.resourcemanager.cluster-id
yrc



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



yarn.resourcemanager.hostname.rm1
gt03


yarn.resourcemanager.hostname.rm2
gt04



yarn.resourcemanager.zk-address
gt02:2181,gt03:2181,gt04:2181


yarn.nodemanager.aux-services
mapreduce_shuffle




2.2.6修改slaves(slaves是指定子节点的位置,因为要在gt01上启动HDFS、在gt03启动yarn,所以gt01上的slaves文件指定的是datanode的位置,gt03上的slaves文件指定的是nodemanager的位置)
gt02
gt03
gt04

2.2.7配置免密码登陆
#首先要配置gt01到gt02、gt03、gt04的免密码登陆
#在gt01上生产一对钥匙
ssh-keygen -t rsa
#将公钥拷贝到其他节点,包括自己
ssh-coyp-id gt01
ssh-coyp-id gt02
ssh-coyp-id gt03
ssh-coyp-id gt04
注意:两个namenode之间要配置ssh免密码登陆,别忘了配置gt02到itcast01的免登陆
在gt02上生产一对钥匙
ssh-keygen -t rsa
ssh-coyp-id -i gt01
2.4将配置好的hadoop拷贝到其他节点
scp -r /gt/ gt02:/
scp -r /gt/ gt03:/
scp -r /gt/ gt04:/
###注意:严格按照下面的步骤
2.5启动zookeeper集群(分别在gt02、gt03、gt04上启动zk)
cd /gt/zookeeper-3.4.5/bin/
./zkServer.sh start
#查看状态(分别在gt02、gt03、gt04上执行下面命令):一个leader,两个follower
./zkServer.sh status

2.6启动journalnode(分别在在gt02、gt03、gt04上执行)
cd /gt/hadoop-2.4.1
sbin/hadoop-daemon.sh start journalnode
#运行jps命令检验,gt02、gt03、gt04上多了JournalNode进程

2.7格式化HDFS
#在gt01上执行命令:
hdfs namenode -format
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/gt/hadoop-2.4.1/tmp,然后将/gt/hadoop-2.4.1/tmp拷贝到gt02的/gt/hadoop-2.4.1/下。
scp -r tmp/ gt02:/gt/hadoop-2.4.1/

2.8格式化ZK并启动zk服务(在gt01上执行即可)
①: hdfs zkfc -formatZK
②: hadoop-daemon.sh start zkfc
此处因为Namenode节点是gt01、gt02,格式化只需在其中一台即可,但是两个NameNode节点都必须开启zkfc服务,即也需要在gt02上执行②的命令,否则无法实现两个节点之间的切换。
2.9启动HDFS(在gt01上执行)
sbin/start-dfs.sh

2.10启动YARN(#####注意#####:是在gt03上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)
sbin/start-yarn.sh
此处RM主机的地址我们在yarn-site.xml中已配置,所以需要分别在gt03、gt04上开启ResourceManager服务,即执行下面命令,否则yarn运行失败。
sbin/yarn-daemon.sh start resourcemanager
到此,hadoop-2.4.1配置完毕,可以统计浏览器访问:
192.168.11.21:50070
NameNode 'gt01:9000' (active)
192.168.11.22:50070
NameNode 'gt02:9000' (standby)

验证HDFS HA
首先向hdfs上传一个文件
hadoop fs -put /etc/profile /profile
hadoop fs -ls /
然后再kill掉active的NameNode
kill -9
通过浏览器访问:192.168.11.22:50070
NameNode 'itcast02:9000' (active)
这个时候gt02上的NameNode变成了active
在执行命令:
hadoop fs -ls /
-rw-r--r-- 3 root supergroup 1926 2014-02-06 15:36 /profile
刚才上传的文件依然存在!!!
手动启动那个挂掉的NameNode
sbin/hadoop-daemon.sh start namenode
通过浏览器访问:192.168.11.21:50070
NameNode 'gt01:9000' (standby)

验证YARN:
运行一下hadoop提供的demo中的WordCount程序:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out

如果搭建过程中遇到什么问题,请留言,会尽快回复。

你可能感兴趣的:(Hadoop高可用集群搭建(HA))