这篇文章主要介绍一下,Hbase是什么,能干什么,干的怎么样。以及Hbase的安装配置和调试等。总的来说Hbase在大数据的生态系统中占有很重要的位置,对于Hbase的学习还需要更加深入才行。对于大数据的内容我都建议多看看官方文档,以前我总觉得自己看不懂哪些高大上的,其实不然。???感觉官方文档写的都很亲民。 作者:攻城虱 来源:CSDN 原文:https://blog.csdn.net/u011583316/article/details/84445735
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。-- 百度百科
简单的说HBase就是一个分布式的可扩展的大数据量的非关系型数据库(NoSQL)。它具有一般的关系型数据 Oracle/MySQL的基础功能如:
Hbase 作为一个非关系型数据库,首先就是对数据的基础的存储,其次是可以提供传统关系型数据库达不到的亿级数据量实时的查询。
Hbase在上亿的数据表里能做到秒级别查询(实时查询)
一切大数据量的,对实时查询依赖高的的场景都能解决。
图中可见,Hbase是基于HDFS的,也就是说Hbase的数据是存储在HDFS上面的,它可以很好地继承MapReduce和Hive来进行数据的处理。
Hbase是非关系型数据库中典型的列式存储数据库
Hbase中数据是以字节数组进行存储,不存在数据类型。默认数据三份(HDFS)并且每条数据有唯一的标识符。
rowkey + columnfamily(列蔟) + column01(列名) + timestamp(时间戳) : value (值) => cell (单元)
关键点在于表中rowkey的设计。
1、hbase是可划分成多个region。 2、rowkey是排好序了的。 3、数据是按列存储的。
Hbase的数据模型
图中可见HDFS,Zookeeper。Hbase有多少个RS,其管理的内容都存在ZK的ZNode上面,ZK可以帮助用户找到某张表在哪个RS,做一个检索功能。架构的详细,请往后面看。
同时关闭默认ZK管理,由我们启动自己安装的ZK。注释掉就行。
hbase-env.sh
# export HBASE_MANAGES_ZK=true
* zookeeper
* namenode
* datanode
* HM
各个目录的含义(官方文档):
1./.tmp 这个目录用来存储临时文件,当对表进行操作的时候,首先会将表移动到该目录下,然后再进行操作。
2./WALs WAL意为Write ahead log用来做灾难恢复。被HLog实例管理的WAL文件。
3./data hbase 的核心目录,系统会预置两个 namespace 即:hbase和default。/data/hbase 存储了存储了 HBase 的 namespace、meta 两个系统级表。namespace 中存储了 HBase 中的所有 namespace 信息,包括预置的hbase 和 default。/data/default/ 存储所有用户数据表/data/default/表名。
4./hbase.id 存储集群唯一的 cluster id 号,是一个 uuid。
5./hbase.version 同样也是一个文件,存储集群的版本号,貌似是加密的,看不到,只能通过web-ui 才能正确显示出来。 6./oldWALs 当/WALs 中的HLog文件被持久化到存储文件中,不再需要日志文件时,它们会被移动到/oldWALs目录。
注意 :如果有需要的话就换hadoop的jar,替换Hadoop的版本。
查看数据
get
范围查询(用的最多) scan ‘user’,{STARTROW=>‘1002’}
全表扫描 scan
删除数据
delete ‘user’,‘1001’,‘info:name’ deleteall ‘user’,‘1001’
删除所有数据
删除表
删除前,必须先disable
表的启用禁用 禁用
启用
说说Hbase中数据存储的物理模型。数据是怎么在Hbase中存储的。简单来说是按rowkey来进行动态分区(region)存储的。
细节说明:
每个columnfamily存储在HDFS上的一个单独文件中;Key 和 Version number在每个 column family中均由一份;空值不会被保存。
HBase数据写入流程
put —> cell - wal(预写日志) -> hdfs- memstore(溢写)- storefile -> hdfs
细节描述
可以看出HBase只有增添数据,所有的更新和删除操作都是在后续的Compact历程中举行的,使得用户的写操作只要进入内存就可以立刻返回,实现了HBase I/O的高性能。
HBase数据读取流程
数据读取:先到memstore读(没有溢写到)再到storefile最后合并。
细节描述
寻址过程:client—>Zookeeper–>.META. 表–>RegionServer—>Region–>User Table—>client
Hbase Region理解
这张图有一个缺陷就是,Hbase中一个Hlog是管理的一个HRegionServer的,不是一个HRegion。
Hbase读取数据流程说明:
客户端读取数据首先连接ZK,他需要去ZK找到这个表(region)所在的位置。 这里Zk存储了下图内容:
然后去meta表扫描信息,比如找到user的rowkey然后找到他对应的region,得到管理他的regionserver。
Master需要连接ZK是因为他需要知道哪些RS是活着的。
特殊说明:
RS->一个RS对应一个目录
meta-region-server 存储meta表对应的region被哪个regionserver管理的信息
HBase新版本中,有了类似于RDBMS中DataBase的概念
命令空间
- 用户自定义的表,默认情况下命名空间
default
- 系统自带的元数据表的命名空间
hbase
总结 Hbase这一块需要学习的内容很多很多。这一节主要就是说说Hbase的一些基础特性,shell,以及Hbase的架构分析。内容虽然看着比较多,但是肯定也不全,暂时就记录这么多,如有需要再去看官方文档???。深入学习必不可少。