在hadoop集群中对ZooKeeper和Hbase的安装与配置
前置需要安装配置好hadoop
hadoop的安装与配置传送门
zookeeper的定义与作用
.zk的作用
分布协调服务,解决分布式服务在工作时产生的问题
1)竞态条件 //多个主机同时对一个文件进行操作,俗称抢资源
2)死锁: //多个主机互相等待对方完成
3)不一致性: //资源文件丢失或者主机宕机
hadoop的namenode的高可用,也就是在多namenode 情况下,对namenode 管理节点的active以及standby,具体是:
在zk启动的情况下再启动hadoop
的hdfs
文件系统时,zk会根据自身的领袖推选机制,建立一个active
的namenode
,此时该namenode
节点的active存放在ActiveStandbyElectorLock
结点(zk的结点存储位置),它是临时结点,也就是负责存储active
状态下的节点地址.而zk中的另一个节点ActiveBreadCrumb
是永久结点,它存储的active
的节点信息,当zk会话关闭或者中断时,再次启动,通过领袖推选机制获取的active
节点首先会与永久节点储存的信息做比较,如果此时的推选出来的active
与永久结点上的信息一样,则不做任何操作,如果信息不一样,zk会首先将之前永久结点上存储的namenode
的状态改为standby
,然后再去修改新的active
的节点信息,以完成正确分配active
节点,避免脑裂(brain-split
),即两个active节点状态的问题
Hbase的定义与作用
HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。
hbase是列式的分布式数据库
hbase依赖zookeeper
1、 保存Hmaster的地址和backup-master地址
hmaster:
a) 管理HregionServer
b) 做增删改查表的节点
c) 管理HregionServer中的表分配
2、 保存表-ROOT-的地址
hbase默认的根表,检索表。
3、 HRegionServer列表
表的增删改查数据。
和hdfs交互,存取数据
Hbase 和zookeeper的安装与配置
zookeeper 的安装与配置
1,选用版本zookeeper-3.4.6.tar.gz
,可自行百度下载
2,解压到opt目录下并改名(三个机器都需要安装)
[root@hadoop122 software]# tar -zxf zookeeper-3.4.6.tar.gz -C /opt
[root@hadoop122 opt]# mv zookeeper-3.4.6 zookpr
3,在主机下配置conf文件
修改zoo.cfg文件
把原来文件夹中的zoo_sample.cfg改名为zoo.cfg
[root@hadoop102 opt]# cd zookpr/conf/
[root@hadoop102 conf]# mv zoo_sample.cfg zoo.cfg
[root@hadoop102 conf]# vi zoo.cfg
修改里面的内容,修改的地方已备注
# The number of milliseconds of each tick
tickTime=2000
maxClientCnxns=0 //添加一行
# The number of ticks that the initial
# synchronization phase can take
initLimit=50 //改成50
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/hadoop/zookprdata //设置一个地址存放data文件
# the port at which the clients will connect
clientPort=2181
server.1=hadoop121:2888:3888
server.2=hadoop122:2888:3888
server.3=hadoop123:2888:3888 //添加这三行,地址是集群的主机名
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
把配置好的zoo.cfg文件复制给另外两台集群机器
scp zoo.cfg root@192.168.211.122:/opt/zookpr/conf/zoo.cfg
两个都复制过去之后记得要把之前的sample.cfg删除
4,新建目录,这个目录就是刚配置cfg文件中自己定的目录
mkdir /opt/hadoop/zookprdata
echo "1" > /opt/hadoop/zookprdata/myid
其他机器上也进行同样的操作,但把echo “1” 改成2和3
5,启动zookeeper(每台机器都需要启动)
cd /opt/oracle/zookeeper
./bin/zkServer.sh start
tail zookeeper.out
如果出现启动错误的问题,可以查看日志,看看是哪里出了问题,
6,关闭
./bin/zkServer.sh stop
Hbase的安装与配置
1,解压安装文件
选用hbase-1.2.0-cdh5.14.2.tar.gz文件,可以去百度下载
[root@hadoop102 opt]# tar -zxf hbase-1.2.0-cdh5.14.2.tar.gz
[root@hadoop102 opt]# mv hbase-1.2.0-cdh5.14.2 hbase
2,配置hbase-site.xml
文件
在configuration中插入以下内容
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop121:9000/hbase</value> //这里添自己的主机名
<description>The directory shared by region servers.</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master.port</name>
<value>60000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop003,hadoop004,hadoop005</value> //运行zookpr的机器,至少三台
</property>
<property>
<name>hbase.regionserver.handler.count</name>
<value>300</value>
</property>
<property>
<name>hbase.hstore.blockingStoreFiles</name>
<value>70</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>60000</value>
</property>
<property>
<name>hbase.regionserver.restart.on.zk.expire</name>
<value>true</value>
<description>
Zookeeper session expired will force regionserver exit.
Enable this will make the regionserver restart.
</description>
</property>
<property>
<name>hbase.replication</name>
<value>false</value>
</property>
<property>
<name>hfile.block.cache.size</name>
<value>0.4</value>
</property>
<property>
<name>hbase.regionserver.global.memstore.upperLimit</name>
<value>0.35</value>
</property>
<property>
<name>hbase.hregion.memstore.block.multiplier</name>
<value>8</value>
</property>
<property>
<name>hbase.server.thread.wakefrequency</name>
<value>100</value>
</property>
<property>
<name>hbase.master.distributed.log.splitting</name>
<value>false</value>
</property>
<property>
<name>hbase.regionserver.hlog.splitlog.writer.threads</name>
<value>3</value>
</property>
<property>
<name>hbase.hstore.blockingStoreFiles</name>
<value>20</value>
</property>
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
</property>
<property>
<name>hbase.hregion.memstore.mslab.enabled</name>
<value>true</value>
</property>
3,配置hbase.env.sh
文件
在最后添加以下内容
export JAVA_HOME=/opt/jdk8 //java的路径
export HBASE_OPTS="-Xmx4g -Xms4g -Xmn128m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:$HBASE_HOME/logs/gc-$(hostname)-hbase.log"
export HBASE_MANAGES_ZK=false
export HBASE_CLASSPATH=/opt/hadoop/etc/hadoop //hadoop的配置的路径
env文件配置以后复制到其他两台机器上
4,配置log4j.properties
文件
修改以下内容
第18行 hbase.root.logger=WARN,console
第94行 log4j.logger.org.apache.hadoop.hbase=WARN
5,配置regionservers
文件
在里面加入集群机器
6,启动
要先启动hadoop
三个机器的zookeeper也要启动
主机上启动hbase
[oracle@hadoop003 ~]$ cd /opt/hbase
[oracle@hadoop003 hbase]$ ./bin/start-hbase.sh
7,测试
输入./bin/hbase shell
进入shell
输入list,能返回结果,就是配置成功了,
如果失败,看失败的情况,如果是zookeeper连接不上,或者端口被占,返回检查一下自己的配置,或者虚拟机的时间和本机时间不同步,可以通过以下方法同步时间,需要下载一下虚拟机上的tools工具包
8,关闭
[oracle@hadoop003 hbase]$ ./bin/stop-hbase.sh