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中的行,只有三种方式:
- 通过单个row key访问
- 通过row key的range
- 全表扫描
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位整型。
- 时间戳可以由hbase在数据写入时自动赋值,此时时间戳是精确到毫秒的当前系统时间
- 时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳
- 每个 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的作用:
- 为Region server分配region
- 负责Region server的负载均衡
- 发现失效的Region server并重新分配其上的region
- HDFS上的垃圾文件回收
- 处理schema更新请求
- HRegionServer作用:
- 维护master分配给他的region,处理对这些region的io请求
- 负责切分正在运行过程中变的过大的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:
- 通过zk里的文件/hbase/rs得到-ROOT-表的位置。-ROOT-表只有一个region。
- 通过-ROOT-表查找.META.表的第一个表中相应的region的位置。其实-ROOT-表是.META.表的第一个region;.META.表中的每一个region在-ROOT-表中都是一行记录。
- 通过.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结构图如下:
- Data Block段用来保存表中的数据,这部分可以被压缩。
- Meta Block段(可选的)用来保存用户自定义的kv段,可以被压缩。
- FileInfo段用来保存HFile的元信息,不能被压缩,用户也可以在这一部分添加自己的元信息
- Data Block Index段(可选的)用来保存Meta Blcok的索引。
- Trailer这一段是定长的。保存了每一段的偏移量,读取一个HFile时,会首先读取Trailer,Trailer保存了每个段的起始位置(段的Magic Number用来做安全check),然后,DataBlock Index会被读取到内存中,这样,当检索某个key时,不需要扫描整个HFile,而只需从内存中找到key所在的block,通过一次磁盘io将整个block读取到内存中,再找到需要的key。
- DataBlock Index采用LRU机制淘汰。
- 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轻量级的包装。
- 写数据过程
- 首先是把Log写入到HLog中,HLog是标准的Hadoop Sequence File,由于Log数据量小,而且是顺序写,速度非常快;
- 同时把数据写入到内存MemStore中,成功后返回给Client,所以对Client来说,HBase写的速度非常快,因为数据只要写入到内存中,就算成功了
- 接着检查MemStore是否已满,如果满了,就把内存中的MemStore Flush到磁盘上,形成一个新的StoreFile
- 当Storefile文件的数量增长到一定阈值后,系统会进行合并(Compact),在合并过程中会进行版本合并和删除工作,形成更大的storefile
- 当Storefile大小超过一定阈值后,会把当前的Region分割为两个(Split),并由Hmaster分配到相应的HRegionServer,实现负载均衡
- 对于硬件故障,HBASE在写动作发生之前先写入WAL,HBASE集群中每台服务器维护一个WAL记录发生的变化。WAL是底层文件系统上的一个文件,知道WAL新纪录成功写入之后,写动作才被认为成功完成。
- 读数据过程
由于无法直接修改HBase里的数据,所有的update和delete操作都转换成append操作,而且HBase里也没有索引,因此读数据都是以Scan的方式进行。Client在读数据时,一般会指定timestamp和ColumnFamily。
- 首先,根据ColumnFamily可以过滤掉很大一部分Store,这也是HBase作为列式数据库的一大优势
- 然后,根据timestamp和Bloom Filter排除掉一些StoreFiles
- 最后,在剩下的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-centos01 | 192.168.112.101 | Master |
Zookeeper集群 | tango-centos02 | 192.168.112.102 | Slave1 |
Zookeeper集群 | tango-centos03 | 192.168.112.103 | Slave2 |
Hadoop集群 | tango-spark01 | 192.168.112.121 | Namenode |
Hadoop集群 | tango-spark02 | 192.168.112.122 | DataNode |
HBASE集群 | tango-spark01 | 192.168.112.121 | Master |
HBASE集群 | tango-spark02 | 192.168.112.122 | Region |
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集群安装配置
参考资料:
3.1 修改hadoop配置
Hadoop配置参考《SPARK集群环境搭建》部分的“Hadoop分布式集群配置”,主要包括:
- 解压安装包
- 配置环境变量,将hadoop文件夹下的bin和sbin目录配置到PATH
- 建立HDFS目录
- 配置Hadoop配置文件
- core-site.xml:特定的通用Hadoop属性配置文件
- marpred-site.xml:特定的通用MapReduce属性配置文件
- hdfs-site.xml:特定的通用HDFS属性配置文件
- yarn-site.xml:特定的通用YARN属性配置文件
- 修改./etc/hadoop/slaves内容,添加slave节点信息
- 配置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集群环境搭建》,主要包括:
- 解压安装包到指定目录
- 配置zookeeper集群,修改配置文件
- 创建zookeeper所需的目录
- 在/data/zookeeper目录下创建myid文件,里面的内容为数字,用于标识主机,如果这个文件没有的话,zookeeper是没法启动的
- 另外2个节点的zookeeper配置相同,除了修改myid文件
- 启动zookeeper集群,其中2机被选中为Leader
- 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
- 登录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
参考资料
- https://blog.csdn.net/dbanote/article/details/8902746
- https://www.cnblogs.com/steven-note/p/7209398.html
- http://hbase.apache.org/book.html#_preface
- http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html#Installation
- https://hbase.apache.org/book.html#example_config
- 大数据系列之Spark集群环境部署
- 大数据系列之Kafka集群环境部署
转载请注明原文地址:https://blog.csdn.net/solihawk/article/details/116274730
文章会同步在公众号“牧羊人的方向”更新,感兴趣的可以关注公众号,谢谢!