配置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的体系结构,当然这不是我的架构,只是网络上的图片,便于理解这个体系
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
- 配置Hadoop-2.4.0的HA+Federation+Yarn详细记录
- centos hadoop-2.3.0(HA+Federation+YARN)配置
- 国内第一篇详细讲解hadoop2的automatic HA+Federation+Yarn配置的教程
- 国内第一篇详细讲解hadoop2的automatic HA+Federation+Yarn配置的教程
- 详细讲解hadoop2的automatic HA+Federation+Yarn配置的教程
- 国内第一篇详细讲解hadoop2的automatic HA+Federation+Yarn配置的教程
- 国内第一篇详细讲解hadoop2的automatic HA+Federation+Yarn配置的教程
- 国内第一篇详细讲解hadoop2的automatic HA+Federation+Yarn配置的教程
- 国内第一篇详细讲解Hadoop2的automatic HA+Federation+Yarn配置的教程
- hadoop2的automatic HA+Federation+Yarn配置的教程
- hadoop2的automatic HA+Federation+Yarn配置的教程
- Hadoop2的automatic HA+Federation+Yarn
- HDFS的Federation以及HA+YARN+ResourceManagerHA
- 国内第一篇详细讲解hadoop2的automatic HA+Federation+Yarn的教程
- hadoop federation 与hadoop HA
- HDFS HA+Federation配置
- Hadoop2.2.0--Hadoop Federation、Automatic HA、Yarn完全分布式集群搭建
- 整理Hadoop2下Hadoop Federation、Automatic HA、Yarn完全分布式集群搭建
- 推荐系统的常见推荐算法的性能比较
- eclipse中dynamic web无法添加tomcat的runtime
- C语言插入排序
- 黑马程序员----java反射详解
- 九度OJ—题目1031:xxx定律
- 配置Hadoop-2.4.0的HA+Federation+Yarn详细记录
- 标准C++中的string类的用法总结
- LEETCODE: Binary Tree Inorder Traversal
- 九度OJ—题目1050:完数
- 开源中国广州源创会分享
- 自定义组合控件
- 常用防反接电路
- Spring框架学习(二) 之 jar包
- Android系统中TouchEvent的传递流程以及相关函数返回值True和False对流程的影响