Hbase集群部署

HBASE介绍


– HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、 实时读写的分布式数据库
– 利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理 HBase中的海量数据,利用Zookeeper作为其分布式协同服务
– 主要用来存储非结构化和半结构化的松散数据(列存NoSQL数据库)

Hbase的架构图如下所示

在这里插入图片描述

 

1、Client
包含访问HBase的接口并维护cache来加快对HBase的访问

2、ZooKeeper
2.1、ZooKeeper 为 HBase 提供 Failover 机制,选举 Master,避免单点 Master 单点故障问题
2.2、存储所有 Region 的寻址入口:-ROOT-表在哪台服务器上。-ROOT-这张表的位置信息
2.3、实时监控 RegionServer 的状态,将 RegionServer 的上线和下线信息实时通知给 Master
2.4、存储 HBase 的 Schema,包括有哪些 Table,每个 Table 有哪些 Column Family

3、Master
3.1、为 RegionServer 分配 Region
3.2、负责 RegionServer 的负载均衡
3.3、发现失效的 RegionServer 并重新分配其上的 Region
3.4、HDFS 上的垃圾文件(HBase)回收
3.5、处理 Schema 更新请求(表的创建,删除,修改,列簇的增加等等)

4、RegionServer
4.1、RegionServer 维护 Master 分配给它的 Region,处理对这些 Region 的 IO 请求
4.2、RegionServer 负责 Split 在运行过程中变得过大的 Region,负责 Compact 操作

5、HRegion
table在行的方向上分隔为多个Region。Region是HBase中分布式存储和负载均衡的最小单元,即不同的region可以分别在不同的Region Server上,但同一个Region是不会拆分到多个server上。
Region按大小分隔,每个表一般是只有一个region。随着数据不断插入表,region不断增大,当region的某个列族达到一个阈值时就会分成两个新的region。
每个region由以下信息标识:< 表名,startRowkey,创建时间>
由目录表(-ROOT-和.META.)记录该region的endRowkey

6、Store
每一个region由一个或多个store组成,至少是一个store,hbase会把一起访问的数据放在一个store里面,即为每个 ColumnFamily建一个store,如果有几个ColumnFamily,也就有几个Store。一个Store由一个memStore和0或者 多个StoreFile组成。 HBase以store的大小来判断是否需要切分region

7、MemStore
memStore 是放在内存里的。保存修改的数据即keyValues。当memStore的大小达到一个阀值(默认128MB)时,memStore会被flush到文 件,即生成一个快照。目前hbase 会有一个线程来负责memStore的flush操作。

8、StoreFile
memStore内存中的数据写到文件后就是StoreFile,StoreFile底层是以HFile的格式保存。当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile。

9、HFile
HBase中KeyValue数据的存储格式,HFile是Hadoop的 二进制格式文件,实际上StoreFile就是对Hfile做了轻量级包装,即StoreFile底层就是HFile。

10、HLog
HLog(WAL log):WAL意为write ahead log,用来做灾难恢复使用,HLog记录数据的所有变更,一旦region server 宕机,就可以从log中进行恢复。
HLog文件就是一个普通的Hadoop Sequence File, Sequence File的value是key时HLogKey对象,其中记录了写入数据的归属信息,除了table和region名字外,还同时包括sequence number和timestamp,timestamp是写入时间,sequence number的起始值为0,或者是最近一次存入文件系统中的sequence number。 Sequence File的value是HBase的KeyValue对象,即对应HFile中的KeyValue。
 

安装hbase集群需要安装zookeeper集群

部署zookeeper集群

安装部署zookeeper:

	去zookeeper官网下载安装包,这里下载版本为3.8.1,注意一定要下载*-bin的安装包
apache-zookeeper-3.8.1-bin
	tar -xvf apache-zookeeper-3.8.1-bin.tar.gz
	cd apache-zookeeper-3.8.1-bin
	cp conf/zoo_sample.cfg conf/zoo.cfg

环境变量/etc/profile(追加)

export ZOOKEEPER_HOME=/home/zookeeper/apache-zookeeper-3.8.1-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin

更新

source /etc/profile

编辑conf/zoo.cfg文件,

更改添加如下内容:

admin.serverPort=10086
clientPort=2181
initLimit=10
syncLimit=5
dataDir=/home/zookeeper/data
dataLogDir=/home/zookeeper/log
# zookeeper cluster,2888为选举端口,3888为心跳端口
server.1=docker:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

tickTime:心跳时间间隔,毫秒
initLimit: 集群中连接到leader的Follower服务器,初始化连接是最长能忍受多少个心跳的时间间隔数
syncLimit: leader与follower之间发送消息,请求和应答时间长度 (5*2000)

将zookeeper的安装包复制到其他节点

scp -r apache-zookeeper-3.8.1-bin slave1:/home/zookeeper/
scp -r apache-zookeeper-3.8.1-bin slave2:/home/zookeeper/

创建data和log目录:

 mkdir -p /home/zookeeper/data
 mkdir /home/zookeeper/log

在data目录中,创建myid文件,标识当前主机。在三台主机中分别执行,数字为1、2、3,如下所示

 echo "1" >/opt/zookeeper/data/myid

#slave1
 echo "2" >/opt/zookeeper/data/myid
#slave2
 echo "3" >/opt/zookeeper/data/myid

启动zookeeper服务

分别在三台机器上执行如下命令:(在bin目录下执行)

[root@master ~]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

启动成功,查看当前节点的状态,包括leader、follower属性:

[root@master ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower

jps可查看zk的进程:

[root@node1 bin]# jps
11496 QuorumPeerMain
11566 Jps

部署hadoop集群

在Linux中进行hadoop集群搭建(完全分布式)_linux hadoop分布式_Best_Liu~的博客-CSDN博客

安装部署hbase

上传安装包到/home/hbase

解压

tar -zvxf hbase-2.5.0-bin.tar.gz -C /home/hbase/

1.添加环境变量

环境变量/etc/profile(追加)

## HBASE_HOME
export HBASE_HOME=/home/hbase/hbase-2.5.0
export PATH=$PATH:$HBASE_HOME/bin

 更新

source /etc/profile

配置--三台主机均需配置

跳转到/home/hbase/hbase-2.5.0/conf/目录

2.编辑文件 vim conf/hbase-env.sh

export JAVA_HOME=/usr                       ## 根据环境更改java_home
export HBASE_MANAGES_ZK=false   ##不使用hbase自带的zookeeper

3.配置hbase-site.xml文件

<configuration>
  <property>
      <name>hbase.rootdir</name> <!-- hbase存放数据目录 -->
    <value>hdfs://docker:9000/home/hbase/hbase_db</value> <!-- 端口要和Hadoop的fs.defaultFS端口一致-->
  </property>
 <property>   <!--默认HMaster HTTP访问端口-->
              <name>hbase.master.info.port</name>
              <value>16010</value>
       </property>
       <property>   <!--默认HRegionServer HTTP访问端口-->
              <name>hbase.regionserver.info.port</name>
              <value>16030</value>
       </property>

  <property>
    <name>hbase.cluster.distributed</name> <!-- 是否分布式部署 -->
    <value>true</value>
  </property>

  <property>
    <name>hbase.zookeeper.quorum</name> <!-- list of  zookooper -->
    <value>docker:2181,slave1:2181,slave2:2181</value>
  </property>

    <property> <!--指定master节点-->
        <name>hbase.master</name>
        <value>docker:60000</value>
    </property>

  <property><!--zookooper配置、日志等的存储位置 -->
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/hbase/zookeeper</value>
  </property>

  <property>
    <name>hbase.tmp.dir</name>
    <value>./tmp</value>
  </property>
  <property>
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
  </property>
</configuration>

4.配置regionservers

docker
slave1
slave2

启动服务

运行(在NameNode节点主机上,master,HBase安装目录下)

bin/start-hbase.sh 

停止

bin/stop-hbase.sh 

Hadoop之Hbase建表(详细步骤)

1、进入hbase shell

hbase shell

2、创建表

create 'StudentAndCourse','student','course1','course2','course3'

3、插入数据

①新增学号为2015001的学生的所有信息

put 'StudentAndCourse','2015001','student:S_Name','Zhangsan'
put 'StudentAndCourse','2015001','student:S_Sex','male'
put 'StudentAndCourse','2015001','student:S_Age','23'
put 'StudentAndCourse','2015001','course1:C_No','123001'
put 'StudentAndCourse','2015001','course1:C_Name','Math'
put 'StudentAndCourse','2015001','course1:C_Credit','2.0'
put 'StudentAndCourse','2015001','course1:Score','86'
put 'StudentAndCourse' ,'2015001','course3:C_No','123003'
put 'StudentAndCourse' ,'2015001','course3:C_Name','English'
put 'StudentAndCourse' ,'2015001','course3:C_Credit','3.0'
put 'StudentAndCourse' ,'2015001','course3:Score','69'

②、新增学号为2015002的学生的所有信息

put 'StudentAndCourse' ,'2015002','student:S_Name','Mary'
put 'StudentAndCourse' ,'2015002','student:S_Sex','female'
put 'StudentAndCourse' ,'2015002','student:S_Age','22'
put 'StudentAndCourse' ,'2015002','course2:C_No','123002'
put 'StudentAndCourse' ,'2015002','course2:C_Name','Conputer Science'
put 'StudentAndCourse' ,'2015002','course2:Credit','5.0'
put "StudentAndCourse" ,'2015002','course2:Score','77'
put 'StudentAndCourse' ,'2015002','course3:C_No','123003'
put 'StudentAndCourse' ,'2015002','course3:C_Name','English'
put 'StudentAndCourse' ,'2015002','course3:Credit','3.0'
put 'StudentAndCourse' ,'2015002','course3:Score','99'

③、新增学号为2015003的学生的所有信息

put 'StudentAndCourse' ,'2015003','student:S_Name','Lisi'
put 'StudentAndCourse' ,'2015003','student:S_Sex','male'
put 'StudentAndCourse' ,'2015003','student:S_Age','24'
put 'StudentAndCourse' ,'2015003','course1:C_No','123001'
put 'StudentAndCourse' ,'2015003','course1:C_Name','Math'
put 'StudentAndCourse' ,'2015003','course1:C_Credit','2.0'
put 'StudentAndCourse' ,'2015003','course1:Score','98'
put 'StudentAndCourse' ,'2015003','course2:C_No','123002'
put 'StudentAndCourse' ,'2015003','course2:C_Name','Computer Science'
put 'StudentAndCourse' ,'2015003','course2:C_Credit','5.0'
put 'StudentAndCourse' ,'2015003','course2:Score','95'

4、查看表的数据

scan 'StudentAndCourse'

 

退出hbase shell 

exit
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值