美文网首页
HBase权威指南(四)客户端API管理功能

HBase权威指南(四)客户端API管理功能

作者: kaiker | 来源:发表于2022-03-12 15:10 被阅读0次

    1、模式定义

    HBase中数据最终会存储在一张表或多张表中。

    HTableDescriptor()
    HTableDescriptor(String name)
    HTableDescriptor(byte[] name)
    HTableDescriptor(HTableDescriptor desc)
    

    虽然理论上HBase的表是由行和列组成的,但从物理结构上看,表存储在不同的分区,即不同的region


    region中行的逻辑与物理视图

    表述性

    文件大小限制、memstore刷写大小、延迟日志刷写、只读、其他选项

    列族

    列族名字必须是可见字符,列名可以由任意二进制字符组成

    HColumnDescriptor()
    HColumnDescriptor(String familyName)
    HColumnDescriptor(byte[] familyName)
    void addFamily(HColumnDescriptor family)
    
    列族映射到独立存储文件

    列族不能被重命名,通常是新建一个列族,然后使用API从旧列族中复制数据到新列族

    2、HBaseAdmin

    HBaseAdmin提供了建表、创建列族、检查表是否存在、修改表结构和列族结构和删除表功能
    HBaseAdmin(Configuration conf) throws MasterNotRunningException, ZooKeeperConnectionException
    HBaseAdmin实例的生命周期不宜太长

    void createTable(HTableDescriptor desc)
    ... 
    
    Configuration conf = HBaseConfiguration.create();
    HBaseAdmin admin = new HBaseAdmin(conf);
    HTableDescriptor desc = new HTableDescriptor(Bytes.toBytes("testtable"));
    HCloumnDescriptor coldef = new HCloumnDescriptor (Bytes,toBytes("colfam1"));
    desc.addFamily(coldef);
    admin.createTable(desc);
    

    列操作,异步调用

    void addColumn(String tableName, HColumnDescriptor column)
    void deleteColumn(String tableName, HColumnDescriptor column)
    void modifyColumn(String tableName, HColumnDescriptor column)
    

    集群操作
    表中所有更新在未刷写到磁盘之前都会先写入region的MemStore实例,这是显示刷写

    void flush(String tableNameOrRegionName)
    

    合并,是异步方法。调用之后会在region服务器有执行队列进行操作。majorCompact会迭代这张表的所有region,多个HFile重写成一个HFile;minor合并是合并多个小文件。

    void compact(String tableNameOrRegionName)
    void majorCompact(String tableNameOrRegionName)
    

    移动,可以控制某个region在哪台服务器上线

    void move(byte[] encodedRegionName, byte[] destServerName)
    

    调用HBaseAdmin.getClusterStatus可以查询ClusterStatus实例,这个实例包含了master搜集到整个集群信息

    3、远程调用

    这些服务内部直接使用基于HTable的客户端API来访问表


    远程调用

    4、与MapReduce集成

    MR过程

    InputFormat

    拆分输入数据,同时返回RecordReader实例,这个实例定义了键值对象的类,并提供了next方法来遍历输入的数据
    对于HBase,用户需要提供一个Scan实例。


    Mapper

    Mapper读取一组特定的键值对,但输出其他类型
    HBase提供了一个TableMapper类,将key的类强制转换成一个ImmutableByteWritable,将value类型强制转换为Result类型

    Reducer

    得到Mapper的输出,经过shuffle和sort的处理。每个Map输出的中间结果都会被复制到Reduce服务器,同时sort阶段会将所有shuffle的数据进行联合排序。

    OutputFormat

    将数据持久化到不同的位置。
    许多Mapper将记录传输给Reducer,但是只有一个OutputFormat处理它对应的Reducer输出。


    OutputFormat

    执行时Hadoop能够知道块的位置,让操作尽可能在块所在的地方进行执行。HBase的数据也是存储在HDFS上的

    一个具体的例子
    https://github.com/larsgeorge/hbase-book/blob/master/ch07/src/main/java/mapreduce/AnalyzeData.java

    相关文章

      网友评论

          本文标题:HBase权威指南(四)客户端API管理功能

          本文链接:https://www.haomeiwen.com/subject/yhikdrtx.html