Hadoop之HBASE

一、HBASE简介

HBase是一个开源的、分布式的,多版本的,面向列的,半结构化的NoSql数据库,提供高性能的随机读写结构化数据的能力。它可以直接使用本地文件系统,也可以使用Hadoop的HDFS文件存储系统。不过,为了提高数据的可靠性和系统的健壮性,并且发挥HBase处理大数据的能力,使用HDFS作为文件存储系统才更为稳妥。

HBase存储的数据从逻辑上来看就像一张很大的表,并且它的数据列可以根据需要动态地增加。除此之外,每个单元(cell,由行和列所确定的位置)中的数据又可以具有多个版本(通过时间戳来区别)。从下图可以看出,HBase还具有这样的特点:它向下提供了存储,向上提供了运算。另外,在HBase之上还可以使用Hadoop的MapReduce计算模型来并行处理大规模数据,这也是它具有强大性能的核心所在。它将数据存储与并行计算完美地结合在一起。

HBase 和 HDFS

HDFS

HBase

HDFS是适于存储大容量文件的分布式文件系统。

HBase是建立在HDFS之上的数据库。

HDFS不支持快速单独记录查找。

HBase提供在较大的表快速查找。

它提供了高延迟批量处理;没有批处理概念。

它提供了数十亿条记录低延迟访问单个行记录(随机存取)。

它提供的数据只能顺序访问。

HBase内部使用哈希表和提供随机接入,并且其存储索引,可将在HDFS文件中的数据进行快速查找。

二、HBASE表结构

HBASE表具有以下特点:

  • 大:一个表可以有上亿行,上百万列

  • 面向列:面向列(族)的存储和权限控制,列(族)独立检索。

  • 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族(row family)。下面是HBASE表的逻辑视图:

在shell客户端展示:

下面依次介绍这些结构:

  • Row key:用来检索记录的主键,类似key-value结构的key。访问hbase table的行,只有三种方式:

    • 通过单个row key访问;

    • 通过row key的range;

    • 全表扫描;

  • 列族:hbase表中的每个列,都属于某个列族,列族属于表结构(必须在使用表之前定义),列不属于(插入数据的时候可以随时添加列),比如上面的infoaddressschool这些属于列族,info:ageinfo:love这些属于列。

  • Cell:row key和列以及时间戳唯一确定的单元,用来存储真实的数据,cell中的数据没有类型,全部是字节码形式存储。

  • 时间戳:每个cell中保存着同一份数据的多个版本,版本通过时间戳来索引。为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。

三、安装运行HBASE

四、shell DDL操作

五、shell DML操作

六、遇到的问题

问题1:

运行hbase shell时报错:

解决方案:

Unable to load native-hadoop library for your platform... using builtin-java classes where applicable这个问题只需要修改conf/hbase-env.sh,加入:

${hadoop_home}为你的hadoop的安装路径。

NotImplementedError: fstat unimplemented unsupported or native support failed to load这个问题的解决方案:

参考:

https://www.cnblogs.com/gaopeng527/p/4967186.html

https://blog.csdn.net/scutshuxue/article/details/6988348

Last updated

Was this helpful?