公司给分配了3台新的虚拟机,打算从头配置一下zookeeper,kafka,storm,hadoop,hbase的环境。html
(之后配置mongodb,spark的时候,在陆续更新,目前(2016/4/21)只接触这么多)java
配置的过程当中发生了一些问题。这里共享一下笔记。固然,我作配置的时候的原则是:node
只配置知道的,不知道的就不去配置。虽然会发生问题,可是在解决问题的过程当中,能达到学习的目的。linux
因此,我在配置的过程当中,才发生了下面这么多的弱智的问题。略有愧疚。因此,每每前期要比别人花上更多的时间和精力。web
-----------------------mongodb
软件版本:(不一样版本的问题有可能不同,这里的解决方法仅供参考,出现问题概不负责)apache
【zookeeper】:zookeeper-3.4.6.tar.gz分布式
【kafka】:kafka_2.9.2-0.8.1.1.tgzoop
【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"的错误
网上找到了一篇很牛的博客(不知道是否是原创)
看了这篇博客以后,总算知道了PID的意义和配置的必要性。配置一下以后,果然解决了。
我修改了两个文件的PID的保存位置:
①、hadoop-env.sh
②、yarn-env.sh
须要注意如下两点:
一、hadoop-env.sh中已经邮PID_DIR的属性了,修改它的值就能够,yarn-env.sh须要本身追加属性
二、记住要先关闭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上。
(待更新)
--END--