codecamp

HBase架构概述

HBase架构概述

NoSQL

HBase是一种“NoSQL”数据库。“NoSQL”是一个通用术语,意思是数据库不是支持SQL作为其主要访问语言的RDBMS,但是有许多类型的NoSQL数据库:BerkeleyDB是本地NoSQL数据库的一个例子,而HBase是一个分布式数据库。从技术上讲,HBase实际上更像是一个“数据存储”而不是“数据库”,因为它缺少在RDBMS中找到的许多功能,例如键入列,二级索引,触发器和高级查询语言等。

但是,HBase具有很多支持线性和模块化缩放的功能。通过添加商品类服务器上托管的RegionServers来扩展HBase集群。例如,如果一个集群从10个扩展到20个RegionServers,则它在存储和处理能力方面都会翻倍。RDBMS可以很好地扩展,但只能达到某一点 - 具体而言就是单个数据库服务器的大小 - 并且为了获得最佳性能,需要专门的硬件和存储设备。HBase的特点是:

  • 一致的读/写:HBase不是“最终一致的”DataStore。这使它非常适合诸如高速计数器聚合之类的任务。
  • 自动分片:HBase表通过区域分布在集群上,随着数据增长,区域会自动分割和重新分配。
  • 自动RegionServer故障切换
  • Hadoop/HDFS集成:HBase支持HDFS作为其分布式文件系统。
  • MapReduce:HBase支持通过MapReduce进行大规模并行处理,以便将HBase用作源和接收器。
  • Java客户端API:HBase支持易于使用的Java API进行编程式访问。
  • Thrift/REST API:HBase还支持非Java前端的Thrift和REST。
  • 块缓存和Bloom过滤器:HBase支持块缓存和Bloom过滤器,以实现高容量查询优化。
  • 操作管理:HBase提供内置的网页以提供运营洞察力以及JMX指标。

何时使用HBase

HBase不适合所有问题。

首先,确保你有足够的数据。如果你有数亿或数十亿行,那么HBase是一个很好的选择。如果只有几千行,那么使用传统的RDBMS可能是一个更好的选择,因为所有数据都可能在单个节点(或两个)上,而群集的其余部分可能处于闲置状态。

其次,确保您可以在没有RDBMS提供的所有额外功能的情况下生存(例如,键入列,二级索引,事务,高级查询语言等)。针对RDBMS构建的应用程序无法通过简单更改而“移植”到HBase,例如,一个JDBC驱动程序。考虑从RDBMS转移到HBase作为一个完整的重新设计,而不是一个端口。

第三,确保你有足够的硬件。即使是HDFs也不能很好地处理少于5个的数据流(由于HDFS块复制的默认值为3),加上NAMENODE。

HBase可以在笔记本电脑上独立运行 - 但这应该只被视为一种开发配置。

HBase和Hadoop / HDFS有什么区别?

HDFS是一个非常适合存储大型文件的分布式文件系统。它的文档指出,它不是一个通用的文件系统,也没有在文件中提供快速的单个记录查找。另一方面,HBase建立在HDFS之上,为大型表提供快速记录查找(和更新)。这有时会成为概念混淆的一个观点。HBase内部将您的数据放入HDFS上的索引“StoreFiles”中进行高速查找。有关HBase如何实现其目标的更多信息,请参阅数据模型和本章的其余部分。

HBase安全配置示例
HBase目录表
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

HBase快速入门

HBase批量加载

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }