大数据系列之HBASE集群环境搭建

HBase是一个构建在HDFS上的分布式列存储系统,本文简要介绍了HBASE的设计模式和存储模式,并部署HBASE集群环境。


1、HBASE基本概念

HBase是一个构建在HDFS上的分布式列存储系统,基于Google BigTable模型开发的,典型的key/value系统。从逻辑上讲,HBase将数据按照表、行和列进行存储。与Hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

1.1 HBase设计模型

HBase中的每一张表就是所谓的BigTable,BigTable会存储一系列的行记录,行记录有三个基本类型的定义:Row Key、Time Stamp、Column。

  • Row Key是行在BigTable中的唯一标识
  • TimeStamp是每次数据操作对应关联的时间戳,可以看做SVN的版本
  • Column定义为< family>:< label>,通过这两部分可以指定唯一的数据的存储列,family的定义和修改需要对HBase进行类似于DB的DDL操作,而label不需要定义直接可以使用,这也为动态定制列提供了一种手段。family另一个作用体现在物理存储优化读写操作上,同 family的数据物理上保存的会比较临近,因此在业务设计的过程中可以利用这个特性。
1.1.1 逻辑存储模型

HBase以表的形式存储数据,表由行和列组成,列划分为若干个列簇,如下图所示。

在这里插入图片描述

以关系型数据的思维下会感觉,上面的表格是一个5列4行的数据表格,但是在HBase中这种理解是错误的,其实在HBase中上面的表格只是一行数据。下面是对表中元素的详细解析:

  • Row Key

与NoSQL数据库一样,row key是用来检索记录的主键。访问hbase table中的行,只有三种方式:

  1. 通过单个row key访问
  2. 通过row key的range
  3. 全表扫描

Row key可以是任意字符串(最大长度是64KB,实际应用中长度一般为10-100bytes),在HBASE内部,row key保存为字节数组。存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。

  • 列簇

Hbase表中的每个列,都归属于某个列簇。列簇是表的schema的一部分而列不是,必须在使用表之前进行定义。列名都以列簇作为前缀。例如courses:history、courses:math都属于 courses这个列簇。

  • Timestamp时间戳

HBase中通过row和columns确定的为一个存贮单元称为cell,每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引,时间戳的类型是64位整型。

  1. 时间戳可以由hbase在数据写入时自动赋值,此时时间戳是精确到毫秒的当前系统时间
  2. 时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳
  3. 每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面

为了避免数据存在过多版本造成的的管理(包括存贮和索引)负担,Hbase提供了两种数据版本回收方式:一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天),用户可以针对每个列簇进行设置。

1.1.2 物理存储模型

Table在行的方向上分割为多个HRegion,每个HRegion分散在不同的RegionServer中。

在这里插入图片描述

每个HRegion由多个Store构成,每个Store由一个memStore和0或多个StoreFile组成,每个Store保存一个Columns Family

在这里插入图片描述

StoreFile以HFile格式存储在HDFS中。

1.2 HBase存储架构

从HBase的架构图上可以看出,HBase中的存储包括HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等,以下是HBase存储架构图:

在这里插入图片描述

HBase中的每张表都通过行键按照一定的范围被分割成多个子表(HRegion),默认一个HRegion超过256M就要被分割成两个,这个过程由HRegionServer管理,而HRegion的分配由HMaster管理。

  • HMaster的作用:
  1. 为Region server分配region
  2. 负责Region server的负载均衡
  3. 发现失效的Region server并重新分配其上的region
  4. HDFS上的垃圾文件回收
  5. 处理schema更新请求
  • HRegionServer作用:
  1. 维护master分配给他的region,处理对这些region的io请求
  2. 负责切分正在运行过程中变的过大的region

可以看到,client访问hbase上的数据并不需要master参与(寻址访问zookeeper和region server,数据读写访问region server),master仅仅维护table和region的元数据信息(table的元数据信息保存在zookeeper上),负载很低。 HRegionServer存取一个子表时,会创建一个HRegion对象,然后对表的每个列族创建一个Store实例,每个Store都会有一个MemStore和0个或多个StoreFile与之对应,每个StoreFile都会对应一个HFile, HFile就是实际的存储文件。因此,一个HRegion有多少个列簇就有多少个Store。一个HRegionServer会有多个HRegion和一个HLog。

  • HRegion

Table在行的方向上分隔为多个Region。Region是HBase中分布式存储和负载均衡的最小单元,即不同的region可以分别在不同的Region Server上,但同一个Region是不会拆分到多个server上。Region按大小分隔,每个表一般是只有一个region。随着数据不断插入表,region不断增大,当region的某个列簇达到一个阈值(默认256M)时就会分成两个新的region。

  • HRegion定位:

Region被分配给哪个Region Server是完全动态的,所以需要机制来定位Region具体在哪个region server。 HBase使用三层结构来定位region:

  1. 通过zk里的文件/hbase/rs得到-ROOT-表的位置。-ROOT-表只有一个region。
  2. 通过-ROOT-表查找.META.表的第一个表中相应的region的位置。其实-ROOT-表是.META.表的第一个region;.META.表中的每一个region在-ROOT-表中都是一行记录。
  3. 通过.META.表找到所要的用户表region的位置。用户表中的每个region在.META.表中都是一行记录。
    -ROOT-表永远不会被分隔为多个region,保证了最多需要三次跳转,就能定位到任意的region。client会将查询的位置信息保存缓存起来,缓存不会主动失效,因此如果client上的缓存全部失效,则需要进行6次网络来回,才能定位到正确的region,其中三次用来发现缓存失效,另外三次用来获取位置信息。
  • Store

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

  • MemStore

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

  • StoreFile

MemStore内存中的数据写到文件后就是StoreFile,StoreFile底层是以HFile的格式保存。

  • HFile

HBase中KeyValue数据的存储格式,是hadoop的二进制格式文件。首先HFile文件是不定长的,长度固定的只有其中的两块:Trailer和FileInfo。Trailer中有指针指向其他数据块的起始点,FileInfo记录了文件的一些meta信息。Data Block是Hbase io的基本单元,为了提高效率,HRegionServer中有基于LRU的block cache机制。每个Data块的大小可以在创建一个Table的时候通过参数指定(默认块大小64KB),大号的Block有利于顺序Scan,小号的Block利于随机查询。每个Data块除了开头的Magic以外就是一个个KeyValue对拼接而成,Magic内容就是一些随机数字,目的是防止数据损坏,结构如下:

在这里插入图片描述

HFile结构图如下:
在这里插入图片描述

  1. Data Block段用来保存表中的数据,这部分可以被压缩。
  2. Meta Block段(可选的)用来保存用户自定义的kv段,可以被压缩。
  3. FileInfo段用来保存HFile的元信息,不能被压缩,用户也可以在这一部分添加自己的元信息
  4. Data Block Index段(可选的)用来保存Meta Blcok的索引。
  5. Trailer这一段是定长的。保存了每一段的偏移量,读取一个HFile时,会首先读取Trailer,Trailer保存了每个段的起始位置(段的Magic Number用来做安全check),然后,DataBlock Index会被读取到内存中,这样,当检索某个key时,不需要扫描整个HFile,而只需从内存中找到key所在的block,通过一次磁盘io将整个block读取到内存中,再找到需要的key。
  6. DataBlock Index采用LRU机制淘汰。
  7. HFile的Data Block,Meta Block通常采用压缩方式存储,压缩之后可以大大减少网络IO和磁盘IO,随之而来的开销当然是需要花费cpu进行压缩和解压缩。(备注:DataBlock Index的缺陷,a) 占用过多内存b) 启动加载时间缓慢)
  • HLog

HLog(WAL log):WAL意为write ahead log,用来做灾难恢复使用,HLog记录数据的所有变更,一旦region server宕机,就可以从log中进行恢复。。

  • LogFlusher

定期的将缓存中信息写入到日志文件中

  • LogRoller

对日志文件进行管理维护

1.3 HBase读写数据

ZooKeeper存储所有Region的入口,Client通过访问它获得-ROOT-表的location信息,接着通过-ROOT-表获得.META.表Region信息,最后再通过.META.表获得用户表的Region信息。Client会缓存这些信息,这样下次就可以直接获得用户表的Region信息。

在这里插入图片描述

如上图所示,当Client连上HReigonServer后,后者会打开相应的HRegion对象,为每个HColumeFamily创建Store实例,每个Store实例有一个MemStore,一个或多个StoreFile,StoreFile是HFile轻量级的包装。

  • 写数据过程
  1. 首先是把Log写入到HLog中,HLog是标准的Hadoop Sequence File,由于Log数据量小,而且是顺序写,速度非常快;
  2. 同时把数据写入到内存MemStore中,成功后返回给Client,所以对Client来说,HBase写的速度非常快,因为数据只要写入到内存中,就算成功了
  3. 接着检查MemStore是否已满,如果满了,就把内存中的MemStore Flush到磁盘上,形成一个新的StoreFile
  4. 当Storefile文件的数量增长到一定阈值后,系统会进行合并(Compact),在合并过程中会进行版本合并和删除工作,形成更大的storefile
  5. 当Storefile大小超过一定阈值后,会把当前的Region分割为两个(Split),并由Hmaster分配到相应的HRegionServer,实现负载均衡
  6. 对于硬件故障,HBASE在写动作发生之前先写入WAL,HBASE集群中每台服务器维护一个WAL记录发生的变化。WAL是底层文件系统上的一个文件,知道WAL新纪录成功写入之后,写动作才被认为成功完成。
  • 读数据过程

由于无法直接修改HBase里的数据,所有的update和delete操作都转换成append操作,而且HBase里也没有索引,因此读数据都是以Scan的方式进行。Client在读数据时,一般会指定timestamp和ColumnFamily。

  1. 首先,根据ColumnFamily可以过滤掉很大一部分Store,这也是HBase作为列式数据库的一大优势
  2. 然后,根据timestamp和Bloom Filter排除掉一些StoreFiles
  3. 最后,在剩下的StoreFile(包含MemStore)里Scan查找

参考资料:

https://blog.csdn.net/dbanote/article/details/8902746

https://www.cnblogs.com/steven-note/p/7209398.html

2、环境说明

参考资料:http://hbase.apache.org/book.html#_preface

2.1 服务器配置

HABSE本身不能独立搭建集群需要和hadoop及hdfs整合,出于服务器资源考虑只有2个节点。Zookeeper可以独立搭建集群,Zookeeper集群环境至少需要3个节点:1个Master和2个Slave,节点之间可以互相访问。服务器环境配置信息如下表所示:

集群主机名IP角色
Zookeeper集群tango-centos01192.168.112.101Master
Zookeeper集群tango-centos02192.168.112.102Slave1
Zookeeper集群tango-centos03192.168.112.103Slave2
Hadoop集群tango-spark01192.168.112.121Namenode
Hadoop集群tango-spark02192.168.112.122DataNode
HBASE集群tango-spark01192.168.112.121Master
HBASE集群tango-spark02192.168.112.122Region
2.2 环境配置
2.2.1 Hadoop版本兼容说明

Hadoop和HBASE版本兼容性如下图所示:

在这里插入图片描述

本次安装使用版本Hadoop 2.9.0、Spark 2.3.0、HBASE 1.2.6和Zookeeper 3.4.12。

2.2.2 安装JDK和配置jps

查看Java版本信息,如找不到JAVA命令,可通过yum install Java安装最新Java版本

[root@tango-spark01 local]# java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-b10)
OpenJDK 64-Bit Server VM (build 25.171-b10, mixed mode)

1)配置jps

Centos中使用yum安装java时,没有jps命令,安装安装java-1.X.X-openjdk-devel这个包

[root@tango-spark02 hadoop]# yum install java-1.8.0-openjdk-devel.x86_64

2)配置JAVA_HOME

通过yum install java,安装openjdk。安装后,执行echo $JAVA_HOME发现返回为空。说明JAVA_HOME没有配置,需要到/etc/profile中配置JAVA_HOME

[root@tango-spark01 etc]# which java
/bin/java
[root@tango-spark01 etc]# ls -lrt /bin/java
lrwxrwxrwx. 1 root root 22 May 24 16:08 /bin/java -> /etc/alternatives/java
[root@tango-spark01 etc]# ls -lrt /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 May 24 16:08 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre/bin/java

3)在/etc/profile.d目录下新建custom.sh文件,并添加以下内容:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

动态生效:

[root@tango-spark01 etc]# source /etc/profile
[root@tango-spark01 profile.d]# echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64
2.2.3 添加Hosts映射关系

在Hadoop集群两个节点上添加hosts映射关系:

[root@tango-spark01 ~]# vi /etc/hosts
192.168.112.121 tango-spark01
192.168.112.122 tango-spark02
3、Hadoop集群安装配置

参考资料:

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html#Installation

3.1 修改hadoop配置

Hadoop配置参考《SPARK集群环境搭建》部分的“Hadoop分布式集群配置”,主要包括:

  1. 解压安装包
  2. 配置环境变量,将hadoop文件夹下的bin和sbin目录配置到PATH
  3. 建立HDFS目录
  4. 配置Hadoop配置文件
  • core-site.xml:特定的通用Hadoop属性配置文件
  • marpred-site.xml:特定的通用MapReduce属性配置文件
  • hdfs-site.xml:特定的通用HDFS属性配置文件
  • yarn-site.xml:特定的通用YARN属性配置文件
  1. 修改./etc/hadoop/slaves内容,添加slave节点信息
  2. 配置slave节点信息
3.2 启动hadoop集群
3.2.1 格式化集群的文件系统

在tango-spark01 Master节点格式化集群的文件系统

[root@tango-spark01 hadoop-2.9.0]# hdfs namenode -format
18/05/25 16:14:56 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = tango-spark01/192.168.112.121
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 2.9.0
18/05/25 16:15:40 INFO namenode.FSImage: Allocated new BlockPoolId: BP-304911741-192.168.112.121-1527236140321
18/05/25 16:15:40 INFO common.Storage: Storage directory /usr/local/spark/hadop-2.9.0/hdfs/name has been successfully formatted.

格式化成功后,看到hdfs/name目录下出现current目录,且包含多个文件

[root@tango-spark01 hadoop-2.9.0]# cd hdfs
[root@tango-spark01 hdfs]# ls
data  name
[root@tango-spark01 hdfs]# cd name
[root@tango-spark01 name]# ls
current
[root@tango-spark01 name]# cd current
[root@tango-spark01 current]# ls
fsimage_0000000000000000000  fsimage_0000000000000000000.md5  seen_txid  VERSION
3.2.2 启动Hadoop集群

因为tango-spark01是namenode,tango-spark02是datanode,所以只需要再tango-spark01上执行启动命令即可,使用命令启动Hadoop集群:start-dfs.sh和start-yarn.sh

[root@tango-spark01 hadoop-2.9.0]# start-dfs.sh
[root@tango-spark01 hadoop-2.9.0]# start-yarn.sh

使用jps查看各个节点的进程信息

[root@tango-spark01 hadoop-2.9.0]# jps
1539 NameNode
1734 SecondaryNameNode
2139 Jps
1884 ResourceManager
[root@tango-spark02 hadoop-2.9.0]# jps
1445 DataNode
1637 Jps
1514 NodeManager

此时分布式的hadoop集群已经搭好了,在浏览器输入http://192.168.112.121:50070,自动跳转到了overview页面

在这里插入图片描述

4、ZooKeeper集群安装配置

ZooKeeper集群环境参考《SPARK集群环境搭建》,主要包括:

  1. 解压安装包到指定目录
  2. 配置zookeeper集群,修改配置文件
  3. 创建zookeeper所需的目录
  4. 在/data/zookeeper目录下创建myid文件,里面的内容为数字,用于标识主机,如果这个文件没有的话,zookeeper是没法启动的
  5. 另外2个节点的zookeeper配置相同,除了修改myid文件
  6. 启动zookeeper集群,其中2机被选中为Leader
  7. Zookeeper服务检查
[root@tango-centos01 zookeeper-3.4.12]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/elk/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower
[root@tango-centos02 zookeeper-3.4.12]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/elk/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower
[root@tango-centos03 zookeeper-3.4.12]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/elk/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: leader
  1. 登录zookeeper shell
[root@tango-centos01 bin]# zkCli.sh
Connecting to localhost:2181
5、HBase集群安装配置

参考https://hbase.apache.org/book.html#example_config

5.1 解压安装包到指定目录

解压HBASE安装包到指定目录:

[root@tango-spark01 src-install]# tar -xzvf hbase-1.2.6-bin.tar.gz -C /usr/local/spark
5.2 配置hbase-env.sh

配置HBASE环境变量,指定HBASE_CLASSPATH和HBASE_MANAGES_ZK

# Extra Java CLASSPATH elements.  Optional.
export HBASE_CLASSPATH=/usr/local/spark/hadoop-2.9.0/etc/hadoop
# Tell HBase whether it should manage it's own instance of ZooKeeper or not.
export HBASE_MANAGES_ZK=flase
  • export HBASE_CLASSPATH=/usr/local/spark/hadoop-2.9.0/etc/hadoop——AVA路径
  • export HBASE_MANAGES_ZK=false——关闭HBASE管理的zookeeper
5.2 配置hbase-site.xml

HBASE配置信息包括数据存放目录、端口号以及zookeeper配置等信息

<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://tango-spark01:9000/hbase</value>
    </property>
    <property>
        <name>hbase.master</name>
        <value>tango-spark01</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>192.168.112.101,192.168.112.102,192.168.112.103</value>
    </property>
    <property>
        <name>zookeeper.session.timeout</name>
        <value>60000000</value>
    </property>
    <property>
        <name>dfs.support.append</name>
        <value>true</value>
</property>
<property>
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
</property>
</configuration>
  • hbase.rootdir——Region和Server的共享目录,用于持久化HBASE
  • hbase.master——HBASE Master主机名
  • hbase.cluster.distributed——HBASE的运行模式,false是单机模式、true是分布式
  • hbase.zookeeper.property.clientPort——Zookeeper客户端连接的端口
  • hbase.zookeeper.quorum——Zookeeper集群的地址列表
  • zookeeper.session.timeout——Zookeeper会话超时时间
  • dfs.support.append——HDFS允许对文件进行追加
5.3 更改 regionservers

在 regionservers 文件中添加slave列表:

[root@tango-spark01 conf]# vi regionservers
tango-spark02
5.4 分发并同步安装包

将整个hbase安装目录都拷贝到所有slave服务器:

[root@tango-spark01 spark]# scp -r hbase-1.2.6/ tango-spark02:/usr/local/spark/
6、启动集群
6.1 启动ZooKeeper集群

1)如果是Kafka集成的zookeeper,按照如下步骤在每个节点输入命令启动zookeeper集群,其中2机被选中为Leader

[root@tango-centos01 kafka_2.11-1.1.0]# nohup ./bin/zookeeper-server-start.sh  ./config/zookeeper.properties &
[root@tango-centos02 kafka_2.11-1.1.0]# nohup ./bin/zookeeper-server-start.sh ./config/zookeeper.properties  &
[root@tango-centos03 kafka_2.11-1.1.0]# nohup ./bin/zookeeper-server-start.sh ./config/zookeeper.properties  &

2)如果是独立部署zookeeper集群,输入命令:

[root@tango-centos01 zookeeper-3.4.12]# zkServer.sh start
[root@tango-centos02 zookeeper-3.4.12]# zkServer.sh start
[root@tango-centos03 zookeeper-3.4.12]# zkServer.sh start
6.2 启动Hadoop集群

在tango-spark-01节点输入命令:

[root@tango-spark01 hadoop-2.9.0]# start-dfs.sh
[root@tango-spark01 hadoop-2.9.0]# start-yarn.sh
6.3 启动Hbase集群

在tango-spark-01节点输入命令:

[root@tango-spark01 hbase-1.2.6]# ./bin/start-hbase.sh

启动后,两个节点上进程列表:

[root@tango-spark01 logs]# jps
1859 ResourceManager
1493 NameNode
4249 HMaster ——HBASE Master进程
5578 Jps
1695 SecondaryNameNode
[root@tango-spark02 conf]# jps
1767 NodeManager
3880 HRegionServer ——HBASE slave进程
1627 DataNode
4814 Jps
6.4 进入hbase shell进行验证

1)输入命令进入HBASE shell

[root@tango-spark01 hbase-2.1.0]# ./bin/hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/spark/hadoop-2.9.0/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/spark/hbase-2.1.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
Version 2.1.0, re1673bb0bbfea21d6e5dba73e013b09b8b49b89b, Tue Jul 10 17:26:48 CST 2018
Took 0.0044 seconds
hbase(main):001:0>

2)查看并创建表

hbase(main):001:0> list
TABLE                                                 
0 row(s)
Took 0.4894 seconds                                   
=> []
hbase(main):002:0> create 'scores', 'grade', 'course'
Created table scores
Took 1.4039 seconds                                                      
=> Hbase::Table - scores
hbase(main):003:0> list
TABLE                                                 
scores                                                                               
1 row(s)
Took 0.0174 seconds                                   
=> ["scores"]
6.5 进入zookeeper shell进行验证

在Zookeeper集群节点登录zookeeper shell操作:

[root@tango-centos01 bin]# ./zookeeper-shell.sh 127.0.0.1:2181
Connecting to 127.0.0.1:2181
Welcome to ZooKeeper!
JLine support is disabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
ls /
[cluster, controller_epoch, controller, brokers, zookeeper, admin, isr_change_notification, consumers, log_dir_event_notification, latest_producer_id_block, config, hbase]
ls /hbase
[meta-region-server, rs, splitWAL, backup-masters, table-lock, flush-table-proc, master-maintenance, online-snapshot, switch, master, running, draining, namespace, hbaseid, table]
ls /hbase/table
[hbase:meta, hbase:namespace, scores]

在这里插入图片描述

6.6 访问Web UI查看状态

如果访问默认的http管理端口页面可以看到集群的情况

1)hadoop:http://192.168.112.121:8088/cluster/cluster

在这里插入图片描述

2)hbase:http://192.168.112.121:16010/master-status

在这里插入图片描述

3)HDFS:http://192.168.112.121:50070/dfshealth.html#tab-overview

在这里插入图片描述

7、HBASE基本指令操作

1)查看状态及版本信息

hbase(main):001:0> status
1 active master, 0 backup masters, 1 servers, 0 dead, 3.0000 average load
Took 0.7123 seconds                                            
hbase(main):002:0> version
2.1.0, re1673bb0bbfea21d6e5dba73e013b09b8b49b89b, Tue Jul 10 17:26:48 CST 2018

2)创建表并插入数据

	hbase(main):025:0> create 'tb_user','tb_info'
Created table tb_user
Took 2.3006 seconds                                                            
=> Hbase::Table - tb_user
	hbase(main):026:0> list
TABLE                                                 
tb_user                                                                          
2 row(s)
Took 0.0382 seconds                                                    
=> ["scores", "tb_user"]
	hbase(main):028:0> describe 'tb_user'
Table tb_user is ENABLED                                                             
tb_user                                               
COLUMN FAMILIES DESCRIPTION                                     
{NAME => 'tb_info', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOR
EVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESS
ION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}                                                                
1 row(s)
Took 0.1714 seconds
hbase(main):002:0> put 'tb_user','1001','tb_info:name','lilei'
Took 0.1819 seconds                                                   
hbase(main):003:0> put 'tb_user','1001','tb_info:sex','Male'
Took 0.0069 seconds                                                  
hbase(main):004:0> put 'tb_user','1001','tb_info:age','22'
Took 0.0057 seconds

3)对表进行扫描查询

hbase(main):005:0> scan 'tb_user'
ROW         COLUMN+CELL                         
 1001       column=tb_info:age, timestamp=1534314461140, value=22                    
 1001       column=tb_info:name, timestamp=1534314412572, value=lilei                 
 1001       column=tb_info:sex, timestamp=1534314440665, value=Male

4)获取表的某一个rowkey的所有信息

hbase(main):006:0> get 'tb_user','1001'
COLUMN                         CELL                   
 tb_info:age                       timestamp=1534314461140, value=22                         
 tb_info:name                     timestamp=1534314412572, value=lilei                          
 tb_info:sex                       timestamp=1534314440665, value=Male

5)获取表的某一列信息

hbase(main):013:0> get 'tb_user','1001','tb_info:name'
COLUMN                               CELL             
 tb_info:name                           timestamp=1534314412572, value=lilei

6)删除表的一列

hbase(main):014:0> delete 'tb_user','1002','tb_info:sex'
Took 0.0432 seconds                                      
hbase(main):015:0> get 'tb_user','1002'
COLUMN                             CELL               
 tb_info:age                           timestamp=1534314727464, value=21                    
 tb_info:name                         timestamp=1534314708430, value=Lily  

7)查询表的记录数

hbase(main):009:0> count 'tb_user'
2 row(s)

8)Disable表

hbase(main):016:0> disable 'tb_user'
Took 1.3736 seconds                                                      
hbase(main):017:0> scan 'tb_user'
ROW                                                   COLUMN+CELL                                                      
org.apache.hadoop.hbase.TableNotEnabledException: tb_user is disabled.

9)Enable表

hbase(main):001:0> enable 'tb_user'
Took 1.3495 seconds

10)删除表先禁用

hbase(main):003:0> drop 'tb_user'
ERROR: Table tb_user is enabled. Disable it first.

11)查询表是否存在

hbase(main):004:0> exists 'tb_user'
Table tb_user does exist                                             
Took 0.0082 seconds                                                    
=> true

12)判断表是否disable和enable

hbase(main):005:0> is_disabled 'tb_user'
false
hbase(main):007:0> is_enabled 'tb_user'
true

参考资料

  1. https://blog.csdn.net/dbanote/article/details/8902746
  2. https://www.cnblogs.com/steven-note/p/7209398.html
  3. http://hbase.apache.org/book.html#_preface
  4. http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html#Installation
  5. https://hbase.apache.org/book.html#example_config
  6. 大数据系列之Spark集群环境部署
  7. 大数据系列之Kafka集群环境部署

转载请注明原文地址:https://blog.csdn.net/solihawk/article/details/116274730
文章会同步在公众号“牧羊人的方向”更新,感兴趣的可以关注公众号,谢谢!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值