`
zy19982004
  • 浏览: 662207 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:252049
社区版块
存档分类
最新评论

Hadoop学习四十一:HBase基础

 
阅读更多

一.概述

      再次学习HBase实战和HBase权威指南时,对HBase了解又深了许多。本文列出一些值得关注的点。

 

二.HBase物理和逻辑存储结构

     

     user表包含两个列族info activity,为此表预分区[1,3) [3,正无穷),此时user表在HBase里的物理和逻辑存储结构如上图。

  1. 一个user表的数据存储在两个region上,这两个region可能在一个RegionServer上,也可能在两个不同的RegionServer上。
  2. 一个RegionServer可以有多个region,这些region共享一个WAL(write-ahead log预写式日志,也称HLog)。
  3. 一个region可以包含多个列族的数据。
  4. 一个列族由一个MemStore,一个BlockCache和多个HFile组成。两个不同列族的MemStore  BlockCache 毫无关系。
  5. 也有书里谈到Store这个概念,实际就是对于一个列族的管辖区域。

三.HBase读写路径

  1.  执行写入时会写到两个地方:WAL和MemStore,只有当这两个地方的变化信息都被成功写入并确认后,才认为写动作完成。MemStore填满(hbase.hregion.memstore.flush.size默认64M,在hbase0.96 habse-default里为128M)后被flush到硬盘,所以客户端的写操作不会与底层的HFile直接交互。
  2. 从HBase中读出一行,首先会检查MemStore等待被flush的数据,其次检查BlockCache是否包含该行的Block信息,最后访问硬盘上的HFile。BlockCache使用LRU算法,缓存的是Block块而非Block所有。

四.客户端写缓冲区

  1. 每一个put操作实际上都是一个RPC操作。当然,HBase的API配备了一个写缓冲区,它负责收集put请求,然后调用RPC操作一次性将put发送给服务器。
  2. 注意这个缓冲区位于客户端,默认情况下是禁用的。HTable的setAutoFlush(false)方法可以将自动刷新autoflush设置为false来激活缓冲区。
    @Override
      public boolean isAutoFlush() {
        return autoFlush;
      }
    Deprecated
      @Override
      public void setAutoFlush(boolean autoFlush) {
        setAutoFlush(autoFlush, autoFlush);
      }
    
      /**
       * {@inheritDoc}
       */
      @Override
      public void setAutoFlushTo(boolean autoFlush) {
        setAutoFlush(autoFlush, clearBufferOnFail);
      }
    
      /**
       * {@inheritDoc}
       */
      @Override
      public void setAutoFlush(boolean autoFlush, boolean clearBufferOnFail) {
        this.autoFlush = autoFlush;
        this.clearBufferOnFail = autoFlush || clearBufferOnFail;
      }
    
     
  3. 也可以配置此缓冲区大小。默认大小为2MB。
    @Override
      public long getWriteBufferSize() {
      }
    public void setWriteBufferSize(long writeBufferSize) throws IOException {
      }
     
  4. 当需要强制把数据写到服务器时,使用
    @Override
      public void flushCommits() throws InterruptedIOException, RetriesExhaustedWithDetailsException {
        // As we can have an operation in progress even if the buffer is empty, we call
        //  backgroundFlushCommits at least one time.
      }
    
     
  5. 此缓冲区没有任何备份,这些数据可能丢失。

五.大小合并 自动分区

     首先要明白一个概念,大小合并是针对HFile,自动分区是针对region。

  1. 当一个region里的存储文件增长到大于配置的hbase.hregion.max.filesize默认256M时,region会被一分为二。关于分区的过程,我还没弄太明白。
  2. 大小合并
    1. 小合并:
      1. 将多个HFile合并成一个HFile。经过读-合并写-删除步骤。
      2. 小合并的文件数量由hbase.hstore.compaction.min默认3且要求大于等于2和hbase.hstore.compaction.max默认10决定。
      3. 小合并的文件大小由hbase.hstore.compaction.min.size默认64M和hbase.hstore.compaction.max.size默认Long.MAX_VALUE决定。hase.hstore.compaction.min.size比较奇葩,小于这个值才被include。既然这样,hbase.hstore.compaction.max.si还有何用?
    2. 大合并:
      1. 将给定region的一个列族的所有HFile合并成一个HFile。
      2. 大合并是HBase清理被删除的唯一机会。如果一个单元的版本超过了最大数量,也会在大合并时删掉。
      3. 触发大合并:shell命令或客户端API;距离上次大合并是否超过hbase.hregion.majorcompaction默认24小时;小合并的文件就是一个列族的所有文件且满足文件大合并大小要求,小合并被提升为大合并。

六.HFile

  1. 我们已经知道HFile的两种来源:由MemStore flush而来,由其它HFile合并而来。所以我们并不知道HFile到底有多大,实际上我们也不需要知道。需要了解的是,HFile只是一个逻辑上的概念,真正存储的是HDFS,而HFile与HDFS的块之间没有匹配关系,HBase把文件透明的存储在HDFS上,如一个HFile232M,将被存储在两个Block上,Block1 128M,Block2 104M。 
  2. HFile块大小64KB怎么理解?先看一个HFile的结构。这里的块指的就是Data块(一系列KeyValue的集合),也就是一个HFile由许多大小为64KB的Data块以及其它项组成。
  3. KeyValue的结构这个比较好理解。通过此图可以看到,如果一个rowkey存在多个版本,每个版本都将对应一个KeyValue,因为它们TimeStamp不同。

 

 

 

      当然HBase还有许多值得深究的地方,后面会不断学习不断更新本文。如有错误,欢迎指出。

 

2
0
分享到:
评论
1 楼 JavaStudyEye 2014-07-02  
先收,在顶,感谢楼主出这个系列的文章啊。

相关推荐

    Hadoop学习四十二:HBase 过滤器

    在Hadoop生态系统中,HBase是一个分布式的、版本化的、基于列族的NoSQL数据库,它提供了高吞吐量的数据访问。本节我们将深入探讨HBase中的过滤器机制,这是优化数据查询性能的关键技术。 HBase过滤器允许我们在读取...

    HBase学习利器:HBase实战

    HBase是Apache Hadoop生态系统中的一个分布式、可扩展的列族数据库,它提供了类似Bigtable的能力,能够在大规模数据集上进行随机读写操作。HBase是基于Hadoop Distributed File System (HDFS)构建的,能够处理PB级别...

    hbase-0.90.5.tar.gz与hadoop0.20.2版本匹配

    HBase是Apache软件基金会开发的一个开源分布式数据库,它是基于Google的Bigtable模型设计的,用于存储大规模结构化数据。HBase构建在Hadoop之上,两者都是Apache Hadoop生态系统的重要组成部分。Hadoop是一个分布式...

    hadoop_hadoop-2.7.2-hbase-jar.rar linux下包

    标题 "hadoop_hadoop-2.7.2-hbase-jar.rar" 提供的信息表明,这是一个与Hadoop相关的压缩文件,具体来说是Hadoop 2.7.2版本的HBase JAR文件。Hadoop是一个开源框架,主要用于分布式存储和处理大数据。而HBase是建立...

    Hadoop2.2+Zookeeper3.4.5+HBase0.96集群环境搭建

    Hadoop2.2+Zookeeper3.4.5+HBase0.96集群环境搭建是大数据处理和存储的重要组件,本文档将指导用户从零开始搭建一个完整的Hadoop2.2+Zookeeper3.4.5+HBase0.96集群环境。 硬件和软件要求 为搭建Hadoop2.2+...

    hbase-hadoop2-compat-1.2.12-API文档-中文版.zip

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

    分布式存储系统hadoop:hbase安装

    分布式存储系统hadoop:hbase安装经验,非常不错的hadoop之hbase,入门环境搭建。

    hbase-hadoop-compat-1.1.3-API文档-中文版.zip

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

    hadoop,hive,hbase学习资料

    2. **Hadoop学习总结之一:HDFS简介.doc**、**Hadoop学习总结之四:Map-Reduce的过程解析.doc**、**Hadoop学习总结之五:Hadoop的运行痕迹.doc**、**Hadoop学习总结之二:HDFS读写过程解析.doc**:这些文档详细介绍...

    hadoop-2.7.2-hbase-jar.tar.gz

    《Hadoop 2.7.2与HBase的集成——深入理解hadoop-2.7.2-hbase-jar.tar.gz》 Hadoop是Apache软件基金会的一个开源项目,它为大规模数据处理提供了一个分布式计算框架。Hadoop的核心包括HDFS(Hadoop Distributed ...

    hbase-hadoop-compat-1.1.3-API文档-中英对照版.zip

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

    hbase-hadoop2-compat-1.1.3-API文档-中文版.zip

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

    大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第11期_HBase简介及安装_V1.0 共21页.pdf

    【大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第11期_HBase简介及安装_V1.0 共21页.pdf】这篇文档主要介绍了HBase这一大数据处理的重要组件,以及其在Hadoop生态系统中的角色。HBase是一个基于列族的...

    论文:HBase: A NoSQL database

    ### HBase: 一种NoSQL数据库 #### 引言与背景 在过去十年中,我们见证了数据爆炸式的增长,如何高效地存储和检索这些数据成为了一项挑战。直到20世纪70年代,我们主要依赖关系型数据库管理系统(RDBMS)来处理数据...

    hbase版本1.2.6,Hadoop版本2.7.1,eclipse链接hbase所需jar包

    2. **Hadoop Common**: 提供Hadoop的基础功能,如网络通信、文件系统API等。例如:`hadoop-common-2.7.1.jar`. 3. **Hadoop HDFS**: 包含对Hadoop分布式文件系统的操作。例如:`hadoop-hdfs-2.7.1.jar`. 4. **...

    3.基于hadoop集群搭建hbase

    Hadoop作为一款能够处理大量数据的基础框架,被广泛应用于各类场景之中。然而,在进行数据分析时,以文件形式存储在Hadoop上的数据往往难以快速检索和访问。为了解决这一问题,HBase应运而生。本文将详细介绍如何...

    zookeeper+hadoop+hbase+hive(集成hbase)安装部署教程(超详细).docx

    jdk1.8.0_131、apache-zookeeper-3.8.0、hadoop-3.3.2、hbase-2.4.12 mysql5.7.38、mysql jdbc驱动mysql-connector-java-8.0.8-dmr-bin.jar、 apache-hive-3.1.3 2.本文软件均安装在自建的目录/export/server/下 ...

    hadoop2.7.1+zk3.5+hbase2.1+phoenix 安装部署环境打包

    在大数据领域,Hadoop、HBase、ZooKeeper和Phoenix是四个非常重要的组件,它们共同构建了一个高效、可扩展的数据处理和存储环境。本压缩包提供了这些组件的安装部署资源,便于快速搭建一个完整的Hadoop2.7.1、ZK3.5...

    HBase安装与配置资源下载:hbase-1.2.6

    在安装HBase 1.2.6时,首先需要一个基础的Hadoop环境,包括HDFS和YARN。以下是基本步骤: 1. **准备环境**:确保系统已经安装了Java开发环境(JDK),并配置好环境变量。 2. **下载HBase**:从官方网站获取HBase ...

    hadoop+hbase集群搭建 详细手册

    2. HBase:HBase是一个基于Hadoop的分布式数据库,用于存储和处理大规模数据。 3. ZooKeeper:ZooKeeper是一个分布式协调服务,用于管理Hadoop和HBase集群。 二、机器集群结构分布 在本文中,我们将使用8台曙光...

Global site tag (gtag.js) - Google Analytics