1、什么是Hbase
  HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,
  hbase是列式的分布式数据库

  1.2、HBASE优势:
    1)线性扩展,随着数据量增多可以通过节点扩展进行支撑
    2)数据存储在hdfs上,备份机制健全
    3)通过zookeeper协调查找数据,访问速度块

  1.3、hbase集群中的角色
    1、一个或者多个主节点,Hmaster
    2、多个从节点,HregionServer

  1.4、Row Key
    与nosql数据库们一样,row key是用来检索记录的主键。访问HBASE table中的行,只有三种方式:
      1.通过单个row key访问
      2.通过row key的range(正则)
      3.全表扫描
    1.4.1Row key行键

      Row key可以是任意字符串(最大长度 是 24KB,实际应用中长度一般为 10-100bytes),
    在HBASE内部,row key保存为字节数组。存储时,数据按照Row key的字典序(byte order)排序存储。
    设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)
    1.4.2. Columns Family
      列簇 :HBASE表中的每个列,都归属于某个列族。列族是表的schema的一部 分(而列不是),必须在使用表
      之前定义。列名都以列族作为前缀。例如 courses:history,courses:math都属于courses 这个列族。
    1.4.3. Cell
      由{row key, columnFamily, version} 唯一确定的单元。cell中 的数据是没有类型的,全部是字节码
      形式存贮。关键字:无类型、字节码
    1.4.4. Time Stamp
      HBASE 中通过rowkey和columns确定的为一个存贮单元称为cell。每个 cell都保存 着同一份数据的多个
      版本。版本通过时间戳来索引。时间戳的类型是 24位整型。时间戳可以由HBASE(在数据写入时自动 )赋值
      ,此时时间戳是精确到毫秒 的当前系统时间。时间戳也可以由客户显式赋值。

  1.5. 命令
    名称 命令表达式
      创建表 create '表名', '列族名1','列族名2','列族名N'
      查看所有表 list
      描述表 describe ‘表名’
      判断表存在 exists '表名'
      判断是否禁用启用表 is_enabled '表名' is_disabled ‘表名’
      添加记录 put ‘表名’, ‘rowKey’, ‘列族 : 列‘ , '值'
      查看记录rowkey下的所有数据 get '表名' , 'rowKey'
      查看表中的记录总数 count '表名'
      获取某个列族 get '表名','rowkey','列族'
      获取某个列族的某个列 get '表名','rowkey','列族:列’
      删除记录 delete ‘表名’ ,‘行名’ , ‘列族:列'
      删除整行 deleteall '表名','rowkey'

      删除一张表 先要屏蔽该表,才能对该表进行删除
      第一步 disable ‘表名’ ,第二步 drop '表名'
      清空表 truncate '表名'
      查看所有记录 scan "表名"
      查看某个表某个列中所有数据 scan "表名" , {COLUMNS=>'列族名:列名'}
      更新记录 就是重写一遍,进行覆盖,hbase没有修改,都是追加

2、hbase依赖zookeeper
  1、 保存Hmaster的地址和backup-master地址
    hmaster:
      a) 管理HregionServer
      b) 做增删改查表的节点
      c) 管理HregionServer中的表分配
  2、 保存表-ROOT-的地址
    hbase默认的根表,检索表。
  3、 HRegionServer列表
    表的增删改查数据。
    和hdfs交互,存取数据

3、Hbase原理
  3.1.写流程
    1、 client向hregionserver发送写请求。
    2、 hregionserver将数据写到hlog(write ahead log)。为了数据的持久化和恢复。
    3、 hregionserver将数据写到内存(memstore)
    4、 反馈client写成功。

  3.2、数据flush过程
    1、 当memstore数据达到阈值(默认是64M),将数据刷到硬盘,将内存中的数据删除,同时删除Hlog中的历史数据。
    2、 并将数据存储到hdfs中。
    3、 在hlog中做标记点。

  3.3.数据合并过程
    1、 当数据块达到4块,hmaster将数据块加载到本地,进行合并
    2、 当合并的数据超过256M,进行拆分,将拆分后的region分配给不同的hregionserver管理
    3、 当hregionser宕机后,将hregionserver上的hlog拆分,然后分配给不同的hregionserver加载,修改.META.
    4、 注意:hlog会同步到hdfs

  3.4.hbase的读流程
    1、 通过zookeeper和-ROOT- .META.表定位hregionserver。
    2、 数据从内存和硬盘合并后返回给client
    3、 数据块会缓存

  3.5.hmaster的职责
    1、管理用户对Table的增、删、改、查操作;
    2、记录region在哪台Hregion server上
    3、在Region Split后,负责新Region的分配;
    4、新机器加入时,管理HRegion Server的负载均衡,调整Region分布
    5、在HRegion Server宕机后,负责失效HRegion Server 上的Regions迁移

  3.6.hregionserver的职责
    HRegion Server主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBASE中最核心的模块。
    HRegion Server管理了很多table的分区,也就是region。

  3.7.client职责
    Client
    HBASE Client使用HBASE的RPC机制与HMaster和RegionServer进行通信
    管理类操作:Client与HMaster进行RPC;
    数据读写类操作:Client与HRegionServer进行RPC

  3.8.Hbase表结构:
    建表时,不需要限定表中
    字段,只需要指定若干列族
    插入数据时候,列族中可以存储任意多个
    列(kv,列名&列值)
    要查询某个具体字段的值,需要指定的
    坐标:表名——>行键——>列族:列名——>版本——>

  Hmaster:不负责存储表数据
    1、:负责管理regionserver的状态
    2、:负责regionserver的负载均衡

  HBase的寻址机制
    用户数据表——>META表——>ROOT表——>ZooKeeper

    一个用户的数据表会被切分很多的region
    会被存储在很多的regionserver上

    Hlog记录了当前数据的最新操作
    store是一个列族

4. MapReduce操作Hbase
  实现方法
    Hbase对MapReduce提供支持,它实现了TableMapper类和TableReducer类,我们只需要继承这两个类即可。
      1、写个mapper继承TableMapper<Text, IntWritable>
        参数:Text:mapper的输出key类型; IntWritable:mapper的输出value类型。
        其中的map方法如下:
        map(ImmutableBytesWritable key, Result value,Context context)
        参数:key:rowKey;value: Result ,一行数据; context上下文
      2、写个reduce继承TableReducer<Text, IntWritable, ImmutableBytesWritable>
        参数:Text:reducer的输入key; IntWritable:reduce的输入value;
        ImmutableBytesWritable:reduce输出到hbase中的rowKey类型。
        其中的reduce方法如下:
        reduce(Text key, Iterable<IntWritable> values,Context context)
        参数: key:reduce的输入key;values:reduce的输入value;

Hadoop之Hbase详解的更多相关文章

  1. [转帖]HBase详解(很全面)

    HBase详解(很全面) very long story 简单看了一遍 很多不明白的地方.. 2018-06-08 16:12:32 卢子墨 阅读数 34857更多 分类专栏: HBase   [转自 ...

  2. 图解大数据 | 海量数据库查询-Hive与HBase详解

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/84 本文地址:http://www.showmeai.tech/article-det ...

  3. 【转载】Hadoop历史服务器详解

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:过往记忆(http://www.iteblog.com/)     原文地址: ...

  4. hadoop hdfs uri详解

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  5. hadoop基础-SequenceFile详解

    hadoop基础-SequenceFile详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.SequenceFile简介 1>.什么是SequenceFile 序列文件 ...

  6. Hadoop RPC机制详解

    网络通信模块是分布式系统中最底层的模块,他直接支撑了上层分布式环境下复杂的进程间通信逻辑,是所有分布式系统的基础.远程过程调用(RPC)是一种常用的分布式网络通信协议,他允许运行于一台计算机的程序调用 ...

  7. hadoop之mapreduce详解(进阶篇)

    上篇文章hadoop之mapreduce详解(基础篇)我们了解了mapreduce的执行过程和shuffle过程,本篇文章主要从mapreduce的组件和输入输出方面进行阐述. 一.mapreduce ...

  8. hadoop之yarn详解(框架进阶篇)

    前面在hadoop之yarn详解(基础架构篇)这篇文章提到了yarn的重要组件有ResourceManager,NodeManager,ApplicationMaster等,以及yarn调度作业的运行 ...

  9. hadoop Shell命令详解

    调用文件系统(FS)Shell命令应使用bin/hadoop fs <args>的形式.所有的的FS shell命令使用URI路径作为参数.URI路径详解点击这里. 1.cat说明:将路径 ...

随机推荐

  1. hihocoder-第六十一周 Combination Lock

    题目1 : Combination Lock 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Finally, you come to the interview roo ...

  2. redis使用中的常见错误

    1.2016年12月17日  启动redis报错,错误信息如下: 解决办法:redis没有正常关闭(redis安装在虚拟机上,直接杀死了虚拟机进程) 导致redis.pid文件一直被锁定,重启redi ...

  3. poj 1696(极角排序)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3924   Accepted: 2457 Descrip ...

  4. React Native - 2 控件Flexbox

    *强烈建议使用Genymotion模拟器,比AVD速度快,功能强大.   1. flexDirection Flexbox是连续布局,它有主轴(primary axis)和交叉轴(cross axis ...

  5. 安装tomcat7.0.82

    下载安装tomcat mkdir /tools cd /tools wget http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.82/bin/ap ...

  6. python操作数据库的几种方式

    参照python 操作mysql python-mysqldb : http://www.cnblogs.com/wupeiqi/articles/5095821.html (python3 不支持) ...

  7. centos 命令行修改主机名

    # vi /etc/sysconfig/network # 把localhost.localdomain 修改为 localhost.com # 保存退出 # vi /etc/hosts # 把loc ...

  8. CF 612C. Replace To Make Regular Bracket Sequence【括号匹配】

    [链接]:CF [题意]:给你一个只含有括号的字符串,你可以将一种类型的左括号改成另外一种类型,右括号改成另外一种右括号 问你最少修改多少次,才能使得这个字符串匹配,输出次数 [分析]: 本题用到了栈 ...

  9. 湖南师范大学2018年大学生程序设计竞赛新生赛 A 齐神和心美的游戏【hash】

    [链接]:A [题意]:给你n个数的序列和k.判断是否可以三个数组成k(同一个数可以拿多次) [分析]:每个数vis记录一下.2层循环.两数之和不超过k以及剩下的数出现在序列中那么ok. [代码]: ...

  10. 字典树(Trie Tree)

    终于要开始更新我的ACM学习之路了,不过没想到却是因为一次Java大作业,有趣,%yuan老师. 字典树是一种很简单的树形结构,主要用来进行词频统计,在算法竞赛中有时也会碰到. 字典树的基本思路是,通 ...