本人在工作过程中需要,基于hadoop的爬虫,准备用Hbase存储爬取的数据,于是研究并记录了++环境搭建,花费了很多加班时间啊,废话不多说,直接上实战干货。记录在云笔记中,可能有点乱,大家担待下,最好用电脑看啊。
先给个目录截图(参考)
参考之前我的hadoop集群搭建系列文章:
分布式集群搭建(一)基本环境搭建(虚拟机)
分布式集群搭建(二)Hadoop部署配置
3.1配置
3.1.1首先编辑配置文件
/zoo_//usr/local@Hslave2:/usr/local
3.1.3设置好每天机器的myid(这是身份唯一标识)
首先创建各自的目录
在Hmaster,Hslave1,Hslave2上创建dataDir中配置的目录/usr/local//data。
3.1.4一些配置参数英语名词的解释
tickTime:心跳时间,单位毫秒。同时tickTime又是zookeeper中的基本单位,比如后面的initLimit=5就是指5个tickTime时间,在这里是10秒。
dataDir:存储数据信息的本地目录。
3.2启动/关闭服务命令
{ZOOKEEPER_HOME}/bin/
启动和关闭命令必须到zookeeper集群的每个机器上,没有像那样的命令可以一下子把整个集群启动。
3.3然后启动日志的分析
你可能会可能出现如下情况
由于ZooKeeper集群启动的时候,每个结点都试图去连接集群中的其它结点,先启动的肯定连不上后面还没启动的,所以上面日志前面部分的异常是可以忽略的。通过最后面部分可以看到,集群选出了一个最终Leader后,运行稳定。如果其他结点可能也出现类似问题,这都属于正常情况。
3.4命令测试验证
{ZOOKEEPER_HOME}/bin/
以下是结果示例,你们可以看到各机器的角色是follower还是leader。
3.5过程中一些注意事项
对于一个包含3台server的Zookeeper集群,最多容许关闭一台(如果被关闭的是leader,则会重新选举出一个)。如果关闭两台,则剩下那台虽然进程QuorumPeerMain还在,但查看状态则显示。
对于一个包含5台server的Zookeeper集群,最多容许关闭两台。关闭三台,则剩下两台虽然进程QuorumPeerMain还在,但也显示同样的错误。
(如果这个时候用Java程序去连接Hbase,则会提示::Can'tconnecttoZooKeeper)
通常情况这里会出现有两个常见的疑问:
1)当3台server关闭一台时,只剩下两台时,无法形成majority,那么它是如何选举出leader的?
2)当5台server关闭三台时,剩下两台,为什么不能像第一种情况中一样正常工作?
这两个问题的答案是同一个,Zookeeper中的所谓majorityvoting机制,其majority是针对原始的server数量,不是指变化后的数量,这个原始的数量即你配置在中的server个数。
还有一个常见的问题是为什么推荐使用奇数个Zookeeperserver,那是因为3个server与4个server能够提供的可靠性是一样的,3台server的集群允许其中一台server宕机,而4台server的集群也只能容许其中一台server宕机,因为如果两台server宕机,那么剩下两台,对比于原来的4台,2/4不够成大多数。
4.Hbase集群4.1配置
4.1.1配置
配置JAVA_HOME和pids目录,exportHBASE_MANAGES_ZK=false,这表示不使用hbase自带的zookeeper,而使用外部的zookeeper(这里指我们在上面建的zookeeper)
4.2启动/关闭
bin/
bin/
4.3测试的方法
在Hmaster上执行
{HBASE_HOME}/bin/hbaseshell
进入shell命令行,通过创建表等操作来检查不是不工作正常。
或者通过一个简单的Java程序来测试:
注意,java测试程序所在机器的hosts文件,注意必须有全FDQN(fullyqualifieddomainname,参见上面linux中的hosts文件),否则有java访问时会提示找不到
4.4注意事项
HBase集群需要依赖于一个Zookeeperensemble。HBase集群中的所有节点以及要访问HBase的客户端都需要能够访问到该Zookeeperensemble。HBase自带了Zookeeper,但为了方便其他应用程序使用Zookeeper,最好使用单独安装的Zookeeperensemble。
此外,Zookeeperensemble一般配置为奇数个节点,并且Hadoop集群、Zookeeperensemble、HBase集群是三个互相独立的集群,并不需要部署在相同的物理节点上,他们之间是通过网络通信的。
需要注意的是,如果要禁止启动hbase自带的zookeeper,那么,不仅仅需要刚才的exportHBASE_MANAGES_ZK=false配置,还需要中的为true,否则你在启动时会遇到CouldnotstartZKatrequestedportof2181错误,这是因为hbase尝试启动自带的zookeeper,而我们已经启动了自己安装的那个zookeeper,默认都使用2181端口,所以出错。
还有,有时候会遇到执行很长时间未结束,很可能的原因是你之前把zookeeper关闭了.
最后,Hbase不需要mapreduce,所以只要启动hdfs,然后到zookeeper各节点上启动zookeeper,最后再启动hbase即可.
4.5遇到的问题
启动后,zookeeper集群独立,没有被Hbase管控,
1.启动时查看主控节点的日志,其中的报错如下,
NotServingRegionException:Regionhbase:meta,,1isnotonlineHslave2
或者
2.启动hbase时,hmaster启动后又消失了,且hin/baseshell后,list执行报错"ERROR:can'tgetmasteraddressfromZooKeeper;znodedata==null"
一般认为是,停止Hbase服务时导致zookeeper的meta数据丢失或损毁所致,解决办法为,先停止HBase服务,再停止ZooKeeper服务,然后把zookeeper的每个节点的配置文件指定的dataDir=/hadoop/zookeeper-data目录的文件rm清除掉,然后重启zookeeper,再重启hbase,接着去观察hbase主节点日志日志文件,发现一切正常时问题已经得到了解决。




