配置Hadoop-2.4.0的HA+Federation+Yarn详细记录

来源:互联网 发布:mac怎么连接打印机 编辑:程序博客网 时间:2024/05/16 01:34

本篇是配置HA和Federation,并非单独配置其中一个,我参考了吴超老师及网上的资料,详细的记录了我搭建的全过程

吴超老师搭建:国内第一篇详细讲解hadoop2的automatic HA+Federation+Yarn配置的教程

下面开始我苦逼的搭建四个结点的过程

1.配置信息

主机名         IP                            操作系统                   是否NameNode   是否JournalNode   是否Zookeeper   是否ZKFC   是否DataNode

hadoop1      192.168.1.151        RedHat 6.5                是                         是                           是                        是                是

hadoop2      192.168.1.152        CentOS 6.5 mini        是                         是                           是                        是                是     

hadoop3      192.168.1.153        CentOS 6.5 mini        是                         是                           是                        是                是

hadoop4      192.168.1.154        CentOS 6.5 mini        是                         是                           否                        是                是

我的电脑是渣渣,总共才8G内存,不能太嚣张的安装很多大型虚拟机,就算四个小的,CPU也跟不上,只好装迷你版,大量的操作通过 hadoop1 完成


2.我用的软件版本

jdk-7u71-linux-i586.tar.gz

hadoop-2.4.0.tar.gz

zookeeper-3.4.6.tar.gz


3.我配置的体系结构

hadoop1和hadoop2组成一个HA,hadoop3和hadoop4组成一个HA

hadoop1和hadoop3组成Federation的两个 nameservice,hadoop2和hadoop4分别是他们的Standby

下面图片展示的是 HA和Federation的体系结构,当然这不是我的架构,只是网络上的图片,便于理解这个体系


HA+Federation体系结构


4.我安装的目录

jdk:/usr/lib/jdk

hadoop:/usr/local/hadoop

zookeeper:/usr/local/zookeeper


5.既然能搭建HA和Federation,想必基本的分布式系统,单机模式都搭建成功了,下面直接讲配置

hadoop-env.sh,yarn-env.sh

export JAVA_HOME=/usr/local/jdk   

具体详细配置参考度娘


core-site.xml

 <property>

<name>hadoop.tmp.dir</name>           --临时文件夹,默认在linux 的 /tmp下,每次重启都会清空,配置下比较好

<value>/usr/local/hadoop/tmp</value>

</property>

<property> 

<name>ha.zookeeper.quorum</name>             --Zookeeper集群的地址端口,要是奇数,不少于3个结点,用于选举,自动切换HA的namenode结点

<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>

</property>

<property>

<name>fs.defaultFS</name>               --接下来的三个配置时配置 Federation的,我是配置成功了,具体怎么用还没研究清楚,后期慢慢的编辑

<value>viewfs:///</value>

</property>

<property>

<name>fs.viewfs.mounttable.default.link./cluster1</name>

<value>hdfs://HadoopCluster1/c1</value>

</property>

<property>

<name>fs.viewfs.mounttable.default.link./cluster2</name>

<value>hdfs://HadoopCluster2/c2</value>

</property>

   <property>

    <name>hadoop.proxyuser.hadoop.hosts</name>

    <value>*</value>

   </property>

   <property>

       <name>hadoop.proxyuser.hadoop.groups</name>

       <value>*</value>

   </property>

<property>

   <name>ha.zookeeper.session-timeout.ms</name>

    <value>1000</value>

    <description>ms</description>

</property>



hdfs-site.xml

关于这个,网络上说不同的Federation结点这个配置不一样,我这边是配置成一样的,方便同步到其他机器,为什么能配置一样我会注释的

<property>

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

<value>file:///usr/local/hadoop/dfs/name</value>

</property>

<property>

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

<value>file:///usr/local/hadoop/dfs/data</value>

</property>

<property>

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

<value>/usr/local/hadoop/dfs/journal</value>

</property>

<property> 

<name>dfs.replication</name> 

<value>2</value>

</property>

<property> 

<name>dfs.nameservices</name>

<value>HadoopCluster1,HadoopCluster2</value>

</property>

<property>

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

<value>hadoop1,hadoop2</value>

</property>

<property>

<name>dfs.namenode.rpc-address.HadoopCluster1.hadoop1</name>

<value>hadoop1:9000</value>

</property>

<property>

<name>dfs.namenode.http-address.HadoopCluster1.hadoop1</name>

<value>hadoop1:50070</value>

</property>

<property>

<name>dfs.namenode.rpc-address.HadoopCluster1.hadoop2</name>

<value>hadoop2:9000</value>

</property>

<property>

<name>dfs.namenode.http-address.HadoopCluster1.hadoop2</name>

<value>hadoop2:50070</value>

</property>

<property>

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

<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/HadoopCluster1</value>

</property>

<property>

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

<value>true</value>

</property>

<property>

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

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

</property>



<property>

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

<value>hadoop3,hadoop4</value>

</property>

<property>

<name>dfs.namenode.rpc-address.HadoopCluster2.hadoop3</name>

<value>hadoop3:9000</value>

</property>

<property>

<name>dfs.namenode.http-address.HadoopCluster2.hadoop3</name>

<value>hadoop3:50070</value>

</property>

<property>

<name>dfs.namenode.rpc-address.HadoopCluster2.hadoop4</name>

<value>hadoop4:9000</value>

</property>

<property>

<name>dfs.namenode.http-address.HadoopCluster2.hadoop4</name>

<value>hadoop4:50070</value>

</property>

<property>

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

<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/HadoopCluster2</value>

</property>

<property>

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

<value>true</value>

</property>

<property>

<name>dfs.client.failover.proxy.provider.HadoopCluster2</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>/home/hadoop/.ssh/id_rsa</value>

</property>

<property>

<name>dfs.datanode.max.xcievers</name>

<value>4096</value>

</property>


mapred-site.xml

<property>

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

<value>yarn</value>

</property>


yarn-site.xml

<property>

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

<value>hadoop1</value>

</property>
<property>

<name>yarn.resourcemanager.scheduler.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>

</property>

<property>

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

<value>mapreduce_shuffle</value>

</property>

<property>

<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

<value>org.apache.hadoop.mapred.ShuffleHandler</value>

</property>

这些都是些基本的配置,如果你想个性化配置,自己配置就行,我一般都是默认系统的地址和端口


slaves

hadoop1

hadoop2

hadoop3

hadoop4


启动

6.启动Zookeeper

在hadoop1,hadoop2,hadoop3上执行  /usr/local/zookeeper/bin/zkServer.sh start

检测:/usr/local/zookeeper/bin/zkServer.sh status

看看zookeeper的状态,一般一个  leader 和  剩下的 follower


7.接下来格式化Zookeeper集群,用于HA

在hadoop1上执行:/usr/local/hadoop/bin/hdfs zkfc –formatZK

在hadoop3上执行:/usr/local/hadoop/bin/hdfs zkfc –formatZK

具体的格式化产生的日志是什么样的,我就不贴了,可以参考我给出的吴超老师的页面

检测是否成功:/usr/local/zookeeper/bin/zkCli.sh

WatchedEvent state:SyncConnected type:None path:null

[zk: localhost:2181(CONNECTED) 0] ls /

[hadoop-ha, zookeeper]

[zk: localhost:2181(CONNECTED) 1] ls /hadoop-ha

[HadoopCluster2, HadoopCluster1]

到这里执行  quit  退出即可


8.启动Journalnode集群,我选四个结点都是Journalnode结点,方便一起启动

在一个结点上执行,我选择hadoop1:/usr/local/hadoop/sbin/hadoop-daemons.sh startjournalnode  --这是一起启动所有结点的journalnode,熟悉这个启动脚本会明白

如果你选择一个结点一个结点的启动:/usr/local/hadoop/sbin/hadoop-daemon.sh startjournalnode   --妥妥滴,在所有节点都执行一遍

利用 jps 查看进程信息看看是否有   journalnode  进程

进入 /usr/local/hadoop/dfs/  下  会生成一个 journal  文件夹 ,请看配置,这个是自己定义的


9.格式化HadoopCluster1的Namenode

格式化hadoop1

在hadoop1执行以下命令:/usr/local/hadoop/bin/hdfs namenode -format -clusterid liufeiqiang

注意这里的   liufeiqiang  是你自己 定义的集群 ID,使用federation时,集群ID一定要自己指定,保证大家ID一样 ,格式化另一个 nameservice 时要用到,

格式化完毕,查看/usr/local/hadoop/dfs/ 文件夹,这时生成了一个name 文件夹

启动hadoop1的namenode:/usr/local/hadoop/sbin/hadoop-daemon.sh start namenode

这时用  jps  命令看看是否有  namenode  进程,有即表示成功,这时可以访问  hadoop1:50070 如果打开页面,也表示启动成功


格式化hadoop2,这里的hadoop2是hadoop1的热备,所以不能单纯的格式化,需要同步数据,

在hadoop2上执行命令:/usr/local/hadoop/bin/hdfs namenode –bootstrapStandby

等格式化完成,验证是否格式化成功,在/usr/local/hadoop/dfs/ 目录下 生成  name 文件夹,表示成功

启动hadoop2的namenode:/usr/local/hadoop/sbin/hadoop-daemon.sh start namenode

利用 jps 命令,或 hadoop2:50070 都可以查看是否启动成功


10.格式化HadoopCluster2的Namenode

格式化hadoop3

在hadoop3执行以下命令:/usr/local/hadoop/bin/hdfs namenode -format -clusterid liufeiqiang        --看,这里的  liufeiqiang  就是和上面的集群 ID  一致,而吴超老师为什么两个集群ID设置的不一致,我也没看懂,还有待以后的学习。

格式化完毕,查看/usr/local/hadoop/dfs/ 文件夹,这时生成了一个name 文件夹

启动hadoop3的namenode:/usr/local/hadoop/sbin/hadoop-daemon.sh start namenode

这时用  jps  命令看看是否有  namenode  进程,有即表示成功,这时可以访问  hadoop3:50070 如果打开页面,也表示启动成功


格式化hadoop4,这里的hadoop4是hadoop3的热备,所以也不能单纯的格式化,需要同步数据,

在hadoop4上执行命令:/usr/local/hadoop/bin/hdfs namenode –bootstrapStandby

等格式化完成,验证是否格式化成功,在/usr/local/hadoop/dfs/ 目录下 生成  name 文件夹,表示成功

启动hadoop4的namenode:/usr/local/hadoop/sbin/hadoop-daemon.sh start namenode

利用 jps 命令,或 hadoop4:50070 都可以查看是否启动成功


11.启动所有的Datanode

在hadoop1上执行命令:/usr/local/hadoop/sbin/hadoop-daemons.sh start datanode       --这里注意下,如果你集群上的 slaves  文件一样,那么随便一个结点都可以启动

用 jps 命令检查是否有 DataNode 进程,或访问  hadoop1:50075,能打开页面也表示成功


12.启动 Yarn

在hadoop1上执行命令:/usr/local/hadoop/sbin/start-yarn.sh            --这里也是一样的,随便一个节点都可以

用 jps 命令检查是否有 ResourceManager 进程,或访问  hadoop1:8088,能打开页面也表示成功


13.启动 ZooKeeperFailoverController

在hadoop1上执行命令:/usr/local/hadoop/sbin/hadoop-daemons.sh start zkfc     --妥妥滴一条命令,启动所有节点的ZKFC

--如果你想单独启动ZKFC,在hadoop1、hadoop2、hadoop3、hadoop4上分别执行命令:/usr/local/hadoop/sbin/hadoop-daemon.sh start zkfc 

利用 jps 查看是否有 DFSZKFailoverController 进程,有则表示成功


14.验证 HDFS 是否可行


15.验证 Yarn 是否可行


16.验证HA的故障自动转移是否好用

开始时,hadoop3是standby node,hadoop4是active node ,把hadoop4的namenode进程kill掉   kill -9 pid

刷新页面

自动转换成功,perfect


17.下面贴出启动完成后所有的进程

[hadoop@hadoop1 ~]$ jps                                               [hadoop@hadoop2 ~]$ jps

2915 DataNode                                                                1387 NameNode

3039 ResourceManager                                                   1114 QuorumPeerMain

3145 NodeManager                                                          1634 NodeManager

2539 JournalNode                                                            1176 DFSZKFailoverController

2661 NameNode                                                              1519 DataNode

5154 Jps                                                                           3153 Jps

2430 DFSZKFailoverController                                        1243 JournalNode

2316 QuorumPeerMain



[hadoop@hadoop3 ~]$ jps                                               [hadoop@hadoop4 ~]$ jps

1882 QuorumPeerMain                                                    1550 NodeManager

2836 DataNode                                                                 3084 Jps

4494 Jps                                                                           1313 NameNode

2037 JournalNode                                                             1124 DFSZKFailoverController

2953 NodeManager                                                          1181 JournalNode

2632 NameNode                                                               1436 DataNode

1963 DFSZKFailoverController





妈蛋,我的手要冻掉了,寒冷的冬天,没个妹子,心冷手冷身体更冷快哭了快哭了快哭了,今天就记到这里,剩下的慢慢补全,这个是我一点一点记录的,苦逼的IT技术员,请各位大牛不要嘲笑,如果要转载,请注明出处,顺带给我涨点人气大哭大哭大哭大哭



0 0