一、Zookeeper和Hbase的介绍(包括Hbase的特点)
介绍
Zookeeper
ZooKeeper 是一个开源的分布式协调服务,ZooKeeper 框架最初是在“Yahoo!"上构建的,用于以简单而稳健的方式访问他们的应用程序。
ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。
ZooKeeper 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
服务生产者将自己提供的服务注册到 ZooKeeper 中心,服务的消费者在进行服务调用的时候先到 ZooKeeper 中查找服务,获取到服务生产者的详细信息之后,再去调用服务生产者的内容与数据。
Hbase
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBase的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。
HBase特点
1)海量存储
Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正式因为Hbase良好的扩展性,才为海量数据的存储提供了便利。
2)列式存储
这里的列式存储其实说的是列族存储,Hbase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。
3)极易扩展
Hbase的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)。
通过横向添加RegionSever的机器,进行水平扩展,提升Hbase上层的处理能力,提升Hbsae服务更多Region的能力。
备注:RegionServer的作用是管理region、承接业务的访问,这个后面会详细的介绍通过横向添加Datanode的机器,进行存储层扩容,提升Hbase的数据存储能力和提升后端存储的读写能力。
4)高并发
由于目前大部分使用Hbase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在并发的情况下,Hbase的单个IO延迟下降并不多。能获得高并发、低延迟的服务。
5)稀疏
稀疏主要是针对Hbase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。
二、Zookeeper的安装和使用
(1)解压
ZooKeeper 最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,安 装 ZooKeeper 组件需要与 Hadoop 环境适配。
(注意,各节点的防火墙需要关闭,否则会出现连接问题。)
(1)ZooKeeper 的安装包 zookeeper-3.4.8.tar.gz 已放置在 Linux 系统 /opt/software目录下。
.(2)解压安装包到指定目标,在 Master 节点执行如下命令。、
[root@master ~]# tar -zxvf /opt/software/zookeeper3.4.8.tar.gz -C /usr/local/src
[root@master ~]# mv /usr/local/src/zookeeper-3.4.8 /usr/local/src/zookeeper
(2)Zookeeper的配置
Master节点配置
(1)在 ZooKeeper 的安装目录下创建 data 和 logs 文件夹
[root@master ~]# cd /usr/local/src/zookeeper
[root@master zookeeper]# mkdir data && mkdir logs
(2)在每个节点写入该节点的标识编号,每个节点编号不同。
[root@master zookeeper]# echo 1 > /usr/local/src/zookeeper/data/myid
(3)修改配置文件 zoo.cfg
[root@master zookeeper]# cp /usr/local/src/zookeeper/conf/zoo_sample.cfg
/usr/local/src/zookeeper/conf/zoo.cfg
[root@master zookeeper]# vi /usr/local/src/zookeeper/conf/zoo.cfg
修改 dataDir 参数内容如下:
dataDir=/usr/local/src/zookeeper/data
(4)在 zoo.cfg 文件末尾追加以下参数配置,表示三个 ZooKeeper 节点的访问端口号。
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
(5)修改 ZooKeeper 安装目录的归属用户为 hadoop 用户。
[root@master zookeeper]# chown -R hadoop:hadoop /usr/local/src/zookeeper
Slave 节点配置
(1)从 Master 节点复制 ZooKeeper 安装目录到两个 Slave 节点。
[root@master ~] # cd ~
[root@master ~] # scp -r /usr/local/src/zookeeper slave1:/usr/local/src/
[root@master ~] # scp -r /usr/local/src/zookeeper slave2:/usr/local/src/
(2)在 slave1 节点上修改 zookeeper 目录的归属用户为 hadoop 用户。
[root@slave1 ~] # chown -R hadoop:hadoop /usr/local/src/zookeeper
(3)在 slave1 节点上配置该节点的 myid 为 2。
[root@slave1 ~] # echo 2 > /usr/local/src/zookeeper/data/myid
(4)在 slave2 节点上修改 zookeeper 目录的归属用户为 hadoop 用户。
[root@slave2 ~] # chown -R hadoop:hadoop /usr/local/src/zookeeper
(5)在 slave2 节点上配置该节点的 myid 为 3。
[root@slave2 ~] # echo 3 > /usr/local/src/zookeeper/data/myid
环境变量
在 master、slave1、slave2 三个节点增加环境变量配置。
vi /etc/profile
在文件末尾追加
set zookeeper environment
ZooKeeper 安装目录
export ZOOKEEPER_HOME=/usr/local/src/zookeeper
ZooKeeper 可执行程序目录
export PATH=$PATH:$ZOOKEEPER_HOME/bin
启动 ZooKeeper
启动 ZooKeeper 需要使用 Hadoop 用户进行操作。
(1)分别在 master、slave1、slave2 三个节点使用 zkServer.sh start 命令启 动ZooKeeper。
[hadoop@master ~]su – hadoop
[hadoop@master ~]source /etc/profile
ZooKeeper 启动
[hadoop@master ~] zkServer.sh start
[hadoop@slave1 ~] su – hadoop
[hadoop@slave1 ~] source /etc/profile
[hadoop@slave1 ~] zkServer.sh start
[hadoop@slave2 ~] su – hadoop
[hadoop@slave2 ~] source /etc/profile
ZooKeeper 启动
[hadoop@slave2 ~] zkServer.sh start
三个节点都启动完成后,再统一查看 ZooKeeper 运行状态。 分别在 master、slave1、slave2 三个节点使用 zkServer.sh status 命令查看 ZooKeeper 状态。可以看到三个节点的状态分别为 follower、leader、 follower。三个节点会包括一个 leader 和两个 follower,每个节点地位均等, leader 是根据 ZooKeeper 内部算法进行选举,每个节点的具体状态不固定。
#master 节点状态
[hadoop@master ~]$ zkServer.sh status
[hadoop@s1ave1 ~]$ zkServer.sh status
[hadoop@s1ave2 ~]$ zkServer.sh status
三、Hbase的安装和使用
解压缩 HBase 安装包
[root@master ~]# tar zxf tools/hbase-1.2.1-bin.tar.gz -C /usr/local/src/
重命名 HBase 安装文件夹
[root@master ~]# cd /usr/local/src/
[root@master src]# mv hbase-1.2.1/ hbase
在所有节点添加环境变量
[root@master src]# vim /etc/profile
[root@master src]# tail -n 2 /etc/profile
export HBASE_HOME=/usr/local/src/hbase
export PATH=$HBASE_HOME/bin:$PATH
[root@slave1 ~]# vim /etc/profile
[root@slave1 ~]# tail -n 2 /etc/profile
export HBASE_HOME=/usr/local/src/hbase 62
export PATH=$HBASE_HOME/bin:$PATH
[root@slave2 ~]# vim /etc/profile
[root@slave2 ~]# tail -n 2 /etc/profile
export HBASE_HOME=/usr/local/src/hbase
export PATH=$HBASE_HOME/bin:$PATH
**在所有节点使环境变量生效 **
[root@master ~]# source /etc/profile
[root@slave1 ~]# source /etc/profile
[root@slave2 ~]# source /etc/profile
**在 master 节点进入配置文件目录 **
[root@master ~]# cd /usr/local/src/hbase/conf/
**在 master 节点配置 hbase-env.sh 文件 **
[root@master conf]# vim hbase-env.sh
export JAVA_HOME=/usr/local/src/jdk1.8.0_152
export HBASE_MANAGES_ZK=false
export HBASE_CLASSPATH=/usr/local/src/hadoop/etc/hadoop/
在 master 节点配置 hbase-site.xml 如下
[root@master conf]# vi hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value> # 使用 9000 端口
<description>The directory shared by region servers.</description>
</property>
<property>
<name>hbase.master.info.port</name>
<value>60010</value> # 使用 master 节点 60010 端口
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value> # 使用 master 节点 2181 端口
<description>Property from ZooKeeper's config zoo.cfg. The port at
which the clients will connect.
</description>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value> # ZooKeeper 超时时间
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value> # ZooKeeper 管理节点
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/usr/local/src/hbase/tmp</value> # HBase 临时文件路径
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value> # 使用分布式 HBase
</property>
</configuration>
在 master 节点修改 regionservers 文件
[root@master conf]# vim regionservers
[root@master conf]# cat regionservers
slave1
slave2
**在 master 节点创建 hbase.tmp.dir 目录 **
[root@master conf]# mkdir /usr/local/src/hbase/tmp
将 master 上的 hbase 安装文件同步到 slave1 slave2
[root@master conf]# scp -r /usr/local/src/hbase/ root@slave1:/usr/local/src/
[root@master conf]# scp -r /usr/local/src/hbase/ root@slave2:/usr/local/src/
在所有节点修改 hbase 目录权限
[root@master conf]# chown -R hadoop:hadoop /usr/local/src/hbase/
[root@slave1 ~]# chown -R hadoop:hadoop /usr/local/src/hbase/
[root@slave2 ~]# chown -R hadoop:hadoop /usr/local/src/hbase/
在所有节点切换到 hadoop 用户
[root@master conf]# su - hadoop
[hadoop@master ~]$ source /etc/profile
[root@slave1 ~]# su - hadoop
[hadoop@slave1 ~]$ source /etc/profile
[root@slave2 ~]# su - hadoop
[hadoop@slave2 ~]$ source /etc/profile
启动 HBase
[hadoop@master ~]$ start-all.sh
(用jps查看所有组件运行情况)
版权归原作者 袜子超强o.0 所有, 如有侵权,请联系我们删除。