深入浅出学大数据(四)MapReduce快速入门及其编程实践

2021-10-09 16:00:36 浏览数 (1)

  大家好,我是不温卜火,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!博客主页:https://buwenbuhuo.blog.csdn.net/

目录

  • 前言
  • 一、MapReduce入门与基础理论
    • 1.1 初始MapReduce
      • 1.1.1 理解MapReduce思想
      • 1.1.2 如何模拟实现分布式计算
      • 1.1.3 分布式计算和并行计算的区别与联系
      • 1.1.4 分布式并行编程
      • 1.1.5 Hadoop MapReduce设计构思
    • 1.2 Hadoop MapReduce简介
      • 1.2.1 MapReduce介绍
      • 1.2.2 MapReduce优缺点
    • 1.3 Hadoop MapReduce编程
    • 1.4 Hadoop中数据类型
    • 1.5 Hadoop的序列化机制
    • 1.6 序列化(排序案例实操)
    • 1.7 分析经典demo——WordCount
      • 1.7.1 WordCount程序任务
      • 1.7.2 WordCount编程思路
      • 1.7.3 WordCount执行过程实例讲解(分解)
    • 1.8 MapReduce程序运行
    • 1.9 MapReduce输入输出的特点
    • 1.10 MapReduce的应用
  • 二、MapReduce深入讲解
    • 2.1 MapReduce编程指南
      • 2.1.1 MapReduce的运行流程
      • 2.1.2 引入数据分区Partition
      • 2.1.3 MapReduce中key的重要性
    • 2.2 MapReduce的体系结构
    • 2.3 MapReduce并行度机制
      • 2.3.1 MapTask并行度机制
      • 2.3.2 ReduceTask并行度机制
    • 2.4 MapReduce工作流程
      • 2.4.1 工作流程概述
      • 2.4.2 MapReduce各个执行阶段
      • 2.4.3 MapReduce应用程序执行过程
      • 2.4.4 MapTask工作机制
      • 2.4.5 ReduceTask工作机制
    • 2.5 MapReduce shuffle
      • 2.5.1 MapReduceShuffle是什么
      • 2.5.2 Shuffle弊端
      • 2.5.3 shuffle(优化)开启压缩机制
  • 三、编程实践
    • 3.1 Eclipse编程实践(此部分仅以WordCount为例)
      • 3.1.1 需求分析及代码实现
      • 3.1.2 项目创建及打包上传
      • 3.1.3 运行程序
    • 3.2 IDEA编程实践
      • 3.2.1 前期准备
      • 3.2.2 案例实战
        • 1.MapReduce 自定义对象
        • 2.MapReduce 自定义排序
        • 3.MapReduce 自定义分区
        • 4.MapReduce Combiner
        • 5.MapReduce 自定义分组
        • 6.自定义分组扩展:topN问题
    • 四、前人的肩膀

前言

此系列主要为我的学弟学妹们所创作,在某些方面可能偏基础。如果读者感觉较为简单,还望见谅!如果文中出现错误,欢迎指正~

本文主要介绍了MapReduce编程模型详解及其编程实践,包括MapReduce入门与基础理论、MapReduce编程实践。

一、MapReduce入门与基础理论

1.1 初始MapReduce

1.1.1 理解MapReduce思想

MapReduce思想在生活中处处可见,每个人或多或少都曾接触过这种思想。MapReduce的思想核心是“先分再合,分而治之”, 所谓“分而治之”就是把一个复杂的问题,按照一定的“分解”方法分为等价的规模较小的若干部分,然后逐个解决,分别找出各部分的结果,把各部分的结果组成整个问题的结果。

这种思想来源于日常生活与工作时的经验,同样也完全适用于大量复杂的任务处理场景(大规模数据处理场景)。即使是发布过论文实现分布式计算的谷歌也只是实现了这种思想,而不是自己原创。

Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。

Reduce负责“合”,即对map阶段的结果进行全局汇总。

这两个阶段合起来正是MapReduce思想的体现。

一个比较形象的语言解释MapReduce:

我们要数停车场中的所有的车数量。你数第一列,我数第二列。这就是“Map”。我们人越多,能够同时数车的人就越多,速度就越快。

数完之后,我们聚到一起,把所有人的统计数加在一起。这就是“Reduce”。

1.1.2 如何模拟实现分布式计算

0 人点赞