`
beijing.josh
  • 浏览: 10133 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HBase的概念和性能选项

阅读更多

在本文中的HBase术语:
基于列:column-oriented
行:row
列组:column families
列:column
单元:cell

 

理解HBase(一个开源的Google的BigTable实际应用)最大的困难是HBase的数据结构概念究竟是什么?首先HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式.

Google's BigTable论文 清楚地解释了什么是BigTable:
Bigtable是一个疏松的分布式的持久的多维排序的map,这个map被行键,列键,和时间戳索引.每一个值都是连续的byte数组.(A Bigtable is a sparse, distributed, persistent multidimensional sorted map. The map is indexed by a row key, column key, and a timestamp; each value in the map is an uninterpreted array of bytes.)

Hadoop wiki的HBase架构 页面提到:
HBase使用和Bigtable非常相同的数据模型.用户存储数据行在一个表里.一个数据行拥有一个可选择的键和任意数量的列.表是疏松的存储的,因此 用户可以给行定义各种不同的列.(HBase uses a data model very similar to that of Bigtable. Users store data rows in labelled tables. A data row has a sortable key and an arbitrary number of columns. The table is stored sparsely, so that rows in the same table can have crazily-varying columns, if the user likes.)

 

实质上,HBase和BigTable是个map.相同于数组(PHP),词典(Pyhton),Hash(Ruby)或者Object (Javascript)中的表现形式.所以每一行是一个map,这个map中还可以有多个map(基于列组).获取一个数据就像你从map中获取数据一 样.给定一个行名(即从这个map中获取数据),然后给定一个key(列组名+限定词)来取得数据.

HBase 和BigTable都是在分布式文件系统上构建的,所以基础的文件存储能够散布在分布式文件系统的机器上.
HBase使用Hadoop's Distributed File System(HDFS) 或 Amazon's Simple Storage Service(S3),Kosmos Distributed File System(KFS), 与此一样BigTable使用Google File System(GFS).数据被复制到多个节点就像数据被存储在一个RAID系统上.

不像大多数的map应用,在HBase和BigTable中,key/value 是非常严格地按字母次序排列的.那就是意味着键值为"aaaaa"的行下一个行的键值为"aaaab",但是和键值为"zzzzz"的行离的很远.因为这 些系统都是非常庞大和分布式的, 这些特性是非常重要的. 空间接近的列保证当你确定要浏览表时, 你感兴趣的行将会靠近这行.当你选择行的键值时,这是非常重要的事情.例子:考虑你表中的列是域名.最好是倒过来的(因此 "com.jimbojw.www"比"www.jimbojw.com"更好) ,因为你的子域名将会靠近你的主域名.注意在HBase中排序仅仅是kay排序,value是不排序的.

在下面的JSON数据中,我们看到整个数据结构是一个map,并且map中每一个key对应一个包含 "A"和"B"的map.假设整个下面数据是一个table,那么它有"1"."aaaaa","aaaab","xyz","zzzzz"这几个行,每 一个行有一个"A"和"B"的map.在HBase的术语中, 称"A"和"B"为列组.

{
  "1" : {
    "A" : "x",
    "B" : "z"
  },
  "aaaaa" : {
    "A" : "y",
    "B" : "w"
  },
  "aaaab" : {
    "A" : "world",
    "B" : "ocean"
  },
  "xyz" : {
    "A" : "hello",
    "B" : "there"
  },
  "zzzzz" : {
    "A" : "woot",
    "B" : "1337"
  }
}

在HBase中一个列组通过限定词或叫做标签使每一个列组能够包含许多的列.

{
  "aaaaa" : {
    "A" : {
      "foo" : "y",
      "bar" : "d"
    },
    "B" : {
      "" : "w"
    }
  },
  "aaaab" : {
    "A" : {
      "foo" : "world",
      "bar" : "domination"
    },
    "B" : {
      "" : "ocean"
    }
  },
  "zzzzz" : {
    "A" : {
      "catch_phrase" : "woot",
    }
    "B" : {
      "" : "1337"
    }
  }
}

在上面的例子中,在"aaaaa"的行中,列组"A"包含两个列:"foo"和"bar",列组"B"仅仅有一个限定词为空字符窜""的列.当我们 向HBase获取数据时,你必须提供完整的列名字"<列组>:<限定词>".因此上面的例子中行"aaaaa"和"aaaab" 都包含三个列:"A:foo", "A:bar"和"B:".尽管在行中列组是固定的,但是同一个列中限定词可以是不同的,就像行"zzzzz"中列组"A"中只有一个列 "catch_phrase".最后的维度是时间戳(timestamp).所有的在HBase中存储的数据都有一个用时间戳表示的版本或者你自己通过指 定时间戳来插入或获取数据.

{
  "aaaaa" : {
    "A" : {
       "foo" : {
        15 : "y",
        4 : "m"
      },
      "bar" : {
        15 : "d",
      }
    },
    "B" : {
      "" : {
        6 : "w"
        3 : "o"
        1 : "w"
      }
    }
  }
}

每一个列可以指定多少版本的数据被保存在每一个单元.在上面的例子中行"aaaaa"的列"A:foo"包含两个倒序时间戳排列的数据15和4,列 "B"包含由三个倒序时间戳排列的数据.一般的应用程序只是简单(不通过时间戳)的请求一个单元的数据.在这种条件下,HBase只是简单地返回最新的版 本,即时间戳最大的版本.要获取"A:foo"返回"y",要获取"B"返回"w".如果应用程序在一个行中请求时带上时间戳,HBase将会返回小于或 等于请求时间戳的数据.接着上面的例子如果程序请求"A:foo"带上时间戳10,返回"m",加上时间戳3,返回null.

每一个行可以多个列族,每一个列族可以包含无数个列,每一个列都可以有一个不同于其他列的时间戳.在通用数据库中当表创建时我们就已经定义了列,如果修改表结构的话会非常困难(比如:添加一列).在HBase中我们可以很轻松地添加一个列族或列.

HBase性能选项:

就像在关系数据库中一样这个列是使用CHAR,VARCHAR或者TEXT一样会影响数据存储和性能一样,HBase性能选项也同样影响着 HBase的性能.在HBase中所有的列在同一个列组中拥有同样的MAX_VERSIONS,MAX_LENGTH,COMPRESSION, IN_MEMORY和BLOOMFILTER特性.

HBase使用Hadoop的MapFile来存储数据和索引,MapFile调用SequenceFile写数据,SequenceFile 可以让你选择如何压缩数据.MapFile的索引文件是采用BLOCK压缩的.数据文件取决于你的设置,在HBase中默认是对列组中的数据不压缩的,但是有两个选项可以让这个列组中的数据压缩:BLOCK和RECORD.

Block压缩,假定你有单独的列包含大块的数据并且你只想保存一个版本的数据.在这种情况下,你可能让这个列组支持Block压缩.因为这种压缩选项为了取得更好的压缩比率压缩多列数据.

RECORD压缩,假定你拥有许多行包含数据,并且每一个列你想要保存多个版本.你可能让这个列组支持RECORD压缩,因为这种压缩会让每一个列的数据连续地在一起.

尽管压缩比率BLOCK压缩比RECORD压缩要更好一些,但是在理论上RECORD压缩的访问时间要更快,因为不需要解压key(HStoreKey)而只是解压value这部分数据.

如果这个列组支持布隆过滤器(BLOOMFILTER),那么在内存中有个索引来快速地判断要查找的列是否存在这个行中,减少磁盘IO操作.如果在这个列组你拥有大量的列,每一个列的数据包含的数据非常小,你可能需要在这个列组中应用布隆过滤器。HBase中Bloom Filter的使用 已经非常清楚地描述描述了布隆过滤器的用法和容错率算法.

IN_MEMORY特性选项,
如果这个列组装载数据到内存,我们将的到将会加快读写的优势.磁盘的读写和内存的读写当然没法相比.劣势是所有的数据装载在内存将会花费我们的内存,还会干预HDFS的备份,因为数据会比往常更少次数往磁盘的写入.

MAX_LENGTH and MAX_VERSIONS列组特性从总体性能来看是非常重要的,但是很少影响实际的功能.实际上上面这两个特性控制每一个单元保存多少版本的数据(默认是3)和每个单元中的版本能够保存多少字节的数据(默认是32位有符号整形).

 

本文基本上从下面网址翻译并加上我自己组织的一些段落,希望能够对大家有所帮助:

Understanding HBase and BigTable
Understanding HBase column-family performance options

 

原文地址:本人维护的站点http://www.hadoop.org.cn/hadoop/explain-hbase-with-performance-options/

4
2
分享到:
评论

相关推荐

    HBase配置文件与HBase doc文档

    2. **hbase-env.sh**:这个脚本用于配置HBase的环境变量,如JVM参数(堆大小、GC设置等)和HBase进程的启动选项。 3. **regionservers**:列出集群中提供服务的RegionServer节点。 4. **masters**:如果配置了主备...

    HBase配置

    配置HBase至关重要,因为它直接影响到系统的性能、稳定性和可扩展性。下面我们将深入探讨HBase的核心配置要素。 1. **HBase配置文件** HBase的配置主要通过`hbase-site.xml`文件进行,此文件位于`$HBASE_HOME/conf...

    Hbase 官方中文文档

    HBase官方中文文档概述了Apache HBase TM的基本概念、配置方法、升级策略、shell使用、数据模型、架构设计、安全机制、API接口、性能调优以及故障排除等多方面的知识。HBase是一个开源的非关系型分布式数据库(NoSQL...

    apache_hbase_reference_guide(官网).pdf

    - **操作和性能配置选项**,提供了优化性能和管理HBase集群的配置建议。 ### 8. 版本和兼容性 - **HBase版本号和兼容性**,解释了版本号的含义以及不同版本之间的兼容性问题。 - **回滚和升级路径**,提供了版本...

    最全面的HBase说明文档

    文档还覆盖了HBase的配置选项,对于操作和性能调整提供了参考规则。这包括了在设计schema时应该注意的点,如RegionServer的大小,列族的数量,行键的设计,版本的数量,支持的数据类型,以及如何使用Time To Live...

    hbase 2.0参考手册

    在性能和操作配置选项方面,HBase 2.0参考手册讨论了如何根据不同的使用场景和需求来优化HBase的性能。手册也提到了特殊情况下的一些配置,帮助用户更好地理解和应用HBase的各种高级特性。 HBase与MapReduce的集成...

    Hadoop3.1.1集成hbase2.1.1

    - hbase.zookeeper.quorum:这是一个指定ZooKeeper集群的配置,定义了ZooKeeper集群中所有机器的主机名和端口,HBase通过它们来协调整个集群的状态。 - hbase.zookeeper.property.dataDir:定义了ZooKeeper用来...

    apache_hbase_reference_guide-3.0.0-SNAPSHOT

    5. Operational and Performance Configuration Options 部分讨论了影响 HBase 操作和性能的配置选项。 6. HBase and MapReduce 部分讲解了如何将 HBase 集成到 MapReduce 作业中,包括 HBase 与 CLASSPATH 的集成...

    Apache HBase ™ Reference Guide

    操作和性能配置选项**:提供了一些关于如何优化HBase操作和性能的建议。 #### 七、HBase 和 MapReduce **44. HBase、MapReduce 和 CLASSPATH** - **45. MapReduce 扫描缓存**:介绍了一种技术,可以在MapReduce...

    HBase 权威指南(HBase The Definitive Guide)

    - **扩展性**:HBase 支持水平扩展,可以通过增加节点来提升系统的整体性能和存储容量。 - **数据模型**:HBase 使用表来组织数据,每个表包含多个行,每行包含多个列族,每个列族又包含多个列,这种多维度的数据...

    大数据HBASE考题材料

    - 高性能:HBase通过内存缓存和索引优化等技术实现了高性能。 - 面向列:如前所述,HBase是面向列的数据库。 - 可伸缩:HBase能够轻松地扩展到数千台服务器,支持PB级别的数据量。 4. **HMaster的功能** - ...

    HBase文档

    HBase提供了丰富的配置选项来调整其行为和性能,常见的配置项包括: - **hbase.cluster.distributed**:是否启用分布式模式。 - **hbase.rootdir**:指定HBase的根目录位置。 - **hbase.regionserver.handler.count...

    Hive、MySQL、HBase数据互导

    3. **列族数据库HBase概念与基本原理**:理解HBase的行、列族、时间戳和Key-Value存储模式,以及HBase的读写流程。 4. **Sqoop工具的使用**:学习使用Sqoop进行数据导入导出,包括连接数据库、定义导入导出参数、...

    Hbase配置所需要的配置文件.zip

    你可以调整`JAVA_HOME`指向你的Java安装目录,以及设置`HBASE_OPTS`以增加堆内存或开启其他性能优化选项。 3. **regionservers**: 文件中列出了集群中的RegionServer节点。每个节点的IP地址或主机名会被写入,...

    hbase详解,apache_hbase_reference_guide

    在操作和性能配置选项方面,了解如何调整相关参数,对系统性能至关重要。指南中会介绍一些特殊情况下的配置选项。 HBase与MapReduce的集成允许用户在Hadoop生态系统中利用HBase强大的数据存储能力,进行大规模数据...

    hbase-0.98.12.1-src.tar.gz

    - `pom.xml`: Maven构建文件,定义了项目的依赖关系和构建过程。 4. **源码学习要点** - **RegionServer**:负责处理客户端请求,管理表的分区。 - **Master**:负责全局协调,如Region分配、RegionServer监控等...

    apache_hbase_reference_guide.pdf

    **知识点一:HBase概念和组件** 1. HBase基础概念:HBase是列式存储的数据库,其数据模型是建立在表、行、列族和时间戳上的。HBase支持可配置的表的水平分区,称为“Region”,这些Region被分布在集群中的多个...

    hbase-operator-tools-master.zip

    6. **命令行选项和报告**:hbck2支持多种命令行选项,允许用户根据需要定制检查范围和行为。它还能生成详细的检查报告,便于分析和解决问题。 使用hbck2时,管理员通常会在发现集群异常、升级HBase版本或者进行大...

Global site tag (gtag.js) - Google Analytics