HBase简介

HBase概念

  • HBase的原型是谷歌的Bigtable论文
  • HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC上搭建起大规模结构化存储集群
  • HBase的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据

HBase特点

  • 海量存储

    • HBase适合存储PB级的海量数据,在PB级别的数据以及采用廉价机器存储的情况下,能在几十到百毫秒内返回数据
  • 列式存储

    • 此处的列式存储指的是列族存储,HBase是根据列族来存储数据的。列族下面可以有多个列,但是在创建表的时候必须指定列族
  • 易扩展性

    • HBase的扩展性主要体现在两个地方,一个是基于上层处理能力的扩展,一个是基于存储的扩展(HDFS),通过横向添加RegionServer的机器进行水平扩展,提升HBase上层的处理能力,提升HBase服务更多Region的能力

    注意:RegionServer的作用是管理region、承接业务的访问。通过横向添加DataNode的机器,进行存储层扩容,提升HBase的数据存储能力和提升后端存储的读写能力

  • 高并发

    • 在并发的情况下,HBase的单个IO延迟下降并不多,能获得高并发、低延迟的服务
  • 稀疏

    • 主要针对HBase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,不占用存储空间

HBase架构

组件介绍

  1. Client

    ​ Client包含了访问HBase的接口,另外Client还维护了对应的cache来加速HBase的访问,比如说cache的meta元数据的信息

  2. Zookeeper

    ​ HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。

    ​ Zookeeper的工作如下:

    • 通过Zookeeper来保证集群中只有一个master在运行,如果master异常,会通过竞争机制产生新的master提供服务

    • 通过Zookeeper来监控RegionServer的状态,当RegionServer有异常的时候,通过回调的形式通知Master RegionServer上下线的信息

    • 通过Zookeeper存储元数据的统一入口地址

  3. Hmaster

    • 为RegionServer分配Region

    • 维护整个集群的负载均衡

    • 维护集群的元数据信息

    • 当发现失效的Region时,并将失效的Region分配到正常的RegionServer上

    • 当RegionServer失效时,协调对应Hlog的拆分

  4. HRegionServer

    HRegionServer直接对接用户的读写请求,其实是真正“干活”的节点。

    HRegionServer的功能如下:

    • 管理master为它分配的Region
    • 处理来自客户端的读写请求
    • 负责和底层HDFS交互,存储数据到HDFS
    • 负责Region变大以后的拆分
    • 负责StoreFile的合并工作
  5. HDFS

    HDFS为HBase提供最终的底层数据存储服务,同时为HBase提供高可用(HLog存储在HDFS)的支持

    HDFS具体功能概括如下:

    • 提供元数据和表数据的底层分布式存储服务
    • 数据多副本,保证高可靠和高可用性

HBase中的角色

  1. HMaster

    • 监控RegionServer
    • 处理RegionServer故障转移
    • 处理元数据的变更
    • 处理Region的分配或转移
    • 在空闲时间进行数据的负载均衡
    • 通过Zookeeper将元数据的位置发送给客户端
  2. RegionServer

    • 负责存储HBase的实际数据
    • 处理分配给它的Region
    • 刷新缓存到HDFS
    • 维护HLog(一个RegionServer有一个HLog)
    • 执行压缩
    • 负责处理Region分片(自动分片)

    其他组件

    • Write-Ahead logs(WAL)

      HBase的修改记录,当对HBase读写数据的时候,数据并不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,解决这个问题,数据会先写入一个叫做Write-Ahead logfile 的文件中,然后再写入内存中。在系统出现故障的时候,数据可以通过这个日志文件重建

    • Region

      HBase表的分片,HBase表会根据RowKey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个不同的region

    • Store

      HFile存储在Store中,一个Store对应HBase表中的一个列族

    • MemStore

      内存存储,用来保存当前的数据操作,当数据保存在WAL中之后,RegionServer会在内存中存储键值对

    • HFile

      磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以HFile的形式存储在HDFS的


    HBase安装

    后期会专门写大数据平台各类组件的具体安装笔记


  3. HBase的Shell操作

    进入HBase客户端命令行(任意节点均可)

    bin/hbase shell

    查看帮助命令(命令需要在进入客户端之后才能生效)

    help

    查看当前数据库中的所有表

    list

    创建表

    create 'student','info' (创建表时必须指定列族)

    插入数据到表中

    put 'student','1001','info:sex','male'
    put 'student','1001','info:age','18'
    put 'student','1002','info:name','Tom'
    put 'student','1002','info:sex','female'
    put 'student','1002','info:age','20'

    扫描查看表数据

    scan 'student'
    scan 'student',{STARRROW => '1001',STOPROW => '1002'}
    scan 'student',{STARTROW => '1001'}

    查看表结构

    describe 'student'

    更新指定字段的数据

    put 'student','1001','info:name','Nick'
    put 'student','1001','info:age','30'

    查看“指定行”或“指定列族:列”的数据

    get 'student','1001'
    get 'student','1001','info:name'

    统计表数据行数

    count 'student'

    删除数据

    (删除某个rowkey的全部数据)deleteall 'student','1001'
    (删除某个rowkey的某一列数据)delete 'student','1002','info:sex'

    清空表数据(表结构仍然保留)

    truncate 'student' (注:清空表的操作顺序是先disable,后truncate)

    删除表

    第一步:disable 'student'
    第二步:drop 'student'

    变更表信息

    将info列族中的数据存放3个版本
    alter 'student',{NAME=>'info',VERSIONS=>3}
    get 'student','1001',{COLUMN=>'info:name',VERSIONS=>3}

HBase数据结构

  1. RowKey — 行键

    Rowkey用来检索记录的主键,访问HBase表中的行只有三种方式

    • 通个单个RowKey访问
    • 通过RowKey的range
    • 全表扫描

    RowKey行键可以是任意字符串(最大长度是64KB,实际应用一般为10-100bytes)在HBase内部,Rowkey保存为字节数组。在存储的时候,数据按照RowKey的字典序排序存储。设计RowKey时,要充分利用排序存储这个特性,把经常读取的行存储在一起(位置相关性)

  2. Column Family — 列族

    HBase表中的每个列都归属于某一个列族。列族是表的schema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀,比如course:math course:english 是属于course这个列族的

  3. Time Stamp

    HBase中通过RowKey和Column确定的一个存储单元称为cell。cell中的数据是没有类型的,全部以字节数组的形式存储。每个cell都保存着同一份数据的多个版本,版本通过通过时间戳来索引。时间戳的类型是64位整型。时间戳可以有HBase(在数据写入时自动)赋值。此时的时间戳是精确到毫秒的系统当前时间。时间戳也可以由客户显示赋值。如果因果那个程序要避免数据版本冲突,必须自己生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,最新的数据排在最前面

    为了避免数据存在过多版本造成的管理负担,HBase提供两种数据版本回收方式

    • 保存数据的最后N个版本
    • 保存最近一段时间内的版本
  4. 命名空间

    命名空间的结构

    • Table:所有的表都是命名空间的成员,表必须属于某个命名空间,如果没有指定,则表在默认的命令空间中
    • RegionServer Group:一个命名空间包含默认的RegionServer Group
    • Permission:权限,命名空间允许自定义访问控制列表 (创建表,读表,删除,更新等)
    • Quota:限额,强制一个命名空间能包含的region的数量

There's no losing only learning

There's no falture only opportunities

There's no problem only solutions

HBase学习笔记一的更多相关文章

  1. HBase学习笔记之HBase的安装和配置

    HBase学习笔记之HBase的安装和配置 我是为了调研和验证hbase的bulkload功能,才安装hbase,学习hbase的.为了快速的验证bulkload功能,我安装了一个节点的hadoop集 ...

  2. HBASE学习笔记(四)

    这两天把要前几天的知识点回顾一下,接下来我会用自己对知识点的理解来写一些东西 一.知识点回顾 1.hbase集群启动:$>start-hbase.sh ===>hbase-daemon.s ...

  3. HBase学习笔记之BulkLoad

    HBase学习之BulkLoad bulkload的学习以后再写文章. 参考资料: 1.https://blog.csdn.net/shixiaoguo90/article/details/78038 ...

  4. HBase学习笔记之HBase原理和Shell使用

    HBase学习指南之HBase原理和Shell使用 参考资料: 1.https://www.cnblogs.com/nexiyi/p/hbase_shell.html,hbase shell

  5. HBase学习笔记(四)—— 架构模型

    在逻辑上,HBase 的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列. 但从 HBase 的底层物理存储结构(K-V)来看,HBase 更像是一个 multi-dimensional m ...

  6. Hbase学习笔记01

    最近做项目接触到了HDFS.mapreduce以及Hbase,有了实战机会,今天打算将这些知识好好总结下,以备不时之需.首先从Hbase开始吧. Hbase是建立在HDFS上的分布式数据库,下图是Hb ...

  7. HBase学习笔记-高级(一)

    HBase1. hbase.id记录了集群的唯一标识:hbase.version记录了文件格式的版本号2. split和.corrupt目录在日志分裂过程中使用,以便保存一些中间结果和损坏的日志在表目 ...

  8. HBASE学习笔记--API

    HBaseConfiguration HBaseConfiguration是每一个hbase client都会使用到的对象,它代表的是HBase配置信息.它有两种构造方式: public HBaseC ...

  9. Hbase—学习笔记(一)

    此文的目的: 1.重点理解Hbase的整体工作机制 2.熟悉编程api,能够用来写程序 1.  什么是HBASE 1.1.   概念特性 HBASE是一个数据库----可以提供数据的实时随机读写 HB ...

随机推荐

  1. 如何将svg转换为xaml

    原文:如何将svg转换为xaml 1 下载Inkscape 2 用Inkscape打开svg,另存为xaml 注意:复杂的svg图转换完会出现类似下面的xaml,wpf/silverlight是无法解 ...

  2. Win10版《芒果TV》获评2016年度Windows Store最佳官方/休闲娱乐应用(LiveSino和微软信仰中心联合评选)

    微软信仰中心于2016年12月9日联合了 LiveSino 进行了最佳 Windows Store 应用特辑的投票评选,通过为期20天的海量用户投票,Win10版<芒果TV>荣获最佳官方应 ...

  3. PHPEXCEL 不能输出中文内容,只显示空白

    以他带的示例文件为例 01simple-download-xls.php // Add some data $objPHPExcel->setActiveSheetIndex(0)        ...

  4. Mac App Store应用签名和pkg签名(必须签名后才能销售)

    App签名 只有用苹果颁发的证书签名的应用才能在App Store上进行销售,所以我们开发的应用必须打上签名. 签名有两种方式,一是使用Xcode,在配置里面设置签名,编译出来的app就有了签名:二是 ...

  5. 【Windows10 IoT开发系列】配置篇

    原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...

  6. PHPstudy + phpstrom +xdebug 断点调试(windows) - CSDN博客

    原文:PHPstudy + phpstrom +xdebug 断点调试(windows) - CSDN博客 php.ini 配置 需要添加如下内容 [XDebug]xdebug.profiler_ou ...

  7. UBUNTU 16.04 + CUDA8.0 + CUDNN6.0 + OPENCV3.2 + MKL +CAFFE + tensorflow

    首先说一下自己机子的配置 CPU:Intel(R) Core(TM) i5-5600 CUP @3.20GHz *4 GPU : GTX 1060 OS : 64bit Ubuntu16.04LTS ...

  8. QT5.7静态编译(使用VS2013与VS2015编译,XP可用,有详细configure脚本。VS下Qt插件的配置。编译选项加上-mp可以开启多线程编译,编译速度提高2倍以上)

    http://blog.csdn.net/u011964923/article/details/52886908 configure -confirm-license -opensource -pla ...

  9. jqGrid使用经验分享(一)——jqGrid简单使用、json格式和jsonReader介绍

    广大的读者朋友们大家好,很高兴又可以在博客中和大家分享我的开发经验了. 此次,我准备向大家介绍一个非常好用的jQuery表格插件——jqGrid. 如果您在实际项目中遇到web端表格展示功能的需求,又 ...

  10. 八大排序算法 JAVA实现 亲自测试 可用!

    今天很高兴 终于系统的实现了八大排序算法!不说了 直接上代码 !代码都是自己敲的, 亲测可用没有问题! 另:说一下什么是八大排序算法: 插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序 归并排 ...