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. Unity—JsonFx序列化场景

    场景数据类: /// <summary> /// 关卡数据 /// </summary> public class LevelData {     //关卡名称     pub ...

  2. Hadoop分布式文件系统--HDFS结构分析

    转自:http://blog.csdn.net/androidlushangderen/article/details/47377543 HDFS系列:http://blog.csdn.net/And ...

  3. QT creator 编辑多个UI 文件 出现 无法解析的外部符号的错误

    创建一般的Qt Gui 程序一般会默认一个UI 文件 ,但是随着应用程序窗口的增多,同时编辑多个UI 界面是必须的. 假设我们已经创建好了一个QTUI的工程,里面已经默认了一个UI文件,但是想在添几个 ...

  4. CentOS 7如何设置Linux开机自动获取IP地址

    centos7 minimal版默认安装好后没有获取ip地址,需要手动配置.方法如下: 1.输入“ip addr”并按回车键确定,发现无法获取IP(CentOS 7默认没有ifconfig命令),记录 ...

  5. Windows下RabbitMQ安装,部署,配置

    安装部署 1.当前环境以及参考资料出处 部署环境:windows server 2008 r2 enterprise 官方安装部署文档:http://www.rabbitmq.com/install- ...

  6. ChemDraw进行自动调整的步骤

    说到化学绘图软件那就不得不提ChemDraw,起非常的经典在国内外都得到了普遍应用,最新版是ChemDraw 15.1 Pro.在使用ChemDraw化学绘图工具绘制化学图形的时候,需要循序渐进一步一 ...

  7. MathType与Origin是怎么兼容的

    MathType作为一款常用的公式编辑器,可以与很多的软件兼容使用.Origin虽然是一款专业绘图与数据分析软件,但是在使用过程中也是可以用到MathType.它可以帮助Origin给图表加上标签,或 ...

  8. 下载VMware

    1.进入VMware官网:http://www.vmware.com/cn 2.找到下载,点击Workstation Pro,此时需要账号登录. 3.选择需要下载的版本.对应的操作系统,点击转至下载

  9. 【原】storm源码之巧用java反射反序列化clojure的defrecord获取属性值

    storm源码是clojure.java.python的混合体.在解决storm-0.8.2的nimbus单点问题的过程中需要从zookeeper上读取目前storm集群中正在运行的assignmen ...

  10. 【BZOJ2194】快速傅立叶之二

    [BZOJ2194]快速傅立叶之二 Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. ...