测试启动

按照下面的每一步执行,执行完一定要看输出的信息,注意warn或error或fatal的情况。因为这都是可能是问题出现的地方。出现一个问题,不解决,可能就会影响接下来的测试。这才是真正的工作量。

1、启动zookeeper

在hadoop1、hadoop2、hadoop3、hadoop4、hadoop5上zookeeper目录下分别执行命令:bin/zkServer.sh start

在每一台机器执行完上面的命令后,执行jps,会显示:这是初步认定启动没有问题

 <span style="font-size:14px;">      <span style="font-size:12px;">tom@hadoop4:~yarn/hadoop2.2.0/app/zookeeper/bin$ ./zkServer.sh status
JMX enabled by default
Using config: /home/ericsson/zookeeper/bin/../conf/zoo.cfg
Mode: follower
tom@hadoop4:~yarn/hadoop2.2.0/app/zookeeper/bin$ </span></span>

2、验证格式化zookeeper

2.1执行zkCli.sh

在hadoop1机器上,hadoop目录,执行zkCli.sh 终端上会输出一连串的信息。最后结束的信息是

 <span style="font-size:12px;">Welcome to ZooKeeper!
2014-04-08 16:44:40,028 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2014-04-08 16:44:40,033 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost/127.0.0.1:2181, initiating session
JLine support is enabled
2014-04-08 16:44:40,094 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x145407bbc720004, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1]
[zk: localhost:2181(CONNECTED) 1] </span>

【可以看到ZK集群 中只有一个节点zookeeper】

2.2 格式化ZooKeeper集群

格式化zookeeper集群,目的是在ZooKeeper集群上建立HA的相应节点。

在hadoop1上的hadoop的目录执行:bin/hdfs zkfc –formatZK

正常命令输出结尾:

 <span style="font-size:12px;">// :: INFO ha.ActiveStandbyElector: Session connected.
// :: INFO zookeeper.ZooKeeper: Session: 0x545407c1d6c0003 closed
// :: INFO zookeeper.ClientCnxn: EventThread shut down</span>

如果终端输出是以上面结尾,应该是没有出现问题。

而我在执行的时候,遇到一个问题:在出现上面类似代码之后,报了一个异常,导致后面的执行没有结果,问题就出在这个异常的之上。

终端输出:

就是上面的异常,没有解决,导致下面的问题都不能进行,因为下面要在执行zkCli.sh,查看zookeeper有没有格式化成功,生成集群名称。自己也咨询了几个老师,他们给的回复也是不知所云。自己在这上面,也是耽误了很长时间,不知道到底问题出现在哪儿。其中有一个回复是:可能是 -formatZK声明有问题。字面解释是这样,但是formatZK的声明是没有问题。耽误了几天,在网上得到一个解决方案。Zookeeper日志的问题,因为zookeeper是不能自动清理日志的。因为事先,我在装zookeeper的时候,装过两次,但是对应的data和log目录数据没有更改,导致在执行formatZK命令的时候报错。

我把log日志删除掉,重新建立一个文件,最后问题解决。因为这个原因,自己也查了关于zookeeper的相关信息。这里只谈到zookeeper日志的问题,后续的话,我们更多的去谈zookeeper的相关内容。因为zookeeper的架构理念很重要。

在使用zookeeper过程中,我们知道,会有data和Log两个目录,分别用于snapshot和事务日志的输出(默认情况下只有data目录,snapshot和事务日志都保存在这个目录中,关于这两个目录的详细说明,请看《ZooKeeper管理员指南》)。

正常运行过程中,ZK会不断地把快照数据和事务日志输出到这两个目录,并且如果没有人为操作的话,ZK自己是不会清理这些文件的,需要管理员来清理,这里介绍4种清理日志的方法。在这4种方法中,推荐使用第一种方法,对于运维人员来说,将日志清理工作独立出来,便于统一管理也更可控。毕竟zk自带的一些工 具并不怎么给力,这里是社区反映的两个问题:这里可以参考:ZooKeepr日志清理 的4种方法:这里不多介绍。

验证:

执行:zkCli.sh

输出和上面执行zkCli.sh输出的内容相似。如果输出下面内容,则证明格式化zookeeper成功,否则就出现问题:

 WATCHER::
WatchedEvent state:SyncConnected type:None path:null
ls /
[hadoop-ha,zookeeper]
[zk: localhost:(CONNECTED) ] ls /hadoop-ha
[cluster1]
[zk: localhost:(CONNECTED) ]

3、启动JournalNode集群

在hadoop1、hadoop2、hadoop3、hadoop4、hadoop5上分别hadoop目录

执行命令:sbin/hadoop-daemon.sh start journalnode

命令输出(以hadoop1为例):

<span style="font-size:12px;">[tom@hadoop1 ~yarn/hadoop-2.2./]$ sbin/hadoop-daemon.sh start journalnode
starting journalnode, logging to yarn/hadoop-2.2./logs/hadoop-root-journalnode-hadoop101.out
[tom@hadoop1 ~yarn/hadoop-2.2./]$ </span>

在每个节点执行完启动命令后,每个节点都执行以下验证。

验证(以hadoop1为例):

 <span style="font-size:12px;">[tom@hadoop1 hadoop]$ jps
JournalNode
Jps
QuorumPeerMain
[tom@hadoop1 hadoop]$</span>

查看一下目录结构:

 <span style="font-size:12px;">[tom@hadoop1 ~yarn/yarn_data/]$ pwd
/home/tom/yarn/yarn_data
[tom@hadoop1 ~yarn/yarn_data/]$ ls tmp/
journal
[tom@hadoop1 ~yarn/yarn_data/]$</span>

【启动JournalNode后,会在本地磁盘产生一个目录,用户保存NameNode的edits文件的数据】

4、格式化集群的一个NameNode

从hadoop1和hadoop2中任选一个即可,这里选择的是hadoop1

在hadoop1上/home/tom/yarn/hadoop-2.2.0/目录下执行下面命令:

bin/hdfs namenode -format -clusterId c1

命令输出:

 <span style="font-size:12px;">
// :: INFO namenode.FSImage: Image file /usr/local/hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size bytes saved in seconds.
// :: INFO namenode.NNStorageRetentionManager: Going to retain images with txid >=
// :: INFO util.ExitUtil: Exiting with status
// :: INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop1/172.16.128.134
************************************************************/
[tom@hadoop1 ~yarn/hadoop-2.2./]$</span>

验证查看一下目录结构:

【格式化NameNode会在磁盘产生一个目录,用于保存NameNode的fsimage、edits等文件】

出现上面内容,则认为,格式化namenode成功。

5、启动刚才格式化的namenode

在hadoop1上/home/tom/yarn/hadoop-2.2.0/目录下执行命令:/sbin/hadoop-daemon.sh start namenode

命令输出:

[tom@hadoop1 ~yarn/hadoop-2.2.]$ sbin/hadoop-daemon.sh start namenode
starting namenode, logging to /home/tom/yarn/hadoop-2.2./logs/hadoop-root-namenode-hadoop101.out 验证:
[tom@hadoop1 ~yarn/hadoop-2.2./]$ jps
JournalNode
Jps
NameNode
QuorumPeerMain
[tom@hadoop1 ~yarn/hadoop-2.2./]$

在页面输入地址:hadoop1:50070/dfshealth.jsp,你可以在页面看到namenode1的状态,是standby。

6、把NameNode1的数据从hadoop1同步到hadoop2中

在hadoop2上home/tom/yarn/hadoop-2.2.0/目录上

执行命令:

bin/hdfs namenode –bootstrapStandby

命令输出:

 [tom@hadoop2 ~yarn/hadoop-2.2.]$bin/hdfs namenode -bootstrapStandby
// :: INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
........ 14/04/08 17:49:20 INFO util.ExitUtil: Exiting with status 0
14/04/08 17:49:20 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop2/172.16.128.135
************************************************************/
[tom@hadoo2 ~yarn/hadoop-2.2.]$ 验证: [tom@hadoop2 ~yarn/yarn_data]$ pwd
/home/tom/yarn/yarn_data
[tom@hadoop2 ~yarn/yarn_data]$ ls tmp/
dfs journal
[tom@hadoop2 ~yarn/yarn_data]$ls dfs/ name

【在tmp目录下产生一个目录name】

如果出现上面结果,证明数据从namenode1上同步到namenode2上是成功的。如果可以出现上面结果,继续下面的步骤。如果没有出现dfs目录,也同样执行下面的过程,不过两者产生的结果不一样。

7、启动hadoop2中另一个Namenode

在hadoop2上/home/tom/yarn/hadoop-2.2.0/目录下执行命令:/sbin/hadoop-daemon.sh start namenode

命令输出:

 [tom@hadoop2 ~yarn/hadoop-2.2.]$ sbin/hadoop-daemon.sh start namenode
starting namenode, logging to /home/tom/yarn/hadoop-2.2./logs/hadoop-root-namenode-hadoop101.out
验证: [tom@hadoop2 ~yarn/hadoop-2.2./]$ jps
JournalNode
Jps
NameNode
QuorumPeerMain
[tom@hadoop2 ~yarn/hadoop-2.2./]$

在页面地址输入:hadoop2:50070/dfshealth.jsp你就可以看到namenode2的状态效果。和namenode1一样,同样是standby状态。

不好的事情,我测试的过程就没有出现上面的结果,namenode进程没有启动。这个问题,也是卡在那儿不得已解决,耽误很长时间。问题,就出现在6、7两个步骤上。不知道怎么解决,后来咨询一个哥们,那哥们把在

http://hadoop.apache.org/docs/r2.3.0/hadoop-yarn/hadoop-yarn-site/HDFSHighAvailabilityWithQJM.html

上给我截了一个图,我仔细看了关于第6步的过程。其实就是为了把namenode1上格式化产生的目录,拷贝到namenode2中,既然执行6没有出现我想要的结果。那就直接把namenode1中目中的dfs目录直接复制到namenode2中不就OK了吗?事实证明正式如此,官网也是这么说明的。复制完毕,再在namenode2上执行第7步,jps就可以看到namenode起来的进程了。至此这个问题解决了。

8、启动所有的datanode

Datanode是在slaves文件中配置的。在hadoop1上执行:

sbin/hadoop-daemons.sh start datanode

命令输出:

 <span style="font-size:12px;">
[tom@hadoop2 ~yarn/hadoop-2.2.]$sbin/hadoop-daemons.sh start datanode
hadoop3: starting datanode, logging to /home/tom/yarn/hadoop-2.2./logs/hadoop-root-datanode-hadoop3.out
hadoop4: starting datanode, logging to /home/tom/yarn/hadoop-2.2./logs/hadoop-root-datanode-hadoop4.out
hadoop5: starting datanode, logging to /home/tom/yarn/hadoop-2.2./logs/hadoop-root-datanode-hadoop5.out
hadoop6: starting datanode, logging to /home/tom/yarn/hadoop-2.2./logs/hadoop-root-datanode-hadoop6.out
[tom@hadoop2 ~yarn/hadoop-2.2.]$</span>

【上述命令会在四个节点分别启动DataNode进程】

验证(以hadoop1为例):

 <span style="font-size:12px;">
[tom@hadoop2 ~yarn/hadoop-2.2.]$ jps
JournalNode
Jps
NameNode
QuorumPeerMain
[tom@hadoop2 ~yarn/hadoop-2.2.]$</span>

9、启动Yarn

在hadoop1上执行命令:sbin/start-yarn.sh

命令输出:

 [tom@hadoop1 ~yarn/hadoop-2.2.]$sbin/start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /home/tom/yarn/hadoop-2.2./logs/yarn-root-resourcemanager-hadoop1.out
Hadoop6: starting nodemanager, logging to /home/tom/yarn/hadoop-2.2./logs/yarn-root-nodemanager-hadoop6.out
hadoop5: starting nodemanager, logging to /home/tom/yarn/hadoop-2.2./logs/yarn-root-nodemanager-hadoop5.out
hadoop4: starting nodemanager, logging to /home/tom/yarn/hadoop-2.2./logs/yarn-root-nodemanager-hadoop4.out
hadoop3: starting nodemanager, logging to /home/tom/yarn/hadoop-2.2./logs/yarn-root-nodemanager-hadoop3.out
hadoop2: starting nodemanager, logging to /home/tom/yarn/hadoop-2.2./logs/yarn-root-nodemanager-hadoop2.out
hadoop1: starting nodemanager, logging to /home/tom/yarn/hadoop-2.2./logs/yarn-root-nodemanager-hadoop1.out
[tom@hadoop1 ~yarn/hadoop-2.2.]$ 验证: [tom@hadoop1 ~yarn/hadoop-2.2.]$jps
JournalNode
ResourceManager
NodeManager
NameNode
QuorumPeerMain
Jps
[tom@hadoop1 ~yarn/hadoop-2.2.]$

【产生java进程ResourceManager和NodeManager】

也可以通过浏览器访问hadoop1:8088/cluster

10、启动ZooKeeperFailoverCotroller

在hadoop1、hadoop2、hadoop3、hadoop4、hadoop5、hadoop6上分别执行命令: sbin/hadoop-daemon.sh start zkfc

命令输出(以hadoop1为例):

 [tom@hadoop1 ~yarn/hadoop-2.2.]$ sbin/hadoop-daemon.sh start zkfc
starting zkfc, logging to 、home/tom/yarn/hadoop-2.2./logs/hadoop-root-zkfc-hadoop101.out
[tom@hadoop1 ~yarn/hadoop-2.2.]$验证(以hadoop1为例): [tom@hadoop1 ~yarn/hadoop-2.2.]$ jps
DFSZKFailoverController
JournalNode
DataNode
NameNode
QuorumPeerMain
Jps
[tom@hadoop1 ~yarn/hadoop-2.2.]$

【产生java进程DFSZKFailoverController】

11、验证HA的故障自动转移是否好用

在执行完第10步的时候,在页面可以观察到两个NameNode的状态,hadoop1的状态是standby,hadoop2的状态是active。原先两个namenode都是standby的状态。

在hadoop1上我们执行:kill -9 23558

23558 NameNode

然后jps:nemenode进程不存在了

<span style="font-size:12px;">
[tom@hadoop1 ~yarn/hadoop-2.2.]$ jps
DFSZKFailoverController
JournalNode
DataNode
QuorumPeerMain
Jps </span>

然后刷新两个页面,可以看到,两台机器的状态置换了。原先的active变成standby,原先的standby变成active,这说明,HA故障自动转换是正常的,HDFS是高可用的。

等你顺利结束上面所有的步骤,都很顺利的话,说明,你集群搭建基本完成任务。说是基本,因为还有事情要做,就是,你要开始上传文件开始测试程序,看看hadoop是否应用正常。这就是接下来要做的事情了。

总结:

整个过程是,痛苦、无奈、纠结。伴随着N多夜晚。总结的过程就超过10个小时。还有很多问题都没有写完,后续会继续跟近,也欢迎与读者讨论交谈。

读者有益,写着有劳。关爱身边每一个人,热爱身体,珍惜生命,且行且珍惜。

引自:http://blog.csdn.net/yczws1/article/details/23594149

Hadoop2.2.0分布式安装配置详解[3/3]的更多相关文章

  1. Hadoop2.2.0分布式安装配置详解[2/3]

    前言 本文主要通过对hadoop2.2.0集群配置的过程加以梳理,所有的步骤都是通过自己实际测试.文档的结构也是根据自己的实际情况而定,同时也会加入自己在实际过程遇到的问题.搭建环境过程不重要,重要点 ...

  2. Hadoop2.2.0分布式安装配置详解[1/3]

    前言 在寒假前的一段时间,开始调研Hadoop2.2.0搭建过程,当时苦于没有机器,只是在3台笔记本上,简单跑通一些数据.一转眼一两个月过去了,有些东西对已经忘了.现在实验室申请下来了,分了10台机器 ...

  3. vs2017+opencv4.0.1安装配置详解(win10)

    一.说明 笔者之前已经安装过了vs2017,对应的opencv是3.4.0版本的.但现在想体验下opencv4的改变之处,所以下载了最新的opencv4.0.1. vs2017的安装请自行搜索安装,本 ...

  4. Eclipse IDE for C/C++ Developers安装配置详解

    Eclipse IDE for C/C++ Developers安装配置详解(转) 转自:http://hi.baidu.com/ltb6w/item/986532efd712460f570f1ddc ...

  5. Cloudera CDH 、Impala本地通过Parcel安装配置详解及什么是Parcel

    本文引用自:Cloudera CDH .Impala本地通过Parcel安装配置详解及什么是Parcelhttp://www.aboutyun.com/forum.php?mod=viewthread ...

  6. lvs keepalived 安装配置详解【转】

    lvs keepalived 安装配置详解 张映 发表于 2012-06-20 分类目录: 服务器相关 前段时间看了一篇文章,lvs做负载均衡根F5差不多,说实话不怎么相信,因为F5没玩过,也无法比较 ...

  7. ubuntu14.04 server ftp 服务安装配置详解

    ubuntu14.04 server ftp 服务安装配置详解 cheungmine 2016-01-27 http://wiki.ubuntu.com.cn/Vsftpd 0 安装好vsftpd服务 ...

  8. JDK10安装配置详解

    JDK10安装配置详解 1. 下载jdk10 1.1 官网下载jdk7的软件包:        地址:http://www.oracle.com/technetwork/java/javase/dow ...

  9. redis cluster 集群 安装 配置 详解

    redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...

随机推荐

  1. GItlab作CI/CD时,想快点,有啥招?

    如果希望.m2文件有存缓,或是不要每次从dockerhub上找镜像(有的是本地镜像,远程没有的) 那么,gitlab-runner的config.toml初步优化文件如下: concurrent = ...

  2. Python 动态生成多个变量

    引用自:https://blog.csdn.net/u013061183/article/details/78015673 用Python循环创建多个变量, 如创建 a1=   .a2=   .a3= ...

  3. Django ORM OneToOneField

    一对一关系 一对一关系与多对一关系非常相似.如果你在模型中定义一个OneToOneField,该模型的实例将可以通过该模型的一个简单属性访问关联的模型. class Person(models.Mod ...

  4. L3-016 二叉搜索树的结构 (30 分) 二叉树

    二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值:它的左.右子树也分别 ...

  5. HDU1285 确定名次 拓扑排序

    Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...

  6. 洛谷 P2440 木材加工【基础二分】

    题目链接:https://www.luogu.org/problemnew/show/P2440 题目描述 木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有 剩余),需要得 ...

  7. django-访问控制

    django自带的用户认证系统提供了访问控制的的功能.   1.只允许登录的用户登录   django的用户可分为两类,一是可认证的用户,也就是在django.contrib.auth.models. ...

  8. SQLserver 字符串转换日期,日期转换成为字符串

    sqlserver 日期与字符串之间的转换   该文章摘自:http://www.cnblogs.com/windphoenix/archive/2013/04/26/3044784.html 字符转 ...

  9. for循环的灵活性

      for循环把初始化.测试和更新组合在一起,其基本形式如下所示: for(初始化:测试条件:更新表达式) { //循环体 }   关键字for后面的圆括号中3个表达式,分别用两个分号隔开:   第一 ...

  10. 用一颗学美术的心来理解PID调节

    用一颗学美术的心来理解PID调节 泡利 3 个月前 相信大家小时候都画过美术作品吧?(什么?你还是宝宝?)没关系,不管你是文科.理科.工科.艺术还是家里蹲的,这篇文章对你来说一定会简单到爆炸的. 这种 ...