加入收藏 | 设为首页 | 会员中心 | 我要投稿 柳州站长网 (https://www.0772zz.cn/)- 基础存储、数据迁移、云安全、数据计算、数据湖!
当前位置: 首页 > 站长资讯 > 动态 > 正文

Android12新亮点曝光

发布时间:2021-01-27 13:24:05 所属栏目:动态 来源:互联网
导读:MapReduce 的核心就是 Shuffle 过程,Shuffle 过程是贯穿于 map 和 reduce 两个过程的!在Map端包括Spill过程,在Reduce端包括copy和sort过程。 具体Shuffle过程如下: MapTask 收集我们的map()方法输出的kv对,放到内存缓冲区中。 从内存缓冲区不断溢出本地

MapReduce 的核心就是 Shuffle 过程,Shuffle 过程是贯穿于 map 和 reduce 两个过程的!在Map端包括Spill过程,在Reduce端包括copy和sort过程。 具体Shuffle过程如下:

  1. MapTask 收集我们的map()方法输出的kv对,放到内存缓冲区中。
  2. 从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件,溢出前会按照分区针对key进行区内快排。
  3. 多个溢出文件会被合并成大的溢出文件。
  4. 在溢出过程及合并的过程中,都要调用 Partitioner 进行分区和针对key进行排序。
  5. ReduceTask 根据自己的分区号,去各个 MapTask 机器上取相应的结果分区数据。
  6. ReduceTask 对收集后的数据进行合并跟归并排序。
  7. 进入 ReduceTask 的逻辑运算过程,调用用户自定义的reduce()方法。
  8. Shuffle 中的缓冲区大小会影响到 MapReduce 程序的执行效率,原则上说,缓冲区越大,磁盘io的次数越少,执行速度就越快。

3.6.3 Partition

MapReduce 默认的分区方式是hashPartition,在这种分区方式下,KV 对根据 key 的 hashcode 值与reduceTask个数进行取模,决定该键值对该要访问哪个ReduceTask。
 

MapReduce流程

MapTask 工作机制

  • Read阶段:MapTask 通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value。
  • Map阶段:将解析出的key/value交给用户编写map()函数处理,并产生一系列新的key/value。
  • Collect收集阶段:它会将生成的key/value分区(调用Partitioner),并写入一个环形内存缓冲区中。
  • Spill阶段:先按照分区进行排序,然后区内按照字典对key进行快排,并在必要时对数据进行合并、压缩等操作。
  • Combine阶段:选择性可进行MapTask内的优化提速。

ReduceTask 工作机制

  • Copy阶段:从所有的MapTask中收集结果然后决定将数据放入缓存还是磁盘。
  • Merge阶段:copy数据时后天会对磁盘还有内存数据进行Merge。
  • Sort阶段:ReduceTask需对所有数据进行一次归并排序,方便执行reduce 函数。
  • Reduce阶段:调用用户 reduce() 函数将计算结果写到HDFS上。

3.6.2 Shuffle
 

  • 另外还有一种办法,在Application类中,可以通过registerActivityLifecycleCallbacks监听Activity生命周期,不过这种办法也是传入了Activity的context,只不过在Application类中完成这个工作。

关于事件分发,事件到底是先到DecorView还是先到Window的?

经过上述一系列问题,是不是对Window印象又深了点呢?最后再看一个问题,这个是wanandroid论坛上看到的,

这里的window可以理解为PhoneWindow,其实这道题就是问事件分发在Activity、DecorView、PhoneWindow中的顺序。

当屏幕被触摸,首先会通过硬件产生触摸事件传入内核,然后走到FrameWork层(具体流程感兴趣的可以看看参考链接),最后经过一系列事件处理到达ViewRootImpl的processPointerEvent方法,接下来就是我们要分析的内容了:

(编辑:柳州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读