Fork me on GitHub
集群环境

集群环境

公司给分配了3台新的虚拟机,打算从头配置一下zookeeper,kafka,storm,hadoop,hbase的环境。

(以后配置mongodb,spark的时候,在陆续更新,目前(2016/4/21)只接触这么多)

配置的过程中发生了一些问题。这里共享一下笔记。当然,我做配置的时候的原则是:

只配置知道的,不知道的就不去配置。虽然会发生问题,但是在解决问题的过程中,能达到学习的目的。

所以,我在配置的过程中,才发生了下面这么多的弱智的问题。略有愧疚。所以,往往前期要比别人花上更多的时间和精力。

 

-----------------------

软件版本:(不同版本的问题有可能不一样,这里的解决方法仅供参考,出现问题概不负责)

【zookeeper】:zookeeper-3.4.6.tar.gz

【kafka】:kafka_2.9.2-0.8.1.1.tgz

【storm】:apache-storm-0.9.5.tar.gz

【hadoop】:hadoop-2.7.1.tar.gz

【hbase】:hbase-1.2.1-bin.tar.gz

-----------------------

 

(1)查看zookeeper.out的日志发现了如下错误。

后来发现是我的配置文件中,将dataDir的路径写错了,修改之后就不再出现这个错误。

这里其实只是我的一个最单纯的错误,留下这个错误的目的是:养成查看日志的习惯。大多数问题通过查看日志是可以找到原因的。

 

(2)查看zookeeper.out的日志发现了如下错误。

日志中提示是端口发生了冲突,尝试更换了一下端口。问题解决。

大多数情况下,我们都会使用zookeeper自带的端口号,当集群中启动的服务很多的时候,是会发生端口号冲突的。

 

(3)hadoop的配置文件不知道该如何配置。(无图)

hadoop的集群构建的时候,基本上都需要配置下面几个文件:

hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml

但是,根据Hadoop的版本不同,有可能配置的内容会有些许区别,网上的配置方法也众说纷纭。

当然,还是要感谢网上的人能将配置项加上中文翻译的。

 

我最初配置的时候,是打算参考正确答案(官网),结果官网上罗列了很多的配置项,

后来咨询了一些大牛得到如下结论:(当然,这个结论还是需要验证的)

①、官网上的配置项是一个“合集”,每一项都介绍的很详细。但是,其实大部分都用不上,最低配其实大部分指定点路径就行了。

②、除开JAVA_HOME等必须配置的项目之外,即使什么都不配,按理说也可以启动起来。

总结来说:配置文件需要按需配置

 

(4)停止hadoop的时候出现"“no datanode to stop"的错误

网上大概有三个方法来解决这个问题,我这里偷懒罗列一下。我这次是用第③种方法解决的。

 

【第一种解决方法】

①、删除“/usr/hadoop/tmp”里面的内容:rm -rf /usr/hadoop/tmp

②、重新创建“/usr/hadoop/tmp”文件夹。

③、删除“/tmp”下以“hadoop”开头文件。

④、重新格式化hadoop:hadoop namenode -format

⑤、重新启动hadoop

 

【第二种解决方法】

修改每个Slave的namespaceID,使其与Master的namespaceID一致。

或者

修改Master的namespaceID使其与Slave的namespaceID一致。

Master的“namespaceID”位于“/usr/hadoop/tmp/dfs/name/current/VERSION”文件里面,

Slave的“namespaceID”位于“/usr/hadoop/tmp/dfs/data/current/VERSION”文件里面。

 

【第三种解决方法】

在重新格式化分布式目录及对应文件时,需要将NameNode及DataNode上所配置的dfs.name.dir对应的路径删掉或移除,否则hadoop无法正常工作。

根据某资料所说的,这是为了避免由于格式化而删掉已有且有用的的hdfs数据,所以格式化前dfs.name.dir对应的路径应当是不存在的。

 

(5)停止hadoop的时候出现"no nodemanager to stop"的错误

网上找到了一篇很牛的博客(不知道是不是原创)

http://www.codeweblog.com/%E8%A7%A3%E5%86%B3%E5%85%B3%E9%97%ADhadoop%E6%97%B6no-namenode-to-stop%E5%BC%82%E5%B8%B8/

看了这篇博客之后,总算知道了PID的意义和配置的必要性。配置一下之后,果真解决了。

我修改了两个文件的PID的保存位置:

①、hadoop-env.sh

②、yarn-env.sh

需要注意以下两点:

1、hadoop-env.sh中已经邮PID_DIR的属性了,修改它的值就可以,yarn-env.sh需要自己追加属性

2、记住要先关闭Hadoop再修改,不然你修改完又无法关闭了。

 

(6)nodemanager启动后一段时间自动关闭

略有感慨,总是有大牛能够写出非常透彻的分析。这次也找到了一篇很好的博客:

http://my.oschina.net/u/1451042/blog/223235

按照博客上的说法,如果不在yarn-site.xml中追加yarn.resourcemanager.hostname,

nodemanager启动后要通过心跳机制定期与RM通信,否则RM会认为NM死掉,会停止NM的服务。

如下如所示,修改yarn-site.xml后,问题解决。

 

(7)HBase的regionServer无法通过Master节点启动

现象如下图所示,Master节点到时可以启动了,Slave节点未能与Master一同启动。

下图中左面是Master节点的进行状态,右面是Slave节点的进程状态。

 

原因是hbase-site.xml中【hbase.cluster.distributed】属性没有配置。

如果不设置这个属性,就不能构成完全集群模式。像下图所示追加属性之后,ReginServer正常启动。

 

(8)HBase的RegionServer过会就自动关闭

按照上述问题6中配置完成之后,过了一会我又去看了一下进程状态,发现Slave节点的RegionServer进行突然消失了。

(通过问题1养成了查看Log的好习惯)将原来的Log日志全部删除掉,重新启动Hbase,尝试实时监控Slave端的Log日志,

发现Log中出现大量的下面的日志:

 

从Log中能看出来,貌似一直在尝试与ZK集群建建立连接,可是连接不上。于是乎,想到了配置文件中的需要追加zookeeper的配置。

向下面这样修改之后,再次监控上面的Log,发现不在出现这个问题了。

注意:在配置zookeeper的地址的时候,如果不写明后面的端口号,默认为2181,由于我修改过默认端口号,所以必须写明。

如果没有修改过端口号,value中写[master,slave1,slave2]或者[192.168.1.179,192.168.1.180,192.168.1.181]都可以。

 

另外有一点也需要注意,如果需要zookeeper和hbase分别单独启动,不需要Hbase启动的时候自动去启动zookeeper时,

需要在hbase-env.sh的属性【HBASE_MANAGES_ZK】设置为false。默认是true的。修改后如下:

 

(9)启动hadoop的时候,总是提示下面的警告

在公司的时候,使用的版本是2.7.1没有出现这个问题,周末在家搞的时候,使用的是自己机器上的虚拟机,

hadoop的版本为2.5.1,就会出现这个问题。

在网上查看了一下相关信息,说是由于本地库没有加载成功的原因,使用hadoop checknative查看了一下,确实是有问题。

比较蛋疼的是,在网上找到的文章中,都是说在hadoop-env.sh中加入以下下面配置就可以解决。

export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/"

结果尝试了几次之后没有效果。开启hadoop的debug模式之后,检测了一下启动Log。有如下提示:

说明系统中的glibc的版本和libhadoop.so需要的版本不一致导致。查看一下系统的libc版本。显示版本为2.12

*后来在网上找到一个与我一样的问题的博客:http://blog.sina.com.cn/s/blog_4eca88390102vn86.html

到网站【http://ftp.gnu.org/gnu/glibc/】上下载【glibc-2.14.tar.bz2】和【glibc-linuxthreads-2.5.tar.bz2】上传到Linux上。

(待更新)

posted on 2016-04-27 09:25  HackerVirus  阅读(919)  评论(0编辑  收藏  举报