《R与Hadoop大数据分析实战》一2.2 Hadoop MapReduce技术简介

简介:

本节书摘来自华章出版社《R与Hadoop大数据分析实战》一书中的第2章,第2.2节,作者 (印)Vignesh Prajapati,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.2 Hadoop MapReduce技术简介

一般而言,MapReduce模型可以使用多种语言实现,除此之外,Hadoop MapReduce也是一个用于方便编写应用程序的流行Java语言框架。通过把大数据在大机群(一般有数千台计算机)上并行运算,实现整个系统的高可靠性和高容错性。MapReduce分为Map和Reduce两阶段,并主要处理键值对类型的数据。Map和Reduce任务运行于集群中,Map阶段的输出作为Reduce阶段的输入。
所有数据的输入元素在MapReduce处理时均不能被更新,一旦Map任务的输入数据(键值对数据)发生变化,也不会影响输入文件。Map执行单元的输出将会以键为基础分配到适当的Reduce执行单元中,并作为其输入。这种数据的次序处理方式在Hadoop MapReduce算法以及Hadoop集群的帮助下将会对并行运算发挥极大的益处。
MapReduce程序会将以列表形式输入的数据集同样转化为列表形式输出。这种列表的转化过程几乎在Map和Reduce阶段中要重复两次。我们也可以在这些重复过程中配置Map和Reduce执行单元的个数。在下一节中,我们将介绍基于旧版本API内MapReduce的基本概念。

2.2.1 MapReduce中包含的实体

Hadoop用于分析大数据时使用的概念如下:
Client:用于作业的初始化
JobTracker:用于作业的状态监控
TaskTracker:用于作业的实际执行
HDFS:用于存储输入和输出数据

2.2.2 MapReduce中的主要执行进程

Hadoop MapReduce处理数据的四个主要过程如下:
数据导入HDFS中
Map阶段的执行
重组(shuffing)并排序(sorting)
Reduce阶段的执行
数据导入HDFS中
将输入数据集上传到Hadoop的目录中,才能被MapReduce所使用。Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)将会把输入数据分割为多个分支并存储于集群的多个数据节点中,并通过重复复制实现容错机制。所有的这些数据分支将会通过Map任务和Reduce任务的TaskTracker进程以并行方式来处理。
这里还有另外一些Hadoop组件用于从HDFS中获取数据集:
Sqoop:这是一个开源的设计工具,主要用于在Apache Hadoop和结构化关系型数据库之间传输大量数据。假如你的应用中已经配置了MySQL数据库,同时还想使用该数据进行数据分析,那么推荐使用Sqoop工具把数据库内的数据导入HDFS文件系统中。同时当完成数据分析后,Sqoop工具也用于把分析结果数据导出MySQL数据库。
Flume:它是一种用于向HDFS文件系统中提供高效收集、聚合、移动大量日志数据的服务,其性能可靠,并以分布式方式运行。Flume可以读取几乎所有的源数据,例如日志文件、系统日志、其他UNIX系统进程的标准化输出。
使用上面这些数据收集和移动的框架,可以使MapReduce在处理大数据分析时的数据迁移过程变得非常简单。
Map阶段的执行
执行client应用程序以启动Hadoop MapReduce进程。然后在Map阶段复制作业资源并存储于HDFS中,之后调用JobTracker以执行作业。JobTracker首先初始化作业,然后检索输入数据并分割信息,最后为每个作业创建一个Map任务。
JobTracker将会调用TaskTracker以运行Map任务,其输入是已分配好的数据集。Map任务以键值对形式读取分割后的数据作为输入。键值对提供了后续产生键值对格式中间数据的映射方法。对于每个键值对数据,至少对应一个输出。
image

之后会产生多个键值对数据,以至于键会被重复很多次。所以可这些键将会被再次应用于Reduce执行单元中。只要格式正确,Map阶段的输出数值和Reduce阶段的输入数值也一定会是一致的。
当完成Map阶段的操作后,TaskTracker会把结果放于它的缓冲存储区或本地磁盘中(如果输出数据的大小超过某一阈值时)。
例如,假设我们有个用于把输入文本数据转化为小写格式的Map函数,它将会把一系列的输入字符串转化为小写字符串。
键与值:在MapReduce中,根据不同的键,每个值都有它的定义。Map处理单元接收这些键值对数据,并且与输入数据的数据类型相关,其数据类型在作业配置文件中进行说明。
重组并排序
为了优化MapReduce程序,Map阶段与Reduce阶段的中间衔接阶段很重要。
只要Map输出了有效的数据,那么中间阶段的处理程序就将会被自动调用。当完成了Map阶段处理过程,所有产生的键值对中间数据将会被Partitioner函数分割。Partitioner函数的输出将会依据键进程排序。排序操作的输出数据将会存储于该节点计算机的缓冲区和TaskTracker内。
Combiner函数通常就是Reduce执行单元自身。因此数据压缩不是通过Gzip或者与之相似的压缩形式,而是通过映射输出数据节点上的Reduce执行单元进行压缩。数据通过Combiner函数回归然后重组,再传输到Reduce节点上。为了加快数据从Map执行单元输出到TaskTracker上Reduce执行单元之间的数据传输,需要用Combiner函数压缩输出结果。默认情况下,Map执行单元输出结果将会被存入缓冲存储器,如果输出大小大于临界值,输出结果会被存储在本地磁盘上。输出数据将可以通过超文本传输协议获取(HTTP)。
Reduce阶段的执行
一旦Map执行单元输出了有效数据,Reduce节点计算机的TaskTracker将会接收到被分割的Map阶段的输出数据,然后数据将会被重新组成为一个大的数据文件,并再排序后提供给Reducer方法进行处理。
Reducer方法接收到一系列输入数据,格式为(key,list(value)),并基于一般逻辑进行聚集(aggregates),最后产生(key,value)格式的输出。

image

Reducer方法输出后的结果以指定的格式直接写入HDFS系统中,指定格式的方式是在MapReduce job的配置中进行设定。

2.2.3 MapReduce的局限

Hadoop MapReduce的局限性:
MapReduce框架难以利用在诸如实时流、图形处理以及信息传递这样的复杂逻辑中。
相比于有索引的数据库,在分散的、无索引的数据中进行数据查询是无效的。然而,如果数据的索引是后来产生的,在移动或是增加数据时,需要维持该索引。
不能同时运行Reduce任务和Map任务来减少整体的处理时间,因为只有获取Map任务的结果后,Reduce任务才能开始。(Reduce执行单元的输入完全依赖于Map执行单元的输出)并且,我们不能控制Map和Reduce任务执行的顺序。但是有时候,基于应用逻辑,在Map任务结束需要进行数据收集的情况下,我们可以理所当然地为Reduce任务配置延迟启动。
如果Reduce任务花费太多时间但是最后以失败告终,或者没有其他Reduce任务槽可供重新安排Reduce任务,糟糕的资源利用情况会使长期运行的Reduce任务无法完成(这可以通过YARN来解决)。

2.2.4 MapReduce 可以解决的问题

既然本书要对数据分析给出解决方案,那就应该提供一些分析数据的相关实例。例如,如果某读者对以前他人提及的内容有相似的问题,Hadoop将发挥作用。Hadoop不是一个对所有大数据问题的通用解决方案。它只是把欲处理的大数据分割成小块,并通过分布式的服务实现并行处理而已。这使得在处理超大数据时,可以节省更多的时间并把成本降低。
如果可以把问题设计为Map和Reduce两个阶段处理的方式,那么就可以使用MapReduce技术进行解决。一般而言,Hadoop技术在处理数据时不会局限于机器的内存大小(R语言在运行数据处理进程时,则会经常出现如下错误提示:cannot allocate vector of size 2.5 GB)

2.2.5 使用Hadoop编程时用到不同的Java概念

一些经典的Java概念使得Hadoop更加容易理解。如下:
远程过程调用:这是一项进程间通信,它允许计算机程序发起一个运行在另一个地址空间(通常是在共享网络的另一台计算机上)的子程序或过程,而不需要程序员编写远程交互的细节代码。也就是说,本质上无论子程序运行在本地程序还是远程程序,程序员都编写相同的代码。
序列化/反序列化:序列化指一台Java虚拟机(JVM)可以向一些流中输出对象的状态,这样我们能够基本上读出所有的成员并将其状态传输或存储到流、磁盘等。默认机制是二进制格式,因此它比文本格式更紧凑。通过序列化,机器能够通过网络传输数据。反序列化亦然,它被用于通过网络接收数据对象。
Java泛型:当提供编译期类型安全性时,它允许用一种类型或是方法来操纵各种不同类型的对象,让Java成为一种完全静态类型的语言。
Java集合:这个框架是一组类和接口,用于使用简单的Java对象收集各种不同类型的数据。
Java并发:它支持并行程序设计,并且所有程序执行由线程内容完成。它主要用于在单一操作系统进程中作为一组线程执行计算过程。
简单的Java对象(POJO):实际就是普通的JavaBeans。POJO暂时用于设置以及检索数据对象的值。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
11天前
|
存储 分布式计算 Hadoop
大数据处理架构Hadoop
【4月更文挑战第10天】Hadoop是开源的分布式计算框架,核心包括MapReduce和HDFS,用于海量数据的存储和计算。具备高可靠性、高扩展性、高效率和低成本优势,但存在低延迟访问、小文件存储和多用户写入等问题。运行模式有单机、伪分布式和分布式。NameNode管理文件系统,DataNode存储数据并处理请求。Hadoop为大数据处理提供高效可靠的解决方案。
33 2
|
4月前
|
分布式计算 Hadoop
Hadoop系列 mapreduce 原理分析
Hadoop系列 mapreduce 原理分析
40 1
|
11天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
13天前
|
SQL 分布式计算 Hadoop
利用Hive与Hadoop构建大数据仓库:从零到一
【4月更文挑战第7天】本文介绍了如何使用Apache Hive与Hadoop构建大数据仓库。Hadoop的HDFS和YARN提供分布式存储和资源管理,而Hive作为基于Hadoop的数据仓库系统,通过HiveQL简化大数据查询。构建过程包括设置Hadoop集群、安装配置Hive、数据导入与管理、查询分析以及ETL与调度。大数据仓库的应用场景包括海量数据存储、离线分析、数据服务化和数据湖构建,为企业决策和创新提供支持。
51 1
|
30天前
|
消息中间件 SQL 分布式计算
大数据Hadoop生态圈体系视频课程
熟悉大数据概念,明确大数据职位都有哪些;熟悉Hadoop生态系统都有哪些组件;学习Hadoop生态环境架构,了解分布式集群优势;动手操作Hbase的例子,成功部署伪分布式集群;动手Hadoop安装和配置部署;动手实操Hive例子实现;动手实现GPS项目的操作;动手实现Kafka消息队列例子等
20 1
大数据Hadoop生态圈体系视频课程
|
2月前
|
数据可视化 数据挖掘 大数据
Python中的数据分析与可视化库Matplotlib简介
在当前大数据时代,数据分析和可视化成为了技术领域的热门话题。Python作为一门流行的编程语言,拥有丰富的数据处理和可视化库,其中Matplotlib是其中的佼佼者。本文将介绍Matplotlib库的基本概念、功能特点以及在数据分析与可视化中的应用。
29 0
|
3月前
|
存储 分布式计算 监控
Hadoop的JobTracker和TaskTracker在MapReduce中的作用是什么?
Hadoop的JobTracker和TaskTracker在MapReduce中的作用是什么?
52 0
|
7月前
|
分布式计算 Hadoop 大数据
Hadoop学习:深入解析MapReduce的大数据魔力之数据压缩(四)
Hadoop学习:深入解析MapReduce的大数据魔力之数据压缩(四)
|
7月前
|
分布式计算 Hadoop 大数据
Hadoop学习:深入解析MapReduce的大数据魔力(三)
Hadoop学习:深入解析MapReduce的大数据魔力(三)
|
4月前
|
存储 分布式计算 负载均衡
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
59 0

热门文章

最新文章