您的位置:首页 > 运维架构 > Apache

apache hadoop namenode的HA搭建

2016-06-06 13:23 549 查看
基本架构如下:



1\\准备机器h15、h16、h17、h18

将zookeeper文件复制到h15\h16\h17上,并且解压

说明如下:zookeeper-3.4.6/zookeeper-3.4.6/docs/zookeeperStarted.html

2\\搭建zookeeper:使用机器h15\h16\h17(非单机版配置需要添加红色字体内容)

【a】分别在h15\h16\h17上zookeeper的解压目录下:/home/zookeeper-3.4.6/conf---à新建一个文件:zoo.cfg

内容:(见备注一)

tickTime=2000

dataDir=/var/lib/zookeeper

clientPort=2181

initLimit=5

syncLimit=2

server.1=h15:2888:3888

server.2=h16:2888:3888

server.3=h17:2888:3888

 

【b】分别在h15\h16\h17上的/var/lib目录下创建:vi  /var/lib/zookeeper/myid(内容见备注二)

   #myid的内容分别是server.1,server.2,server.3的数字;

即h15上是数字”1”,h16上是数字”2”,h17上是数字”3”

【c】分别在h15\h16\h17上配置zookeeper的环境变量

#vi ~/.bash_profile

添加:

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:/home/zookeeper-3.4.6/

bin生效一下:source ~/.bash_profile

【d】分别在h15,h16,h17上的zookeeper的bin目录下启动zookeeper:

#zkServer.sh start     --------àjps查看进程------》再查看当前的目录下的日志文件:zookeeper.out

如果没有错误日志,那么启动正常!

 

3\\搭建journal:使用机器h16\h17\h18

  \\在原有的h15是namenode的情况下,增加一个namenode,h18

 

操作查看hadoop官网介绍:

share/doc/hadoop/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

【a】删除h15\h16\17\h18上,原有的数据目录:data1\data2   \home\hadoop

【b】进入h15配置hdfs-site.xml(最终配置的内容见备注三)

“mycluster”:是全局的集群唯一namenodeID

“nn1,nn2”:      是namenode的别名,本机指定实际对应的是h15、h18

<property>

  <name>dfs.nameservices</name>

  <value>yangjifei</value>

</property>

<property>

  <name>dfs.ha.namenodes.yangjifei</name>

  <value>nn1,nn2</value>

</property>

<property>

  <name>dfs.namenode.rpc-address.yangjifei.nn1</name>

  <value>h15:8020</value>

</property>

<property>

  <name>dfs.namenode.rpc-address.yangjifei.nn2</name>

  <value>h18:8020</value>

</property>

<property>

  <name>dfs.namenode.http-address.yangjifei.nn1</name>

  <value>h15:50070</value>

</property>

<property>

  <name>dfs.namenode.http-address.yangjifei.nn2</name>

  <value>h18:50070</value>

</property>

【c】hdfs-site.xml上再配置journal的机器名称

这里我设置h16\h17\h18为journal机器节点

<property>

  <name>dfs.namenode.shared.edits.dir</name>

  <value>qjournal://h16:8485;h17:8485;h18:8485/yangjifei</value>

</property>

 

【d】在hdfs.xml上再指定全局的唯一namenodeID,使用一个java类获取

<property>

  <name>dfs.client.failover.proxy.provider.yangjifei</name>

  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

【f】在hdfs-site.xml中,再配置私钥所在目录(因为它们是用私钥交互),

一定要用私钥的目录:/root/.ssh/id_rsa

<property>

  <name>dfs.ha.fencing.methods</name>

  <value>sshfence</value>

</property>

<property>

  <name>dfs.ha.fencing.ssh.private-key-files</name>

  <value>/root/.ssh/id_dsa</value>

</property>

<property>

  <name>dfs.journalnode.edits.dir</name>

  <value>/path/to/journal/node/local/data</value>

</property>

【g】在hdfs-site.xml中配置namenode自动切换的功能,设置为true

<property>

   <name>dfs.ha.automatic-failover.enabled</name>

   <value>true</value>

 </property>

【h】在core-site.xml(最终内容见备注四)中,配置故障转移的监控zookeeper节点

<property>

   <name>ha.zookeeper.quorum</name>

   <value>h15:2181,h16:2181,h17:2181</value>

 </property>

   <property>

        <name>fs.defaultFS</name>

        <value>hdfs://yangjifei</value>

    </property>

    <property>

        <name>hadoop.tmp.dir</name>

        <value>/home/hadoop</value>

    </property>

 

注意:配置结束后必须保证,h15\h16\h17\h18机器的hdfs-site.xml和core-site.xml文件一致

即:复制文件到其他的h16\h17\18集群上

#scp /home/hadoop-2.5.1/etc/hadoop/* root@h16:/home/hadoop-2.5.1/etc/hadoop/

#scp /home/hadoop-2.5.1/etc/hadoop/* root@h17:/home/hadoop-2.5.1/etc/hadoop/

#scp /home/hadoop-2.5.1/etc/hadoop/* root@h18:/home/hadoop-2.5.1/etc/hadoop/

注意:需要使core-site.xml上的”hdfs://yangjifei”与hdfs-site.xml文件取得别名一致

4\\配置h18与h15的免密码登录(注意一定也要检查h15和h18是否自己能够登录自己,其他节点也要生成密钥,但是不用追加)

秘钥:包括公钥和私钥

在h18上,将其公钥复制到h15上;然后在h15上,追加其公钥到au??

先在h18上生成秘钥:ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

再复制公钥到h15上:复制到另一个目录下(/home)

#scp ~/.ssh/id_dsa.pub  root@192.168.142.115: /home/

#cat /home/id_dsa.pub  >> ~/.ssh/authorized_keys

#cat ~/.ssh/id_dsa.pub  >> ~/.ssh/authorized_keys

 

rm -rf authorized_keys

注:另一种很简单的免密码登陆方法

在h15的根目录下执行

#ssh-keygen    ------》不断回车---》直到生成完成

然后执行以下命令

#ssh-copy-id root@h16

#ssh-copy-id root@h17

#ssh-copy-id root@h18

那么可以实现h15免密码登陆h16\h17\h18

 

5\\在h15上多节点地启动zookeeper:命令目录在/hadoop-2.5.1/sbin下

单节点启动:#hadoop-daemon.sh start

或者进入目录后执行:zookeeper-3.4.6/bin/zkServer.sh start

检查h15\h16\h17是否成功:jps



6\\在\h18\h17\h16上的hadoop的sbin目录下

分别单节点启动journal:./hadoop-daemon.sh start journalnode

如     [root@h18 sbin]# ./hadoop-daemon.sh start journalnode

检查h16\h17\h18启动是否成功:jps



7\\在h15\h18其中一个namenode上格式化:hdfs namenode -format

把刚刚格式化之后的元数据拷贝到另外一个namenode上

复制文件夹的命令:scp  -r  /home/hadoop  root@h18:/home

 

a) 启动刚刚格式化的namenode :sh hadoop-daemon.sh start namenode

    (注意:如果datanode没有起来,那么需要各自执行:sh hadoop-daemon.sh start datanode)

b) 在没有格式化的namenode上执行:hdfs namenode -bootstrapStandby

c) 在h15(或者能够免密码联通所有机器的namenode)上

启动namenode à [h18@root sbin]# sh start-dfs.sh(同时启动zfc的命令)

d) 在其中一个namenode上初始化zkfc:hdfs zkfc –formatZK(只能格式化一次)

8\\在h15上启动集群:start-dfs.sh和start-yarn.sh

全部启动:start-all.sh脚本现在已经废弃,推荐使用start-dfs.sh和start-yarn.sh分别启动HDFS和YARN。

错误:root@h15's password: h15: Permission denied, please try again.

原因是在h15\h18上自己不能ssh连接自己,解决:在h15和h18上先执行

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

再执行:cat  ~/.ssh/id_dsa.pub  >> ~/.ssh/authorized_keys

 

9\\测试是否成功(页面上要有standby和active)

错误:org.apache.hadoop.ha.ZKFailoverController: Unable to start failover con

troller. Parent znode does not exist.

解决:由于zkfc没有全部起来,原因是没有格式化成功!即第7步没有成功,需要重新来一次-----》

先在h15上格式化后:hdfs zkfc -formatZK

再在h15\h16上启动:hadoop-daemon.sh start zkfc

 

如果由于数据的影响,不能正常启动hadoop集群,则需要清除/data1   /data2    /opt/stx/hadoop 后,再执行7、8、9步骤

错误: org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Error starting

 ResourceManagerorg.apache.hadoop.yarn.exceptions.YarnRuntimeException: Invalid configuration! Can not find valid RM_HA_ID.

解决:yarn-site.xml文件配置节点名称错误!修改

错误:Error: Could not find or load main class resourcemanager

使用命令启动:yarn-daemon.sh start resourcemanager

因为resourcemanger和nodemanger由yarn管理

 

(增加高可用配置,不用执行7\8\9步)

10\\h15和h18是RM,h15、h16、h17是zookeeper

11\\在h15上配置hadoop/etc/yarn-site.xml(内容见备注五)

再配置,重命名mapred-site.xml.template   ----àmapred-site.xml(见备注六)

12\\分别复制到h16\h17\h18上

#scp /home/hadoop-2.5.1/etc/hadoop/* root@h16:/home/hadoop-2.5.1/etc/hadoop/

#scp /home/hadoop-2.5.1/etc/hadoop/* root@h17:/home/hadoop-2.5.1/etc/hadoop/

#scp /home/hadoop-2.5.1/etc/hadoop/* root@h18:/home/hadoop-2.5.1/etc/hadoop/

13\\在h15上启动:sh start-yarn.sh-----à只启动一个

14\\在h18上单独启动备用ResourceManager:#yarn-daemon.sh start resourcemanager

因为#sh start-all.sh------à只会启动一台resourcemanage, 所以h18需要另外重启

 

15\\浏览器访问:

#http://h15:8088

如果访问正常,并且可以监控资源,那么正常

(1)访问备用ResourceManager:

#http://h18:8088

如果直接重定向到原来的http://h15:8088页面,那么正常

(2)如果在h15中,执行kill -9 ? 后,隔10s(备用的,默认汇报给ResourceManager的时间是10s,而其他的是1s)

 

注:常用命令

start-dfs.sh

start-yarn.sh

zkServer.sh start

hadoop-daemon.sh start journalnode

yarn-daemon.sh start resourcemanager

 

 

备注一:zookeeper的配置文件zoo.cfg内容(目录是:/home/zookeeper-3.4.6/conf)

tickTime=2000

dataDir=/var/lib/zookeeper

clientPort=2181

initLimit=5

syncLimit=2

server.1=h15:2888:3888

server.2=h16:2888:3888

server.3=h17:2888:3888

注意:h15\h16\h17这三台机器的zoo.cfg文件是一样的

 

备注二:myid文件内容(目录:/var/lib/zookeeper/myid)

2

注意:这个数字二指的是zoo.cfg中“server.**=h?:2888:3888”,的*代表的数字,每台zookeeper对应一个

“server.*=?:2888:3888”,此处举例是h16,所以h16对应得是“server.2=h16:2888:3888”

 

备注三:hdfs-site.xml的配置文件(目录:/home/hadoop-2.5.1/etc/hadoop/)

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

<name>dfs.datanode.data.dir</name>

<value>/data1,/data2</value>

</property>

 

<property>

  <name>dfs.nameservices</name>

  <value>yangjifei</value>

</property>

<property>

  <name>dfs.ha.namenodes.yangjifei</name>

  <value>nn1,nn2</value>

</property>

<property>

  <name>dfs.namenode.rpc-address.yangjifei.nn1</name>

  <value>h15:8020</value>

</property>

<property>

  <name>dfs.namenode.rpc-address.yangjifei.nn2</name>

  <value>h18:8020</value>

</property>

<property>

  <name>dfs.namenode.http-address.yangjifei.nn1</name>

  <value>h15:50070</value>

</property>

<property>

  <name>dfs.namenode.http-address.yangjifei.nn2</name>

  <value>h18:50070</value>

</property>

<property>

  <name>dfs.namenode.shared.edits.dir</name>

  <value>qjournal://h16:8485;h17:8485;h18:8485/yangjifei</value>

</property>

<property>

  <name>dfs.client.failover.proxy.provider.yangjifei</name>

  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

<property>

  <name>dfs.ha.fencing.methods</name>

  <value>sshfence</value>

</property>

<property>

  <name>dfs.ha.fencing.ssh.private-key-files</name>

  <value>/root/.ssh/id_dsa</value>

</property>

<property>

  <name>dfs.journalnode.edits.dir</name>

  <value>/path/to/journal/node/local/data</value>

</property>

<property>

   <name>dfs.ha.automatic-failover.enabled</name>

   <value>true</value>

 </property>

</configuration>

 

备注四:core-site.xml的配置内容(目录: /home/hadoop-2.5.1/etc/hadoop/)

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

   <property>

        <name>fs.defaultFS</name>

        <value>hdfs://yangjifei</value>

    </property>

    <property>

        <name>hadoop.tmp.dir</name>

        <value>/home/hadoop</value>//该目录是数据元的存放目录

    </property>

    <property>

        <name>ha.zookeeper.quorum</name>

        <value>h15:2181,h16:2181,h17</value>//zookeeper机器的host别名

    </property>

</configuration>

 

 

 

 

 

备注五:配置zookeeper的高可用,文件yarn-site.xml(目录:/home/hadoop-2.5.1/etc/hadoop/)

/h15和h18可以互相接管监控资源状况!!他们是ResourceManager

<?xml version="1.0"?>

<configuration>

<property>

   <name>yarn.nodemanager.aux-services</name>

   <value>mapreduce_shuffle</value>

</property>

<property>

   <name>yarn.resourcemanager.ha.enabled</name>

   <value>true</value>

 </property>

 <property>

   <name>yarn.resourcemanager.cluster-id</name>

   <value>cluster1</value>

 </property>

 <property>

   <name>yarn.resourcemanager.ha.rm-ids</name>

   <value>rm1,rm2</value>

 </property>

 <property>

   <name>yarn.resourcemanager.hostname.rm1</name>

   <value>h15</value>

 </property>

 <property>

   <name>yarn.resourcemanager.hostname.rm2</name>

   <value>h18</value>

 </property>

 <property>

   <name>yarn.resourcemanager.zk-address</name>

   <value>h15,h16,h17</value>

 </property>

</configuration>

备注六:zookeeper高可用的配置,mapred-site.xml(目录:/home/hadoop-2.5.1/etc/hadoop/)

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

    </property>

</configuration>

测试已经通过,可以按照步骤搭建!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: