Hadoop 生态之 MapReduce 及 Hive 简介
1.计算框架 Hadoop 是一个计算框架,目前大型数据计算框架常用的大致有五种:
这其中名气最大、使用最广的当属 Hadoop 和 Spark。 虽然两者都被称为大数据框架,但实际层级不同。Hadoop 是一个分布式数据基础设施,包括计算框架 MapReduce、分布式文件系统 HDFS、YARN 等。而Spark 是专门用来对分布式存储的大数据的处理工具,并不会进行数据存储,更像是 MapReduce 的替代。 在使用场景上,Hadoop 主要用于离线数据计算,Spark更适用于需要精准实时的场景。本文主要介绍 Hadoop,对 Spark 不做讨论。 本篇文章可承接知识库 Hadoop之HDFS (https://gitlab.aihaisi.com/docs/docs/issues/516) ,介绍下 Hadoop 另一重要组件 MapReduce,以及 Hive。 2. MapReduce 2.1 MapReduce 是什么 一个基于 Java 的并行分布式计算框架。 前文有提到 HDFS 提供了基于主从结构的分布式文件系统,基于此存储服务支持,MapReduce 可以实现任务的分发、跟踪、执行等工作,并收集结果。 2.2 MapReduce 组成 MapReduce 主要思想讲的通俗一点就是将一个大的计算拆分成 Map(映射)和 Reduce(化简)。说到这里,其实 JAVA8 在引入 Lambda 后,也有 map 和 reduce 方法。下面是一段 Java 中的用法:
代码很简单,map 负责归类,reduce 负责计算。而 Hadoop 中的 MapReduce 也有异曲同工之处。 下面结合官方案例 WordCount 进行分析:
在这段代码中,不难看出程序核心是 map 函数和 reduce 函数。是否 MapReduce 就是由这两者组成的?接着往下看。 2.3 Map 和 Reduce 2.3.1 Map 在 WordCount 案例中,明显看到 map 函数的输入主要是一个 Context 在这里暂时性忽略,其是 Mapper 类的内部抽象类,一般计算中不会用到,可以先当做“上下文”理解。 map 函数计算过程是: 将这行文本中的单词提取出来,针对每个单词输出一个 2.3.2 Reduce 接着就来看看 reduce ,这里输入参数 Values 就是上面提到的由很多个 1 组成的集合,而 Key 就是具体“单词” word。 它的计算过程是: 将集合里的1求和,再将单词(word)与这个和(sum)组成一个 假设有两个数据块的文本数据需要进行词频统计,MapReduce 计算过程如下图所示: 到这都很容易理解,毕竟只是个 HelloWorld 的例子~,但整个MapReduce过程中最关键的部分其实是在 map 到 reduce 之间。 (编辑:ASP站长网) |