内容
1.Hbase 是什么?
HBase是一种构建在HDFS之上的分布式、面向列的存储系统。对于超大规模数据集进行实时读写或随机访问时,可以使用HBase。
HBase通过线性方式水平增加节点来进行扩展。HBase不是关系型数据库,也不支持SQL。HBase 是Google Bigtable 的开源实现,与Google Bigtable 利用GFS作为其文件存储系统类似, HBase 利用Hadoop HDFS 作为其文件存储系统;Google 运行MapReduce 来处理Bigtable中的海量数据, HBase 同样利用Hadoop MapReduce来处理HBase中的海量数据, HBase 利用Zookeeper来协调集群环境。
Hbase是Hadoop生态系统的一部分,它提供对Hadoop文件系统中数据的随机实时读/写访问。可以直接或通过HBase将数据存储在HDFS中。 可以使用HBase随机读取/访问HDFS中的数据。 HBase位于Hadoop文件系统之上,提供读写访问。
2. 为什么使用Hbase?
HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.所谓非结构化数据存储就是说HBase是基于列的而不是基于行的模式,HBase是基于key/value的一种数据存储方式,但不仅仅是简单的一个key对应一个 value,很可能需要存储多个属性的数据结构,没有传统数据库表中那么多的关联关系,这就是所谓的松散数据。
可以将HBase中的表看做是一张很大的表,而这个表的属性可以根据需求去动态增加,在HBase中没有表与表之间关联查询。只需要将数据存储到Hbase的对应的column families 。
Hbase 具有如下特点:
-
大:一个表可以有上亿行,上百万列。
-
面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。
-
稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
-
无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列。
-
数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳。
-
数据类型单一:HBase中的数据都是字符串,没有类型。
3. Hbase 和 HDFS 区别
4. HBase中的存储机制
HBase是一个面向列的数据库,其中的表按行排序。 表模式仅定义列族, 表格有多个列族,每个列族可以有任意数量的列。 后续列值连续存储在磁盘上, 且列值没有类型,都是字符串。 表中的每个单元格值都有一个时间戳。 简而言之,在HBase中:
? 表是行的集合;
? 行是列族的集合;
? 列族是列的集合;
? 列是键值对的集合;
下面给出了HBase中表的示例模式:
5. 面向列和面向行的数据库
什么是列存储?列存储不同于传统的关系型数据库,其数据在表中是按列存储的,列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因 此整个数据库是自动索引化的。按列存储每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量,一个字段的数据聚集存储,那就 更容易为这种聚集存储设计更好的压缩/解压算法。
6. Hbase 和 关系型数据库
7. 什么时候使用Hbase?
Apache HBase用于随机实时读取/写入大数据;
可以在普通的硬件服务器集群上运行非常大的表格;
Apache HBase是一个非关系型数据库,类似Google的Bigtable。 Bigtable在Google文件系统上运行,Apache HBase同样在Hadoop和HDFS之上运行;
阿里,Facebook,Twitter,Yahoo和Adobe等公司在内部使用HBase。