zoukankan      html  css  js  c++  java
  • 【Hadoop入门学习系列之六】HBase基本架构、编程模型和应用案例

    转载:https://blog.csdn.net/shengmingqijiquan/article/details/52922009

    HBase是一个构建在HDFS上的分布式列存储系统;

    HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;

    从逻辑上讲, HBase将数据按照表、行和列进行存储。

    Hbase是Hadoop生态系统的一个组成部分


    Hbase与HDFS对比

    共同点:
    两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点;
    不同点:
    HDFS:
    适合批处理场景
    不支持数据随机查找
    不适合增量数据处理
    不支持数据更新
    HBase:
    大:一个表可以有数十亿行,上百万列;
    无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;
    面向列:面向列(族)的存储和权限控制,列(族)独立检
    索;
    稀疏:对于空( null)的列,并不占用存储空间,表可以设计
    的非常稀疏;
    数据多版本:每个单元中的数据可以有多个版本,默认情况
    下版本号自动分配,是单元格插入时的时间戳;
    数据类型单一: Hbase中的数据都是字符串,没有类型
    行存储与列存储


    二.HBase模型和基本架构
    2.1 HBase数据模型
    HBase是基于Google BigTable模型开发的,典型的key/value系统;

    Hbase逻辑视图

    Rowkey与Column Family

    Hbase支持的操作
    所有操作均是基于rowkey的;
    支持CRUD( Create、 Read、 Update和Delete)和Scan;
    单行操作
     Put
     Get
     Scan
    多行操作
     Scan
     MultiPut
    没有内置join操作,可使用MapReduce解决。

    2.2 HBase物理模型
    每个column family存储在HDFS上的一个单独文件中;
    Key 和 Version number在每个 column family中均由一份;
    空值不会被保存。
    Table中的所有行都按照row key的字典序排列;Table 在行的方向上分割为多个Region;

    Region按大小分割的,每个表开始只有一个region,随着数据增多, region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region;

    Region是HBase中分布式存储和负载均衡的最小单元。不同Region分布到不同RegionServer上;

    Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个Store组成,每个store保存一个columns family;每个Strore又由一个memStore和0至多个StoreFile组成;memStore存储在内存中, StoreFile存储在HDFS上。


    2.3 基本架构


    2.3.1Hbase基本组件
    Client
    包含访问HBase的接口,并维护cache来加快对HBase的访问
    Zookeeper
    保证任何时候,集群中只有一个master
    存贮所有Region的寻址入口
    实时监控Region server的上线和下线信息。并实时通知给Master
    存储HBase的schema和table元数据
    Master
    为Region server分配region
    负责Region server的负载均衡
    发现失效的Region server并重新分配其上的region
    管理用户对table的增删改查操作
    Region Server
    Region server维护region,处理对这些region的IO请求
    Region server负责切分在运行过程中变得过大的region
    2.3.2 Zookeeper作用
    HBase 依赖ZooKeeper
    默认情况下,HBase管理ZooKeeper实例,比如, 启动或者停止ZooKeeper
    Master与RegionServers 启动时会向ZooKeeper注 册
    Zookeeper的引入使得 Master不再是单点故障

    2.4HBase容错性
    Master容错: Zookeeper重新选择一个新的Master
    无Master过程中,数据读取仍照常进行;
    无master过程中, region切分、负载均衡等无法进行;
    RegionServer容错:定时向Zookeeper汇报心跳,如果一旦时 间内未出现心跳
    Master将该RegionServer上的Region重新分配到其他RegionServer上;
    失效服务器上“预写”日志由主服务器进行分割并派送给新的
    RegionServer
    Zookeeper容错: Zookeeper是一个可靠地服务
    一般配置3或5个Zookeeper实例。
    三.HBase应用举例
    3.1何时使用HBase?
    需对数据进行随机读操作或者随机写操作;
    大数据上高并发操作,比如每秒对PB级数据进行上千次操作;
    读写访问均是非常简单的操作。
    3.2 HBase应用企业

    四.HBase编程实战
    4.1 Hbase 访问方式
    Native Java API
     最常规和高效的访问方式;
    HBase Shell
     HBase的命令行工具,最简单的接口,适合HBase管理使用;
    Thrift Gateway
     利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据;
    REST Gateway
     支持REST 风格的Http API访问HBase, 解除了语言限制;
    MapReduce
     直接使用MapReduce作业处理Hbase数据;
     使用Pig/hive处理Hbase数据
    4.2 Hbase Java编程
    4.2.1 Hbase Java API概述
    Hbase是用Java语言编写的,支持Java编程是自然而然的事情;
    支持CRUD操作;
    Create, Read, Update, Delete
     Java API包含Hbase shell支持的所有功能,甚至更多;
    Java API是访问Hbase最快的方式。
    4.2.2 Java API程序设计步骤
    步骤1:创建一个Configuration对象,包含各种配置信息
    Configuration conf = HbaseConfiguration.create();
    1
    步骤2:构建一个HTable句柄
     提供Configuration对象
     提供待访问Table的名称
    HTable table = new HTable(conf, tableName);
    1
    步骤3:执行相应的操作
     执行put、 get、 delete、 scan等操作
    table.getTableName();
    1
    步骤4:关闭HTable句柄
     将内存数据刷新到磁盘上
     释放各种资源
    table.close();
    1
    实例:


    4.2.3 向HBase写入数据
    步骤1:创建一个Put对象;

    Put put = new Put(Bytes.toBytes("rowkey"));
    1
    步骤2:设置cell值;

    Put.add(family, column, value)
    Put.add(family, column, timestamp, value)
    Put.add(KeyValue kv)
    1
    2
    3
    步骤3:调用HTable中的put方法,写入数据;
    步骤4:关闭HTable句柄。


    4.2.4 从Hbase中读取数据
    支持的API类型
     通过rowkey获取一行数据
     通过一个rowkey集合获取多条记录
     扫描整个表或者表的一部分
    扫描表
     可指定扫描的范围[startkey endkey)
     表中数据是按照rowkey排序的
    API 特点
     数目有限、使用简单

    读取数据时注意事项:
     只读取需要的数据
     尽可能增加数据约束条件
     可增加family, column(s), time range 和 max versions等约束条件

    接口实例
     get.setTimeRange(minStamp, maxStamp)
     get.setMaxVersions(maxVersions)
     get.addFamily(family)
     get.addColumn(family, column)
    4.2.5 从Hbase中删除数据


    4.2.6 从Hbase中scan数据


    五.总结
    本博客是记录了HBase的基础内容,核心掌握HBase的设计思想和java编程,搞清楚HBase在什么时候使用!三种情况:需要随机访问,批量大数据高并发操作,操作为简单读写访问!
    ————————————————
    版权声明:本文为CSDN博主「数据圈」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/shengmingqijiquan/article/details/52922009

  • 相关阅读:
    Java中“==”与equals的区别以及equals方法的重写
    Java中的Switch....case语句:
    Java中的基本数据类型
    HTTP与HTTPS的区别
    深入理解HTTP协议、HTTP协议原理分析
    IntelliJ IDEA下的使用git
    Spring RestTemplate详解
    Java 适配器(Adapter)模式
    LINUX的ssh免密码配置
    CDH6.2安装配置第一篇:CDH配置本地http服务
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/12122941.html
Copyright © 2011-2022 走看看