今天部门分享了HBase。发一下自己的稿子
本次分享的开始,想要旧事重提一下,Google被誉为大数据领域的“三驾马车”的那三篇论文:
第一篇是:The google file system
第二篇是:MapReduce:Simplified Data Processing on Large Clusters
第三篇是:2006年发表的 BigTable:A Distributed Storage System for Structured Data. 它介绍了很多BigTable的设计原理,但其实这些原理大多都能在HBase中找到影子。
尽管有微小异同,例如压缩算法,时间戳单位等,但是,HBase实现了BigTable的储存架构。
本次分享会,我会从HBased 的一些特性讲起,并且明确什么样的使用场景和数据场景适用HBase。再简述一下架构与API。最后讲一下实际项目中遇到过的坑。至于如何安装和配置这些就不提了,这个网上都能查到。
为什么想要讲这么多适用场景与特性,因为我觉得,首先我们得明白一个组件、技术的使用场景,那么等到需求到来的时候,我们才能够及时、准确地挑选组件,我觉得这点很重要。最后等到实践场景中,真正需要用这个组件的时候,再进行针对性地熟练与学习,也来得及的。
要想知道 HBase 的用途,就需要看一看其在 Apache 的 Hadoop 生态系统中的位置,可以看到 HBase 是构建在 HDFS 之上的,这是由于 HBase 内部管理的文件全部都是存储在 HDFS 当中的。同时,MapReduce 这个计算框架在 HBase 之上又提供了高性能的计算能力来处理海量数据。
1.HBase简介
前面提到过,HBase是按照BigTable模型实现的,是一个稀疏的、分布式的、持久化的、多维的映射。
那么HBase的特点又有那些呢?
作为大数据组件,它的特点第一就是容量大:
那传统关系型数据库为例,关系型数据库的单表一般不会超过五百万,一旦超过则需要要做分表分库。列数也不会超过30列。
但Hbase单表,就可以有百亿行、百万列。有用数据矩阵,横向,和纵向两个维度。所支持的数据量级也非常具有弹性
面向列:
面向列的存储和权限控制,可以动态增加列。这样的话读的效率也会很高
稀疏性:
为空的列并不占用存储空间,表可以设计的非常稀疏。不必像关系型数据库那样需要预先知道所有列名,然后再进行默认值填充
多版本:
Hbase的每一个列的数据存储有多个Version,也就是timestamp。举个栗子,假如你要存一个人的住址列信息,可能由于搬家,有多个版本变更,所以该列就可以有多个version
拓展性:
底层依赖HDFS,当磁盘空间不足的时候,只需要动态增加datanode&#