简介
Apache HBase 2.0.4 已发布,HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。
HBase 2.0.4 主要修复了 2.0.3 和 2.1.1 版本中 HBASE-21551 Bug。此外还包括 31 项 Bug 修复。
Apache HBase 2.0.4更新日志
增量为零时删除TODO
list_quotas应该为LIMIT打印人类可读的值
使用maven enforcer禁止从非法包中导入
稍微优化StoreScanner中的trySkipToNextColumn
重新启动整个群集时,空元日志不会被拆分
(2.0)添加HBase Canary忽略可配置数量的ZooKeeper down节点的能力
更多更新... (https://apache.org/dist/hbase/2.0.4/CHANGES.md)
HBase使用场景
虽然HBase是一种绝佳的工具,但我们一定要记住,它并非银弹。HBase并不擅长传统的事务处理程序或关联分析,它也不能完全替代MapReduce过程中使用到的HDFS。从文末的成功案例中你可以大致了解HBase适用于怎样的应用场景。如果你还有疑问,可以到社区中提问,我说过这是一个非常棒的社区。
除去上述限制之外,你为何要选择HBase呢?如果你的应用程序中,数据表每一行的结构是有差别的,那就可以考虑使用HBase,比如在标准化建模的过程中使用它;如果你需要经常追加字段,且大部分字段是NULL值的,那可以考虑HBase;如果你的数据(包括元数据、消息、二进制数据等)都有着同一个主键,那就可以使用HBase;如果你需要通过键来访问和修改数据,使用HBase吧。
后台服务
如果你已决定尝试一下HBase,那以下是一些部署过程中的提示。HBase会用到一些后台服务,这些服务非常关键。如果你之前没有了解过ZooKeeper,那现在是个好时候。HBase使用ZooKeeper作为它的分布式协调服务,用于选举Master等。随着HBase的发展,ZooKeeper发挥的作用越来越重要。另外,你需要搭建合适的网络基础设施,如NTP和DNS。HBase要求集群内的所有服务器时间一致,并且能正确地访问其它服务器。正确配置NTP和DNS可以杜绝一些奇怪的问题,如服务器A认为当前是明天,B认为当前是昨天;再如Master要求服务器C开启新的Region,而C不知道自己的机器名,从而无法响应。NTP和DNS服务器可以让你减少很多麻烦。
我前面提到过,在考虑是否使用HBase时,需要针对你自己的应用场景来进行判别。而在真正使用HBase时,监控则成了第一要务。和大多数分布式服务一样,HBase服务器宕机会有多米诺骨牌效应。如果一台服务器因内存不足开始swap数据,它会失去和Master的联系,这时Master会命令其他服务器接过这部分请求,可能会导致第二台服务器也发生宕机。所以,你需要密切监控服务器的CPU、I/O以及网络延迟,确保每台HBase服务器都在良好地工作。监控对于维护HBase集群的健康至关重要。
HBase架构最佳实践
当你找到了适用场景,并搭建起一个健康的HBase集群后,我们来看一些使用过程中的最佳实践。键的前缀要有良好的分布性。如果你使用时间戳或其他类似的递增量作为前缀,那就会让单个Region承载所有请求,而不是分布到各个Region上。此外,你需要根据Memstore和内存的大小来控制Region的数量。RegionServer的JVM堆内存应该控制在12G以内,从而避免过长的GC停顿。举个例子,在一台内存为36G的服务器上部署RegionServer,同时还运行着DataNode,那大约可以提供100个48M大小的Region。这样的配置对HDFS、HBase、以及Linux本身的文件缓存都是有利的。
其他一些设置包括禁用自动合并机制(默认的合并操作会在HBase启动后每隔24小时进行),改为手动的方式在低峰期间执行。你还应该配置数据文件压缩(如LZO),并将正确的配置文件加入HBase的CLASSPATH中。
非适用场景
上文讲述了HBase的适用场景和最佳实践,以下则是一些需要规避的问题。比如,不要期许HBase可以完全替代关系型数据库——虽然它在许多方面都表现优秀。它不支持SQL,也没有优化器,更不能支持跨越多条记录的事务或关联查询。如果你用不到这些特性,那HBase将是你的不二选择。
在复用HBase的服务器时有一些注意事项。如果你需要保证HBase的服务器质量,同时又想在HBase上运行批处理脚本(如使用Pig从HBase中获取数据进行处理),建议还是另搭一套集群。HBase在处理大量顺序I/O操作时(如MapReduce),其CPU和内存资源将会十分紧张。将这两类应用放置在同一集群上会造成不可预估的服务延迟。此外,共享集群时还需要调低任务槽(task slot)的数量,至少要留一半的CPU核数给HBase。密切关注内存,因为一旦发生swap,HBase很可能会停止心跳,从而被集群判为无效,最终产生一系列宕机。
总结
最后要提的一点是,在加载数据到HBase时,应该使用MapReduce+HFileOutputFormat来实现。如果仅使用客户端API,不仅速度慢,也没有充分利用HBase的分布式特性。
用一句话概述,HBase可以让你用键来存储和搜索数据,且无需定义表结构。
---------------END----------------
后续的内容同样精彩
领取专属 10元无门槛券
私享最新 技术干货