十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
MapReducer工作流程图:
解释:
- 判断是否打印日志
- 判断是否使用新的API,检查连接
- 在检查连接时,检查输入输出路径,计算切片,将jar、配置文件复制到HDFS
- 计算切片时,计算最小切片数(默认为1,可自定义)和大切片数(默认是long的大值,可以自定义)
- 查看给定的是否是文件,如果是否目录计算目录下所有文件的切片
- 通过block大小和最小切片数、大切片数计算出切片大小
- 过切片大小,计算出map的数量以及分发到的节点
- 提交job给yarn,进行MapReduce计算
解释:
- 首先Map Task任务,调用run()方法,run()方法会经过以下几个阶段
- 初始化taskcontext对象
- 对mapper对象的初始化,此处包括一个默认值的判断,如果没有自定义mapper类,默认用系统的Mapper
- 对文件输入的格式化,此处包括一个默认值的判断,如果没有自定义inputFormat类,默认用系统的TextinputFormat
- 创建input对象,创建具体的文件读取类,通过lineReader(),默认每次迭代读取一行,此处实现一个迭代的判断的nextKeyVaule(),并在nextKeyVaule实现时初始化key和value
- Input初始化:计算打开位置,读取文件内容,(放弃第一行)
- 调用mapper的run方法循环读取,直到末尾,多读一行,start放弃第一行的数据被上一个切片读到,注意这里的run方法中就会调用我们编写的Mapper类中的setup、map、cleanup方法
解释:
- 由newOutCollector创建output对象
- newOutCollector中需要准备collector和partitions计算reduce数量,会将map端输出的K,V,P(分区号)写入collector中
- 在准备collector实际上是准备MpaOutputBuffer,这是一特别复杂的过程,这里向大致的解释一下,就是先将收集的KV,P写入一个环形的缓冲区,然后在经过排序和分区将数据写入到文件中。(具体过程会在下面的shuffle中讲解)
- 最后mapOut结束之后,会调用close方法关闭output,在关闭时,会将剩余在buffer环的数据缓冲出去,并且将所有一些的小文件进行排序然后合并成一个大文件。
过程介绍:
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。