MapReduce备忘录

概念

大数据时代的数据分析任务比传统的数据分析任务要复杂,因为往往涉及的数据量巨大。通常来讲,我们的笔记本电脑可以同时干很多事儿,而对于大规模的数据处理任务来说,就不是一台电脑同时做许多任务了,而是许多电脑同时做一件任务的逻辑关系。这就引入了并行计算的概念。

许多电脑同时做一件复杂的任务,涉及很多问题:比如,

  • 这个任务首先要分解成许多子任务
  • 然后这些小任务要在这些电脑上面去分配
  • 然后这些电脑完成了任务之后反馈的结果还要汇总
  • 同时还要考虑如果这些电脑的故障异常等问题怎么去解决

MapReduce就是这样的一个编程模型,一个复杂的任务按照这个抽象的模型去实现,就可以有效进行并行计算。

在MapReduce中有两类机器:(1)Master,负责调度,相当于工地的工头;(2)Worker,相当于干活的工人。Worker进一步分为两种:一种是Mapper,另一种叫Reducer

image.png

一个例子

其实我们可以从word count这个实例来理解MapReduce。MapReduce大体上分为六个步骤:input, split, map, shuffle, reduce, output。细节描述如下:

  1. 输入(input):如给定一个文档,包含如下四行:
    Hello Java
    Hello C
    Hello Java
    Hello C++

  2. 拆分(split):将上述文档中每一行的内容转换为key-value对,即:
    0 - Hello Java
    1 - Hello C
    2 – Hello Java
    3 - Hello C++

  3. 映射(map):将拆分之后的内容转换成新的key-value对,即:
    (Hello , 1)
    (Java , 1)
    (Hello , 1)
    (C , 1)
    (Hello , 1)
    (Java , 1)
    (Hello , 1)
    (C++ , 1)

  4. 派发(shuffle):将key相同的扔到一起去,即:
    (Hello , 1)
    (Hello , 1)
    (Hello , 1)
    (Hello , 1)
    (Java , 1)
    (Java , 1)
    (C , 1)
    (C++ , 1)
    注意:这一步需要移动数据,原来的数据可能在不同的datanode上,这一步过后,相同key的数据会被移动到同一台机器上。最终,它会返回一个list包含各种k-value对,即:
    { Hello: 1,1,1,1}
    {Java: 1,1}
    {C: 1}
    {C++: 1}

  5. 缩减(reduce):把同一个key的结果加在一起。如:
    (Hello , 4)
    (Java , 2)
    (C , 1)
    (C++,1)

  6. 输出(output): 输出缩减之后的所有结果。

Hadoop 生态圈

Hadoop是一个开发和运行大规模数据分析程序的软件平台,是隶属Apache的一个用java语言实现的开源软件框架,在大量普通服务器组成的集群中对海量数据进行分布式计算。

  • HDFS——Hadoop生态圈的基本组成部分是Hadoop分布式文件系统(HDFS)。HDFS是一种数据分布式保存机制,数据被保存在计算机集群上。HDFS为HBase等系统提供了基础。

  • MapReduce——Hadoop的主要执行框架是MapReduce,它是一个分布式、并行处理的编程模型。MapReduce把任务分为map(映射)阶段和reduce(化简)。开发人员基于存储在HDFS中数据,编写Hadoop的MapReduce任务。由于MapReduce工作原理的特性, Hadoop能以并行的方式访问数据,从而实现快速访问数据。

  • Hbase——HBase是一个建立在HDFS之上,面向列的NoSQL数据库,用于快速读/写大量数据。HBase使用Zookeeper进行管理,确保所有组件都正常运行。

  • Zookeeper——用于Hadoop的分布式协调服务。Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。

  • Oozie——Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的产出。

  • Pig——它是MapReduce编程的复杂性的抽象。Pig平台包括运行环境和用于分析Hadoop数据集的脚本语言(Pig Latin)。其编译器将PigLatin翻译成MapReduce程序序列。

  • Hive——Hive类似于SQL高级语言,用于运行基于Hadoop的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务。像Pig一样,Hive作为一个抽象层工具,吸引了很多熟悉SQL而不是Java编程的数据分析师。

参考资料

  • https://www.zhihu.com/question/23345991/answer/53996060
  • https://www.zhihu.com/question/23345991/answer/223113502
  • https://zhuanlan.zhihu.com/p/20953323

你可能感兴趣的:(MapReduce备忘录)