MapReduce 中如何处理HBase中的数据?如何读取HBase数据给Map?如何将结果存储到HBase中?

Mapper类:包括一个内部类(Context)和四个方法(setup,map,cleanup,run);
          setup,cleanup用于管理Mapper生命周期中的资源。setup -> map -> cleanup , run方法执行了这个过程;
          map方法用于对一次输入的key/value对进行map动作,对应HBase操作也就是一行的处理;

job的配置:
    1.  TableInputFormat完成了什么功能?
         (1)通过设置conf.set(TableInputFormat.INPUT_TABLE,"udc_sell");设定HBase的输入表;
                   设置conf.set(TableInputFormat.SCAN, TableMRUtil.convertScanToString(scan));设定对HBase输入表的scan方式;
                           
         (2)通过TableInputFormat.setConf(Configration conf)方法初始化scan对象;
            scan对象是从job中设置的对象,以字符串的形式传给TableInputFormat,在TableInputFormat内部将scan字符创转换为scan对象         
           * TableMapReduceUtily有两个方法:convertScanToString和convertStringToScan作用?
            将scan实例转换为Base64字符串  和将Base64字符串还原为scan实例;
          
         (3)TableInputFormat继承了TableInputFormatBase实现了InputFormat抽象类的两个抽象方法:
            getSplits()和createRecordReader()方法:


A:getSplits()断定输入对象的切分原则:对于TableInputFormatBase,会遍历HBase相应表的所有HRegion,每一
个HRegion都会被分成一个split,

所以切分的块数是与表中HRegion的数目是相同的;
             InputSplit split = new
TableSplit(table.getTableName(),splitStart, splitStop, regionLocation);

在split中只会记载HRegion的其实rowkey和终止rowkey,具体的去读取这篇区域的数据是createRecordReader()实现的。
             计算出来的每一个分块都将被作为一个map Task的输入;
                 Q:但是分出的块分给那台机器的那个task去执行Map,即jobTracker如何调度任务给taskTracker?
                 A:  需要进一步了解Map的本地化运行机制和jobTracker的调度算法;(可能是就近原则)
                 对于一个map任务,jobtracker会考虑tasktracker的网络位置,并选取一个距离其输入分片文件最近的tasktracker。在最理
想 的情况下,任务是数据本地化的(data-
local),也就是任务运行在输入分片所在的节点上。同样,任务也可能是机器本地化的:任务和输入分片在同一个机架,但不在同 一个节点上。
                      reduce任务,jobtracker简单滴从待运行的reduce任务列表中选取下一个来运行,用不着考虑数据段饿本地化。


B:createRecordReader()按照必然格式读取响应数据:接收split块,返回读取记录的结果;  
                 public RecordReader<ImmutableBytesWritable,
Result> createRecordReader(InputSplit split, TaskAttemptContext
context){
                 
                }
                trr.init()返回的是这个分块的起始rowkey的记录;
           RecordReader将一个split解析成<key,value>对的形式提供给map函数,key就是rowkey,value就是对应的一行数据;
           RecordReader用于在划分中读取<Key,Value>对。RecordReader有五个虚方法,分别是:
                                          initialize:初始化,输入参数包括该Reader工作的数据划分InputSplit和Job的上下文context;
                                          nextKey:得到输入的下一个Key,如果数据划分已经没有新的记录,返回空;
                                          nextValue:得到Key对应的Value,必须在调用nextKey后调用;
                                          getProgress:得到现在的进度;
                                          close:来自java.io的Closeable接口,用于清理RecordReader。


2.   job.setInputFormatClass(TableInputFormat.class);         
                                       
   3.   TableMapReduceUtil.initTableReducerJob("daily_result", DailyReduce.class, job); 
        使用了该方法就不需要再单独定义 
        initTableReducerJob()方法完成了一系列操作:
                (1). job.setOutputFormatClass(TableOutputFormat.class); 设置输出格式;
                (2). conf.set(TableOutputFormat.OUTPUT_TABLE, table); 设置输出表;
                (3). 初始化partition

Hbase 学习笔记4----原理的更多相关文章

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

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

  2. HBASE学习笔记(四)

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

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

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

  4. HBase学习笔记之BulkLoad

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

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

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

  6. HBase学习笔记——概念及原理

    1.什么是HBase HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. ...

  7. Hbase学习笔记01

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

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

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

  9. HBASE学习笔记--API

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

  10. AlloyTouch.js 源码 学习笔记及原理说明

    alloyTouch这个库其实可以做很多事的, 比较抽象, 需要我们用户好好的思考作者提供的实例属性和一些回调方法(touchStart, change, touchMove, pressMove, ...

随机推荐

  1. 小型web服务器thttpd的学习总结(下)

    1.主函数模块分析 对于主函数而言,概括来说主要做了三点内容,也就是初始化系统,进行系统大循环,退出系统.下面主要简单阐述下在这三个部分,又做了哪些工作呢. 初始化系统 拿出程序的名字(argv[0] ...

  2. php max_execution_time执行时间问题

    php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,倘若你有一个需要颇多时间才能完成的工作,例如要发送很多电子邮件给大量收件 ...

  3. 动态添加js的方法

    var Skip={};//获取XMLHttpRequest对象(提供客户端同http服务器通讯的协议)Skip.getXmlHttpRequest=function (){ if ( window. ...

  4. ADO.NET数据库编程

    ADO.NET数据库编程 1.ADO.NET的相关概念. Microsoft的新一代技术,是ADO组件的后继者. 主要目的是在.NET Framework平台存取数据. 提供一致的对象模型,可以存取和 ...

  5. 如何将HTML页面的标题设置为“数字天堂”。

    如何将HTML页面的标题设置为“数字天堂”. 解答: <html> <head><title>数字天堂</title></head> < ...

  6. java 理解java的三大特性之封装

    使用封装有三大好处: 1.良好的封装能够减少耦合. 2.类内部的结构可以自由修改. 3.可以对成员进行更精确的控制. 4.隐藏信息,实现细节. public class Wife { private ...

  7. 获取一个Assembly中的命名空间列表

    通过System.Reflection.Assembly类中提供的方法和属性不能直接获取组件中的命名空间列表.但有方法可以直接获得Assembly中的所有类型,我们便可以通过获取的类型来得到命名空间名 ...

  8. .net mvc 下实现移动架构display mode

    最近要求做支持移动端网站 我们的设计已经把移动端UI给我了,但是我还没想好改用哪种方式支持移动端 1.常见的就是2级域名m.baidu.com,框架根据访问者设备,来选择是否跳转到移动站 2.同域名的 ...

  9. 详略。。设计模式2——单例变形(多例).。。。studying

    ★ 缓存在单例中的使用("单例+缓存"技术) 缓存在编程中使用非常频繁,有着非常关键的数据,它可以帮助程序实现以空间换取时间, 通常被设计成整个应用程序所共享的一个空间,现要求实现 ...

  10. Redis "MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk"问题

    今天在程序中,jedis put数据到redis过程中,“MISCONF Redis is configured to save RDB snapshots, but is currently not ...