《2022年HBase数据库设计 .pdf》由会员分享,可在线阅读,更多相关《2022年HBase数据库设计 .pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1. HBase 有哪些基本的特征? . 1 HBase 特征: . 1 2. HBase 相对于关系数据库能解决的问题是什么? . 2 HBase 与关系数据的区别? . 2 HBase 与 RDBMS 的区别? . 2 3. HBase 的数据模式是怎么样的?即有哪些元素?如何存储?等 . 3 1) . 数据模式 . 3 2) . HBase 的基本元素: . 4 3) 数据模型有哪些操作?. 4 4) 返回结果的排序方式是什么?. 5 5)最后, HBase 不支持联合查询 . 5 mapreduce与 HBase 表配合使用 . 5 4. HBase 的模式 Schema设计的一些概念
2、和原则. 5 1)模式的创建与更新. 5 2)列族的数量. 6 3)行键设计RowKey. 6 5. HBase 的拓扑结构是什么? . 7 1)拓扑结构 . 7 2) HBase 与 ZooKeeper 的关系是什么? . 7 3) HBase 的内部结构管理状况: . 7 4) HBase 的使用示例: . 8 6. HBase 与 Cassender的比较 . 8 7:几个关键概念:. 9 行键 (RowKey) . 9 列族( ColumnFamily ). 9 时间戳( TimeStamp) . 9 单元格( Cell) . 9 区域 (Region) . 10 2: hbase之宽
3、表与窄表对split 的影响 . 10 3: HBase 中所有行数据的均衡分布问题(region) . 10 1. HBase 有哪些基本的特征?HBase特征:类似于 google 的 bigtable 的开源实现,拥有以下1). 在 HDFS 之上2). 基于列存储的分布式数据库名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - 3). 用于实时地读、写大规模数据集其他 HBase 的特性:1).没有真正的索引,行顺序存储,
4、也没有所谓的索引膨胀问题。2) 自动分区,表增长时,自动分区到新的节点上。3) 线性扩展和区域会自动重新平衡,运行RegionServer,达到负载均衡的目的。4).容错和普通商用的硬件支持。这点同hadoop 类似。2. HBase 相对于关系数据库能解决的问题是什么?HBase与关系数据的区别?其实就是关系数据库与HBase 各自的优缺点。关系数据库的缺憾:1). 扩展困难2). 维护复杂HBase 就是解决可伸缩行的问题。通过简单增加节点来获取线性扩展性。不支持SQL。HBase与 RDBMS 的区别?1). 表的设计: HBase 的表可以很高,很宽,可伸缩性很强。而且表的模式是物理存
5、储的直接反映。2). 拓扑:HBase 能水平分区并在上千个节点上自动复制。3). 应用形式:开发者必须承担更多的责任来正确地利用HBase 的检索和存储方式。4). RDBMS 遵循固定的模式,如“codd 12 规则” ,强调事务的“强一致性” 、参照完整性、SQL 支持、数据的逻辑与物理形式相对独立。等等。适用于中小规模的数据,但对于数据名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 12 页 - - - - - - - - - 的规模和并发读写方面进行大规模扩展时
6、,RDBMS 会性能大大降低,分布式更为困难,因为其需要放弃很多RDBMS 的易用的特性。HBase 适用于上亿、 上千亿级的数据, 如果是只有上千、 上百万级别是数据,传统的 RDBMS是更好的选择。HBase 需要更多硬件,如果硬件较少,如5 个,干不成什么好事。如果从 RDBMS 移植到 HBase,需要消除RDBMS 的很多额外特性,如列数据类型、 第二索引、事务、高级查询等。3. HBase 的数据模式是怎么样的?即有哪些元素?如何存储?等1). 数据模式如下列三个表:第一个是一个稀疏的表,实际上它是一个虚表,仅是一个概念视图,不是真实的存储形式,它来源于后两个表。而后两个表才是真正
7、的表,物理视图, 他们是实际的存储形式,而且它们是按列族进行存储的。Row Key Time Stamp ColumnFamily contents ColumnFamily anchor n.www t9 anchor: = CNN n.www t8 anchor:my.look.ca = CNN.com n.www t6 contents:html = . n.www t5 contents:html = . n.www t3 contents:html = . Row Key Time Stamp Column Family anchor n.www t9 anchor: = CNN n
8、.www t8 anchor:my.look.ca = CNN.com Row Key Time Stamp ColumnFamily contents: n.www t6 contents:html = . n.www t5 contents:html = . 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 12 页 - - - - - - - - - n.www t3 contents:html = . 2). HBase的基本元素:表、行、列、单元格:表的基本要素键
9、:一般是指行的键,即唯一标识某行的元素。表中的行,可以根据键进行排序,而对表的访问,也通过键。列族: 所有列族成员拥有相同的前缀,某列族的成员,需要预先定义,但也可以直接进行追加列族hbase 表中的每个列, 都归属与某个列族。列族是表的chema 的一部分 (而列不是 ),必须在使用表之前定义。列名都以列族作为前缀。例如courses:history,courses:math 都属于 courses 这个列族。列族成员会一起放进存储器。而HBase 面向列的存储,是面向列族的数据存储(这个通过上面那个表的示例可以看出来),数据存储与调优都在这个层次,HBase 表与 RDBMS 中表类似,行
10、是排序的,客户端可以把列添加到列族中去。单元格 cell:单元格中存放的是不可分割的字节数组。并且每个单元格拥有版本信息。HBase的是按版本信息倒序排列。区域 region:将表水平划分, 是 HBase 集群分布数据的最小单位。在线的所有区域就构成了表的内容。加锁:对数据行进行更新,都需加锁。保持原子性。3) 数据模型有哪些操作?Get、Scan、Put、Delete,即返回特定行的属性,多行属性、插入、删除数据。这些都需要一个HTable 实例来操作。分别有Get、Scan、Put、Delete 类来指定相应的参数、属性。以 scan为示例:名师资料总结 - - -精品资料欢迎下载 -
11、- - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - - - java view plaincopy HTable htable = . / instantiate HTable Scan scan = new Scan(); scan.addColumn(Bytes.toBytes(cf),Bytes.toBytes(attr); scan.setStartRow( Bytes.toBytes(row); / start key is inclusive scan.setStopRo
12、w( Bytes.toBytes(row + (char)0); / stop key is exclusive ResultScanner rs = htable.getScanner(scan); try for (Result r = rs.next(); r != null; r = rs.next() / process result. finally rs.close(); / always close the ResultScanner! 4) 返回结果的排序方式是什么?先是行、再是列族、再是列修饰符,最后是时间戳(反向排序,最新的在前面)。5)最后, HBase不支持联合查询m
13、apreduce与 HBase表配合使用a)默认 mapreduce 的任务分割是根据HBase 表中 region 的多少来分割,一个region就有一个 map。4. HBase 的模式 Schema设计的一些概念和原则1)模式的创建与更新可以使用 HBase Shell 或 HBase Admin 来创建和编辑HBase 的模式。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 12 页 - - - - - - - - - 在 0.90.x 版本,只能先禁用表,再修改
14、列族,而0.92.x 版本以后,支持在线修改。而且表和列族修改后,如size, region, block size 等,在下次主紧缩或 存储文件时起作用。2)列族的数量-列族数量越少越好,即使同时有两个列族,查询的时候总是访问其中一个列族,不会同时访问。-当一个表存在多个列族,当基数差距很大时,如A 族有 100 万行, B 族 10 亿行, A 族可能会被分散到很多区域region,导致扫描A 的效率降低。-另外,多个列族在flush 和 compaction 时,会造成很多I/O 负担。3)行键设计 RowKey a. 不要将RowKey 设计成有序的形式,因为这样容易阻塞并行性,将负载
15、压都在一台机器上b. 定位一个单元,需要行,列名和时间戳。如果一个单元格的坐标很大,会占用内存,索引用光。所以,解决方法:列族名尽量小,如一个字符a,短属性名,而行键长度可读即可(行键长度对数据访问无太大影响),将数字字符转换为数字字节模式(节省空间)。c. 倒序时间戳有助于找到找到最近版本值d. 行键是在列族范围内有效,不同列族中可以拥有同样的行键e. 行键永远不能变4)HBase 支持所有能转换为字节数组的东西,如字符串、数字、复杂对象、计数器、甚至图像。5)列族可以设置存活时间TTL ,超时后, HBase 自动删除数据名师资料总结 - - -精品资料欢迎下载 - - - - - - -
16、 - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 12 页 - - - - - - - - - 6)第二索引和查询:这里面有很多东西,需要查看对应版本官方的文档更好些。5. HBase 的拓扑结构是什么?1)拓扑结构类似于 HDFS 的 mast 与 slave,mapreduce 的 tasktracker 与 jobtracker 的关系, HBase也有 master 和 RegionServer 2)HBase与 ZooKeeper 的关系是什么?HBase 必须管理一个ZooKeeper 实例,它依赖ZooKeeper,主要目的是
17、,通过ZooKeeper 来协调区域内的服务器,它负责目录表、主控机地址等重要信息,若有服务器崩溃,HBase就可以通过ZooKeeper 来协调分配。RegionServer 在 HBase 的配置文件conf/regionservers 文件中,而HBase 集群的站点配置在conf/hbase-site.xml 和 conf/hbase-env.sh 中配置。 HBase 尽量遵循了Hadoop 的规则。3)HBase的内部结构管理状况:其内部有 -ROOT, -META 的特殊目录表, 用于维护当前集群上所有区域的列表、位置和状态。-ROOT 表包含-META 表的区域列表,而-MET
18、A 表示包含用户的的区域列表。所以, HBase 管理的流程是 : Client - 链接到 ZooKeeper - 查找 -ROOT 表的位置- 查找 -META 表的位置- 查找用户的区域所在的节点、位置及其状态等- 直接管理指定区域的RegionServer 并进行交互。HBase 支持 Java 及 MapReduce 的开发。HBase 提供了 Thrift 、REST 及 Avro 的接口。 HBase 需要有一个相应的接口客户端负责与这名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
19、 - - 第 7 页,共 12 页 - - - - - - - - - 些接口的交互。但是这些需要代理进行处理请求和响应,所以比java 更慢。%hbase-daemon.sh start/stop rest/thrift/avro /启动或终止对应的客户端4)HBase的使用示例:1. 创建表如在外壳环境下:create station , NAME = info, VERSION = 1 2. 加载数据MapReduce 与 HBase 可以充分利用集群的分布式模型,将原始数据复制到hdfs 中。每个任务只有一个HTable 实例,默认情况下,每个HTable.put(put) ,在执行插
20、入操作时,不任何缓存。不过想使用缓存,是可以自己设置的。3. Web 查询可以直接使用HBase 的 java API 来实现一个Web 的应用。 HTable.get()可用来获取已定义的列族的所有内容。get 的结果返回给Result, 包含的是数据行。HBase 还可以使用扫描器scanner来检索观测数据。并且获取的是一个有序的结果。类似于传统数据库中的“游标” 。 HTable.getScanner(scan). 6. HBase 与 Cassender的比较不同的应用,应该选用不同的NoSQL 数据库, Cassandra, HBase, MongoDB, Riak都有各自的优缺点
21、。而且以上各种数据库,都在发展中,随着版本变换,特点也会发生变化。根据CAP 理论( Consistency 一致性 , Availability 可获得性 , Partitioning tolerance 分区容忍) ,二者可以简单区分一下。HBase 是 Hadoop 生态系统的一部分,又其他框架如PIG, HIVE 等的支持,而Cassender上运行 mapreduce相对比较复杂的。 总体上来说, Cassender或许在存储上比较有效,但 HBase的数据处理能力更强些。HBase 有 Shell 脚本和 Web 页面的处理能力,而Cassender没有 Shell 的支持,只有A
22、PI,可用性上不如HBase。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 12 页 - - - - - - - - - Cassender的 Schema 发生变化时,需要集群重启,但Cassender 宣称“写操作永不失败”,而 HBase 是有可能的。场景:Cassandra 对由高速光纤连接的小型数据中心(几百个节点左右)是最佳的, 而 HBase适合网络“缓慢”且不可预料的Internet 网。其他:HBase 性能调优,别人很好的总结:http:/ 7:几个
23、关键概念:行键(RowKey) - 行键是字节数组, 任何字符串都可以作为行键;- 表中的行根据行键进行排序,数据按照Row key 的字节序 (byte order)排序存储;- 所有对表的访问都要通过行键(单个 RowKey访问, 或 RowKey范围访问, 或全表扫描 ) 列族( ColumnFamily)- CF 必须在表定义时给出- 每个 CF可以有一个或多个列成员(ColumnQualifier),列成员不需要在表定义时给出,新的列族成员可以随后按需、动态加入- 数据按 CF分开存储, HBase所谓的列式存储就是根据CF分开存储(每个CF对应一个 Store ) ,这种设计非常适
24、合于数据分析的情形时间戳( TimeStamp)- 每个 Cell可能又多个版本,它们之间用时间戳区分单元格( Cell)- Cell 由行键,列族 : 限定符,时间戳唯一决定名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 12 页 - - - - - - - - - - Cell中的数据是没有类型的,全部以字节码形式存贮区域(Region)- HBase自动把表水平(按Row )划分成多个区域(region),每个 region会保存一个表里面某段连续的数据;- 每个表
25、一开始只有一个region ,随着数据不断插入表,region不断增大, 当增大到一个阀值的时候,region就会等分会两个新的region ;- 当 table中的行不断增多,就会有越来越多的region 。这样一张完整的表被保存在多个 Region 上。- HRegion是 HBase中分布式存储 和负载均衡 的最小单元。最小单元表示不同的HRegion 可以分布在不同的HRegionServer上。 但一个 HRegion 不会拆分到多个server上2:hbase之宽表与窄表对split的影响只有当rowkey不同是才会做分割, 而 rowkey相同时即使region大小已经超过hba
26、se.hregion.max.filesize值, 也不会分割1)宽表情况下,单独一行大小超过hbase.hregion.max.filesize值,不会做分割2)相 同rowkey下 插 入 很 多 不 同 版 本 的 记 录 , 即 使 大 小 超 过hbase.hregion.max.filesize值, 也不会做分割3:HBase中所有行数据的均衡分布问题(region)1)时间连续的数据当处理由连续事件得到的数据时,即时间上连续的数据。这些数据可能来自于某个传感器网络、证券交易或者一个监控系统。它们显著的特点就是rowkey中含有事件发生时间。带来的一个问题便是HBase对于 row
27、 的不均衡分布,它们被存储在一个唯一的rowkey区间中,被称为region,区间的范围被称为Start Key和End Key。对于单调递增的时间类型数据,很容易被散列到同一个Region中,这样它们会被存储在同一个服务器上,从而所有的访问和更新操作都会集中到这一台服务器上,从而在集群中形成一个hot spot,从而不名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 12 页 - - - - - - - - - 能将集群的整体性能发挥出来。要解决这个问题是非常容易的,只
28、需要将所有的数据散列到全部的Region上即可。这是可以做到的,比如,在rowkey前面加上一个非线程序列,常常有如下选择:2) Hash 散列您可以使用一个Hash 前缀来保证所有的行被分发到多个Region服务器上。例如:byte prefix =(byte) (Long.hashCode(timestamp) % );byte rowkey =Bytes.add(Bytes.toBytes(prefix), Bytes.toBytes(timestamp);这个公式可以产生足够的数字,将数据散列到所有的Region服务器上。 当然,公式里假定了Region服务器的数目。如果您打算后期扩容
29、您的集群,那么您可以把它先设置为集群的整数倍。生成的rowkey类似下面:0myrowkey-1,2myrowkey-6, 当他们将按如下顺序被发送到各个Region服务器上去:0myrowkey-10myrowkey-41myrowkey-21myrowkey-5换句话说,对于0myrowkey-1和0myrowkey-4的更新操作会被发送到同一个region服务器上去 (假定它们没有被散列到两个region上去) ,1myrowkey-2和1myrowkey-5会被发送到同一台服务器上。这种方式的缺点是,rowkey的范围必须通过代码来控制,同时对数据的访问, 可能要访问多台region服务器。当然,可以通过多个线程同时访问,来实现并行化的数据读取。这种类似于只有map的MapReduce任务,可以大大增加IO的性能。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 12 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 12 页 - - - - - - - - -