`

HBase之旅一:HTable基本概念 (转自淘宝Taobao QA Team)

阅读更多

引言
团队中使用HBase的项目多了起来,对于业务人员而言,通常并不需要从头搭建、维护一套HBase的集群环境,对于其架构细节也不一定要深刻理解(交由HBase集群维护团队负责),迫切需要的是快速理解基本技术来解决业务问题。最近在XX项目轮岗过程中,尝试着从业务人员视角去看HBase,将一些过程记录下来,期望对快速了解HBase、掌握相关技术来开展工作的业务人员有点帮助。我觉得作为一个初次接触HBase的业务开发测试人员,他需要迫切掌握的至少包含以下几点:

  • 深入理解HTable,掌握如何结合业务设计高性能的HTable
  • 掌握与HBase的交互,反正是离不开数据的增删改查,通过HBase Shell命令及Java Api都是需要的
  • 掌握如何用MapReduce分析HBase里的数据,HBase里的数据总要分析的,用MapReduce是其中一种方式
  • 掌握如何测试HBase MapReduce,总不能光写不管正确性吧,debug是需要的吧,看看如何在本机单测debug吧
  • 本系列将围绕以上几点展开,篇幅较长,如果是HBase初学者建议边读边练,对于HBase比较熟练的,可以选读下,比如关注下HBase的MapReduce及其测试方法。

    从一个示例说起

    传统的关系型数据库想必大家都不陌生,我们将以一个简单的例子来说明使用RDBMS和HBase各自的解决方式及优缺点。
    以博文为例,RDBMS的表设计如下:
    为了方便理解,我们以一些数据示例下

    上面的例子,我们用HBase可以按以下方式设计
    同样为了方便理解,我们以一些数据示例下,同时用红色标出了一些关键概念,后面会解释

    HTable一些基本概念

  • Row key
  • 行主键, HBase不支持条件查询和Order by等查询,读取记录只能按Row key(及其range)或全表扫描,因此Row key需要根据业务来设计以利用其存储排序特性(Table按Row key字典序排序如1,10,100,11,2)提高性能。

  • Column Family(列族)
  • 在表创建时声明,每个Column Family为一个存储单元。在上例中设计了一个HBase表blog,该表有两个列族:article和author。

  • Column(列)
  • HBase的每个列都属于一个列族,以列族名为前缀,如列article:title和article:content属于article列族,author:name和author:nickname属于author列族。
    Column不用创建表时定义即可以动态新增,同一Column Family的Columns会群聚在一个存储单元上,并依Column key排序,因此设计时应将具有相同I/O特性的Column设计在一个Column Family上以提高性能。

  • Timestamp
  • HBase通过row和column确定一份数据,这份数据的值可能有多个版本,不同版本的值按照时间倒序排序,即最新的数据排在最前面,查询时默认返回最新版本。如上例中row key=1的author:nickname值有两个版本,分别为1317180070811对应的“一叶渡江”和1317180718830对应的“yedu”(对应到实际业务可以理解为在某时刻修改了nickname为yedu,但旧值仍然存在)。Timestamp默认为系统当前时间(精确到毫秒),也可以在写入数据时指定该值。

  • Value
  • 每个值通过4个键唯一索引,tableName+RowKey+ColumnKey+Timestamp=>value,例如上例中{tableName=’blog’,RowKey=’1’,ColumnName=’author:nickname’,Timestamp=’ 1317180718830’}索引到的唯一值是“yedu”。

  • 存储类型
  • TableName 是字符串
    RowKey 和 ColumnName 是二进制值(Java 类型 byte[])
    Timestamp 是一个 64 位整数(Java 类型 long)
    value 是一个字节数组(Java类型 byte[])。

  • 存储结构
  • 可以简单的将HTable的存储结构理解为

    即HTable按Row key自动排序,每个Row包含任意数量个Columns,Columns之间按Column key自动排序,每个Column包含任意数量个Values。理解该存储结构将有助于查询结果的迭代。

    话说什么情况需要HBase

  • 半结构化或非结构化数据
  • 对于数据结构字段不够确定或杂乱无章很难按一个概念去进行抽取的数据适合用HBase。以上面的例子为例,当业务发展需要存储author的email,phone,address信息时RDBMS需要停机维护,而HBase支持动态增加.

  • 记录非常稀疏
  • RDBMS的行有多少列是固定的,为null的列浪费了存储空间。而如上文提到的,HBase为null的Column不会被存储,这样既节省了空间又提高了读性能。

  • 多版本数据
  • 如上文提到的根据Row key和Column key定位到的Value可以有任意数量的版本值,因此对于需要存储变动历史记录的数据,用HBase就非常方便了。比如上例中的author的Address是会变动的,业务上一般只需要最新的值,但有时可能需要查询到历史值。

  • 超大数据量
  • 当数据量越来越大,RDBMS数据库撑不住了,就出现了读写分离策略,通过一个Master专门负责写操作,多个Slave负责读操作,服务器成本倍增。随着压力增加,Master撑不住了,这时就要分库了,把关联不大的数据分开部署,一些join查询不能用了,需要借助中间层。随着数据量的进一步增加,一个表的记录越来越大,查询就变得很慢,于是又得搞分表,比如按ID取模分成多个表以减少单个表的记录数。经历过这些事的人都知道过程是多么的折腾。采用HBase就简单了,只需要加机器即可,HBase会自动水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce)。

    小结

    本文主要介绍了一些HTable的基本概念,通过示例和图解及与RDBMS的对比以方便加深理解,读完此文应该对HTable的设计和结构及什么时候应该使用HBase有一定的认识,在下篇文章中将通过操作练习来加深这方面的知识。

    分享到:
    评论

    相关推荐

      HBase基本操作 Java代码

      HBase基本操作 增删改查 java代码 要使用须导入对应的jar包

      HBase数据库设计.doc

      1. HBase有哪些基本的特征? 1 HBase特征: 1 2. HBase相对于关系数据库能解决的问题是什么? 2 HBase与关系数据的区别? 2 HBase与RDBMS的区别? 2 3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等 3 1...

      HBase-SparkStreaming:从HBase表读取并写入HBase表的简单Spark Streaming项目

      创建一个要写入的hbase表:a)启动hbase shell $ hbase shell b)创建表create'/ user / chanumolu / sensor',{NAME =>'data'},{NAME =>'alert'},{ NAME =>'stats'} #执行: 第1步:MVN全新安装 步骤2:启动流...

      Apache HBase Primer

      网上的HBase书都比较老了,这是目前为止最新版本的HBase电子书。 Part I: Core Concepts Chapter 1: Fundamental Characteristics Chapter 2: Apache HBase and HDFS Chapter 3: Application Characteristics...

      HBase学习利器:HBase实战

      HBase开发实战,HBase学习利器:HBase实战

      Hadoop原理与技术Hbase的基本操作

      一、实验目的 上机实操,熟悉指令操作Hbase和java代码操作Hbase 二、实验环境 Windows 10 VMware Workstation Pro虚拟机 Hadoop环境 Jdk1.8 三、实验内容 1:指令操作Hbase (1):start-all.sh,启动所有进程 (2):...

      hbase orm simplehbase v1.0

      insert,update支持: 建立在hbase的checkAndPut之上。 hbase多版本支持:提供接口可以对hbase多版本数据进行查询,映射。 hbase批量操作支持。 hbase原生接口支持。 HTablePool管理。 HTable count和sum功能。

      实验三:熟悉常用的HBase操作

      A.3实验三:熟悉常用的HBase操作 本实验对应第5章的内容。 A.3.1 实验目的 (1)理解HBase在Hadoop体系结构中的角色。(2)熟练使用HBase操作常用的 Shell命令。(3)熟悉HBase操作常用的 Java API。 A.3.2 实验平台 (1...

      Hbase权威指南(HBase: The Definitive Guide)

      如果你正在寻找一种具备可伸缩性的存储解决方案来适应几乎没有穷尽的数据的话,这本书将可以向你表明apache hbase完全能够满足你的需求。作为google bigtable架构的开源实现,hbase能够支持数以十亿计的记录数和数以...

      hbase-common-1.4.3-API文档-中文版.zip

      Maven坐标:org.apache.hbase:hbase-common:1.4.3; 标签:apache、common、hbase、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...

      hbase-cdh5:Hbase-cloudera Docker

      CDH版本:cdh5.1 java:jdk7u67(64位) HBase模式:伪分布式裸露端口动物园管理员服务器:2181 hbase-master:65000 hbase-master Web UI:65010 hbase-regionserver:65020 hbase-regionserver Web UI:65030如何...

      Hbase笔记 —— 利用JavaAPI的方式操作Hbase数据库(往hbase的表中批量插入数据).pdf

      Hbase笔记 —— 利用JavaAPI的方式操作Hbase数据库(往hbase的表中批量插入数据)

      HBase视频教程下载|基于微博数据应用的HBase实战开发

      当数据量达到TB或PB级的时候,传统关系型数据型已力不从心。在大数据热潮中,推出了NoSQL数据库,这种天生就为分布式存储而设计的技术...课时34:高亮查询功能开发之一 课时35:高亮查询功能开发之二 课时36:课程总结

      hbase-annotations-1.1.2-API文档-中文版.zip

      Maven坐标:org.apache.hbase:hbase-annotations:1.1.2; 标签:apache、annotations、hbase、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。...

      hbase java api 访问 增加修改删除(一)

      hbase java api 访问 增加修改删除(一) 详情请看:http://blog.csdn.net/wild46cat/article/details/53306621

      centos7 安装 hbase单机版

      首先下载hbase安装包 wget http://mirror.bit.edu.cn/apache/hbase/stable/hbase-2.2.3-bin.tar.gz 解压压缩包 tar -zxvf hbase-2.2.3-bin.tar.gz 修改/opt/hbase-2.2.3/conf/hbse-env.sh文件 第一步 设置javahome ...

      NoSQL性能评估(MongoDB,HBase,Cassandra):哪种数据库最适合你的数据?

      非关系数据库(经常被称为NoSQL)的特点是弹性和可伸缩性。另外,它们可以存储大数据并与云计算系统协同工作。这些因素导致非关系数据库非常流行。在2013年,NoSQL数据库的种类达到了150多个,并且一直在增长,多种...

      HBase轻量级中间件simplehbase.zip

      simplehbase是java和hbase之间的轻量级中间件。... insert,update支持: 建立在hbase的checkAndPut之上。    hbase多版本支持:提供接口可以对hbase多版本数据进行查询,映射。 标签:simplehbase

      hbase的shell操作

      这里详细介绍了hbase的命令行操作,版本信息的一些管理

      大数据安全-kerberos技术-hbase安装包,hbase版本:hbase-2.2.6-bin.tar.gz

      大数据安全-kerberos技术-hbase安装包,hbase版本:hbase-2.2.6-bin.tar.gz

    Global site tag (gtag.js) - Google Analytics