第4章大数据技术教程-MapReduce
- 格式:docx
- 大小:2.18 MB
- 文档页数:23
mapreduce基础编程MapReduce是一种用于大规模数据处理的编程模型和软件框架。
它可以将大数据集分成多个小数据集,并通过多个计算节点并行处理,最后汇总处理结果。
MapReduce将数据处理过程分成两个阶段:Map阶段和Reduce阶段。
在Map阶段中,数据被分成多个小数据集,每个小数据集上运行相同的计算任务,然后产生中间结果。
在Reduce阶段中,中间结果被合并,最终产生处理结果。
MapReduce的基础编程模型可以分为以下几个步骤:1. 输入数据的读取:输入数据可以来自于Hadoop Distributed File System (HDFS)、本地文件系统或其他数据源。
2. Map阶段的编写:开发者需要编写Map函数,该函数将输入数据切分成多个小数据集,并在每个小数据集上运行相同的计算任务,生成中间结果。
Map函数的输出通常是一个键值对(key-value pair),其中键表示中间结果的类型,值表示中间结果的值。
3. Reduce阶段的编写:开发者需要编写Reduce函数,该函数将中间结果根据键值进行合并,生成最终的处理结果。
Reduce函数的输出通常是一个键值对(key-value pair),其中键表示最终处理结果的类型,值表示最终处理结果的值。
4. 输出数据的写入:最终处理结果可以写入到HDFS或其他数据源中。
MapReduce程序的开发需要掌握Java或其他编程语言。
除了基础编程模型外,还需要了解MapReduce的一些高级编程技术,如Combiner、Partitioner、InputFormat、OutputFormat等。
通过这些技术,可以进一步提高MapReduce程序的性能和可扩展性。
总之,MapReduce是一种强大的大数据处理工具,掌握基础编程模型是进行大数据分析和处理的必要条件。
《Hadoop大数据技术原理与应用》课程教学大纲课程编号:3250578学分:4学分学时:72学时(其中:讲课学时36 上机学时:36)先修课程:《Linux基础》、《关系数据库基础》、《程序设计基础》、《Java面向对象编程》后续课程:Spark,《Python编程基础》、《Python数据分析与应用》适用专业:大数据应用技术一、课程的性质与目标《大数据应用开发》本课程是软件技术专业核心课程,大数据技术入门课程。
通过学习课程使得学生掌握大数据分析的主要思想和基本步骤,并通过编程练习和典型应用实例加深了解;同时对Hadoop平台应用与开发的一般理论有所了解,如分布式数据收集、分布式数据存储、分布式数据计算、分布式数据展示。
开设本学科的目的是让学生掌握如何使用大数据分析技术解决特定业务领域的问题。
完成本课程学习后能够熟练的应用大数据技术解决企业中的实际生产问题。
二、教学条件要求操作系统:Center OSHadoop版本:Hadoop2.7.4开发工具:Eclipse三、课程的主要内容及基本要求第1章初识Hadoop第2章构建Hadoop集群第3章 HDFS分布式文件系统第4章 MapReduce分布式计算系统第5章 Zookeeper分布式协调服务第6章 Hadoop2.0新特性第7章 Hive数据仓库第8章 Flume日志采集系统第9章 Azkaban工作流管理器第10章 Sqoop数据迁移第11章综合项目——网站流量日志数据分析系统四、学时分配五、考核模式与成绩评定办法本课程为考试课程,期末考试采用百分制的闭卷考试模式。
学生的考试成绩由平时成绩(30%)和期末考试(70%)组成,其中,平时成绩包括出勤(5%)、作业(5%)、上机成绩(20%)。
六、选用教材和主要参考书本大纲是参考教材《Hadoop大数据技术原理与应用》所设计的。
七、大纲说明本课程的授课模式为:课堂授课+上机,其中,课堂主要采用多媒体的方式进行授课,并且会通过测试题阶段测试学生的掌握程度;上机主要是编写程序,要求学生动手完成指定的程序设计或验证。
mapreduce总结MapReduce一个由Google出的分布式编程模型,它将大数据处理转化为分布式程序模型,提供了一种简单却强大的方法来处理海量的数据。
MapReduce优点在于提供了一种既可以低成本、高效率地处理大规模数据的数据处理框架,在大数据的处理和管理方面发挥了重要作用。
本文将对MapReduce的相关概念及其实现原理、特点和应用进行综述。
一、MapReduce的概念MapReduceGoogle发明的一种解决海量数据处理的分布式编程模型,它是一种计算框架,可以将一个大型数据集分割成多个小任务,并把任务分发到多台机器上执行,并最终将小任务的结果合并成最终结果。
MapReduce模型由Google在2004年提出,并于2005年在著名论文“MapReduce:A Flexible Data Processing Tool”中被正式发表,其主要贡献者为Google公司的三位研究人员:Jeff Dean、Sanjay Ghemawat Andrew Tomkins。
二、MapReduce的实现原理MapReduce实现原理主要分2个阶段。
1. Map:Map是利用已有的数据,进行数据归类和分块的过程,将大规模的数据量分割成多个中等规模的数据块,每个数据块用一个子任务来处理;2. Reduce阶段:Reduce是从 Map的多个子任务的结果中汇总出最终的结果;MapReduce框架建立在分布式环境之上,将一个大规模的计算任务拆分成小任务,分发到各个节点运行,最后把小任务的结果合并成一个总结果。
三、MapReduce的特点MapReduce模型提供了一种机制,可以实现以下处理大规模数据的特点:1.发处理大数据:MapReduce过将大数据集分成多个小数据集,并由多个节点并行处理,从而提供了大规模数据处理的并发能力,可以提升处理效率;2.错性:MapReduce型支持容错性处理,也即当某台机器出现故障或是宕机,MapReduce架会将任务重新分发到其它机器上执行,从而保证了数据的正确性;3.可伸缩性:MapReduce型具有较高的可伸缩性,即可以根据需求随时增加或减少计算任务的数量,从而改变计算的规模;4.持低延迟的数据处理:MapReduce数据处理过程中,可以有效避免数据倾斜现象,从而减少任务处理的时间。
简述mapreduce计算的主要流程
MapReduce计算是一种分布式计算模型,其主要流程可以简述为以下几个步骤:
1. 输入分片:将输入数据分成若干个小块进行处理,每个小块称为一个输入分片。
2. Map阶段:将每个输入分片分配给一个或多个Map任务进行处理。
每个Map任务读取一个输入分片,并将其转换为一系列<key, value>对。
这些<key, value>对称为Map输出。
3. Shuffle阶段:将Map输出按照key值进行排序,将具有相同key值的<key, value>对分组在一起,并将它们发送给同一个Reduce任务进行处理。
这个过程称为shuffle。
4. Reduce阶段:将每个Reduce任务处理的<key, value>对按照一定的规则进行合并(如求和、求平均值等),并输出结果。
5. 输出合并:将所有Reduce任务的输出结果合并成一个最终的输出结果,并将其存储到输出文件中。
以上就是MapReduce计算的主要流程,其中Map阶段、Shuffle 阶段和Reduce阶段是整个计算过程中最关键的三个阶段,它们的正确性和效率对整个计算的性能影响非常大。
- 1 -。
使用Hadoop MapReduce高效处理大规模数据的方法随着互联网的快速发展,大规模数据的处理成为了一个重要的挑战。
传统的数据处理方法已经无法满足这一需求,因此,使用Hadoop MapReduce成为了一种高效处理大规模数据的方法。
一、Hadoop MapReduce的基本原理Hadoop MapReduce是一种分布式计算模型,它将大规模数据划分为多个小块,并将这些小块分发到不同的计算节点上进行并行处理。
其基本原理可以概括为以下几个步骤:1. 输入数据划分:将大规模数据划分为多个小块,每个小块的大小通常为64MB或128MB。
2. Map阶段:在每个计算节点上,对输入数据进行处理,生成中间结果。
这个阶段可以并行处理多个小块。
3. Shuffle阶段:将Map阶段生成的中间结果按照键值对进行排序,并将相同键的值归并在一起,以便进行后续的处理。
4. Reduce阶段:对Shuffle阶段生成的中间结果进行处理,得到最终的结果。
二、优化Hadoop MapReduce的性能虽然Hadoop MapReduce能够高效处理大规模数据,但是在实际应用中,还存在一些性能瓶颈。
下面介绍一些优化Hadoop MapReduce性能的方法。
1. 数据本地化:在MapReduce任务中,数据的传输是一个耗时的操作。
为了减少数据传输的开销,可以将计算节点的选择与数据的位置相匹配,尽量将计算任务分配到存储数据的节点上进行处理。
2. 压缩数据:大规模数据的处理通常需要大量的磁盘空间。
为了减少磁盘空间的占用,可以对输入数据进行压缩,减少存储和传输的开销。
同时,在Map阶段和Reduce阶段的中间结果也可以进行压缩,以减少网络传输的开销。
3. 合并小文件:在Hadoop中,每个小文件都会占用一个数据块的存储空间,这样会导致存储空间的浪费。
可以将多个小文件合并成一个大文件,减少存储空间的占用。
4. 调整任务数量:在Hadoop MapReduce中,任务的数量对性能有很大的影响。
第4章课后习题答案一、单选题1.在 MapReduce 程序中,map() 函数接收的数据格式是(A. 字符串B. 整型C. LongD. 键值对参考答案:D2.每个 Map 任务都有一个内存缓冲区,默认大小是( ) 。
A. 128 MBB. 64 MBC. 100 MBD. 32 MB参考答案:C3.在 MapTask 的 Combine 阶段,当处理完所有数据时,MapTask 会对所有的临时文件进行一次() 。
A. 分片操作B. 合并操作C. 格式化操作D. 溢写操作参考答案:B4.下列选项中,主要用于决定整个 MapReduce 程序性能高低的阶段是( ) 。
A. MapTaskB. ReduceTaskC. 分片、格式化数据源D. Shuffle参考答案:D二、判断题1. MapReduce 编程模型借鉴了面向过程的编程语言的设计思想。
( )参考答案:错2.在MapReduce 程序进行格式化数据源操作时, 是将划分好的分片格式化为键值对“ < key,value > ” 形式的数据。
( )参考答案:对3.带有倒排索引的文件称为“倒排索引文件”,简称“ 倒排文件” 。
( )参考答案:对4.reduce() 函数会将 map( ) 函数输出的键值对作为输入,将相同 key 值的 value 进行汇总,输出新的键值对。
( )参考答案:对5.MapReduce 通过 TextOutputFormat 组件输出到结果文件中。
( )参考答案:对biner 组件可以让 Map 对 key 进行分区,从而可以根据不同的 key 分发到不同的Reduce 中去处理。
( )参考答案:错7.对于 MapReduce 任务来说,一定需要 Reduce 过程。
( )参考答案:错8.在 MapReduce 程序中,只有 Map 阶段涉及 Shuffle 机制。
( )参考答案:错9.MapReduce 的数据流模型可能只有 Map 过程,由 Map 产生的数据直接被写入 HDFS中。
Hadoop大数据开发基础教案Hadoop教案MapReduce入门编程教案第一章:Hadoop概述1.1 Hadoop简介了解Hadoop的发展历程理解Hadoop的核心价值观:可靠性、可扩展性、容错性1.2 Hadoop生态系统掌握Hadoop的主要组件:HDFS、MapReduce、YARN理解Hadoop生态系统中的其他重要组件:HBase、Hive、Pig等1.3 Hadoop安装与配置掌握Hadoop单机模式安装与配置掌握Hadoop伪分布式模式安装与配置第二章:HDFS文件系统2.1 HDFS简介理解HDFS的设计理念:大数据存储、高可靠、高吞吐掌握HDFS的基本架构:NameNode、DataNode2.2 HDFS操作命令掌握HDFS的基本操作命令:mkdir、put、get、dfsadmin等2.3 HDFS客户端编程掌握HDFS客户端API:Configuration、FileSystem、Path等第三章:MapReduce编程模型3.1 MapReduce简介理解MapReduce的设计理念:将大数据处理分解为简单的任务进行分布式计算掌握MapReduce的基本概念:Map、Shuffle、Reduce3.2 MapReduce编程步骤掌握MapReduce编程的四大步骤:编写Map函数、编写Reduce函数、设置输入输出格式、设置其他参数3.3 典型MapReduce应用掌握WordCount案例的编写与运行掌握其他典型MapReduce应用:排序、求和、最大值等第四章:YARN资源管理器4.1 YARN简介理解YARN的设计理念:高效、灵活、可扩展的资源管理掌握YARN的基本概念:ResourceManager、NodeManager、ApplicationMaster等4.2 YARN运行流程掌握YARN的运行流程:ApplicationMaster申请资源、ResourceManager 分配资源、NodeManager执行任务4.3 YARN案例实战掌握使用YARN运行WordCount案例掌握YARN调优参数设置第五章:Hadoop生态系统扩展5.1 HBase数据库理解HBase的设计理念:分布式、可扩展、高可靠的大数据存储掌握HBase的基本概念:表结构、Region、Zookeeper等5.2 Hive数据仓库理解Hive的设计理念:将SQL查询转换为MapReduce任务进行分布式计算掌握Hive的基本操作:建表、查询、数据导入导出等5.3 Pig脚本语言理解Pig的设计理念:简化MapReduce编程的复杂度掌握Pig的基本语法:LOAD、FOREACH、STORE等第六章:Hadoop生态系统工具6.1 Hadoop命令行工具掌握Hadoop命令行工具的使用:hdfs dfs, yarn命令等理解命令行工具在Hadoop生态系统中的作用6.2 Hadoop Web界面熟悉Hadoop各个组件的Web界面:NameNode, JobTracker, ResourceManager等理解Web界面在Hadoop生态系统中的作用6.3 Hadoop生态系统其他工具掌握Hadoop生态系统中的其他工具:Azkaban, Sqoop, Flume等理解这些工具在Hadoop生态系统中的作用第七章:MapReduce高级编程7.1 二次排序理解二次排序的概念和应用场景掌握MapReduce实现二次排序的编程方法7.2 数据去重理解数据去重的重要性掌握MapReduce实现数据去重的编程方法7.3 自定义分区理解自定义分区的概念和应用场景掌握MapReduce实现自定义分区的编程方法第八章:Hadoop性能优化8.1 Hadoop性能调优概述理解Hadoop性能调优的重要性掌握Hadoop性能调优的基本方法8.2 HDFS性能优化掌握HDFS性能优化的方法:数据块大小,副本系数等8.3 MapReduce性能优化掌握MapReduce性能优化的方法:JVM设置,Shuffle优化等第九章:Hadoop实战案例9.1 数据分析案例掌握使用Hadoop进行数据分析的实战案例理解案例中涉及的技术和解决问题的方法9.2 数据处理案例掌握使用Hadoop进行数据处理的实战案例理解案例中涉及的技术和解决问题的方法9.3 数据挖掘案例掌握使用Hadoop进行数据挖掘的实战案例理解案例中涉及的技术和解决问题的方法第十章:Hadoop项目实战10.1 Hadoop项目实战概述理解Hadoop项目实战的意义掌握Hadoop项目实战的基本流程10.2 Hadoop项目实战案例掌握一个完整的Hadoop项目实战案例理解案例中涉及的技术和解决问题的方法展望Hadoop在未来的发展和应用前景重点和难点解析重点环节1:Hadoop的设计理念和核心价值观需要重点关注Hadoop的设计理念和核心价值观,因为这是理解Hadoop生态系统的基础。
MapReduce技术详解1.什么是MapReduce?MapReduce 是由Google公司的Jeffrey Dean 和 Sanjay Ghemawat 开发的一个针对大规模群组中的海量数据处理的分布式编程模型。
MapReduce实现了两个功能。
Map把一个函数应用于集合中的所有成员,然后返回一个基于这个处理的结果集。
而Reduce是把从两个或更多个Map中,通过多个线程,进程或者独立系统并行执行处理的结果集进行分类和归纳。
Map() 和 Reduce() 两个函数可能会并行运行,即使不是在同一的系统的同一时刻。
Google 用MapReduce来索引每个抓取过来的Web页面。
它取代了2004开始试探的最初索引算法,它已经证明在处理大量和非结构化数据集时更有效。
用不同程序设计语言实现了多个MapReduce,包括 Java, C++, Python, Perl, Ruby和C, 其它语言。
在某些范例里,如Lisp或者Python, Map() 和Reduce()已经集成到语言自身的结构里面。
通常,这些函数可能会如下定义:List2 map(Functor1, List1);Object reduce(Functor2, List2);Map()函数把大数据集进行分解操作到两个或更多的小“桶”。
而一个“桶”则是包含松散定义的逻辑记录或者文本行的集合。
每个线程,处理器或者系统在独立的“桶”上执行Map()函数,去计算基于每个逻辑记录处理的一系列中间值。
合并的结果值就会如同是单个Map()函数在单个“桶”上完全一致。
Map()函数的通常形式是:map(function, list) {foreach element in list {v = function(element)intermediateResult.add(v)}} // mapReduce()函数把从内存,磁盘或者网络介质提取过来的一个或多个中间结果列表,对列表中的每个元素逐一执行一个函数。
大数据mapreduce课程设计一、教学目标本课程旨在让学生掌握大数据处理技术中的MapReduce编程模型,理解其核心概念和基本原理,培养学生运用MapReduce解决实际问题的能力。
具体目标如下:1.知识目标:(1)了解MapReduce的起源、发展及其在大数据处理领域的应用;(2)掌握MapReduce的基本概念,包括Map、Shuffle、Reduce等阶段;(3)理解MapReduce的数据抽象、编程模型以及编程接口;(4)熟悉Hadoop生态系统中相关组件,如HDFS、YARN等。
2.技能目标:(1)能够运用MapReduce编程模型解决简单的数据处理问题;(2)熟练使用Hadoop框架进行MapReduce程序的开发和部署;(3)掌握MapReduce程序的调试和优化方法。
3.情感态度价值观目标:(1)培养学生对大数据处理技术的兴趣,认识其在现代社会的重要性;(2)培养学生团队合作精神,提高解决实际问题的能力;(3)培养学生创新意识,激发学生持续学习的动力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.MapReduce概述:介绍MapReduce的起源、发展及其在大数据处理领域的应用。
2.MapReduce基本概念:讲解MapReduce的核心概念,包括Map、Shuffle、Reduce等阶段。
3.MapReduce编程模型:详述MapReduce的数据抽象、编程模型以及编程接口。
4.Hadoop生态系统:介绍Hadoop生态系统中相关组件,如HDFS、YARN等。
5.MapReduce实例分析:分析实际应用中的MapReduce实例,让学生掌握运用MapReduce解决问题的方法。
6.MapReduce程序开发与调试:讲解如何使用Hadoop框架进行MapReduce程序的开发和部署,以及程序的调试和优化方法。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解MapReduce的基本概念、原理和编程模型;2.案例分析法:分析实际应用中的MapReduce实例,让学生学会运用MapReduce解决问题;3.实验法:让学生动手编写和调试MapReduce程序,提高实际操作能力;4.讨论法:学生分组讨论,培养团队合作精神和创新意识。
基于mapreduce的课程设计一、课程目标知识目标:1. 学生能理解MapReduce编程模型的基本原理,掌握其核心概念,如Map、Reduce函数以及Shuffle过程。
2. 学生能够运用MapReduce进行数据处理和分析,掌握相关算法的并行化设计。
3. 学生了解大数据处理中MapReduce的优势和局限性,并能够结合实际场景选择合适的处理方法。
技能目标:1. 学生能够独立编写简单的MapReduce程序,实现对大规模数据的处理。
2. 学生通过动手实践,掌握使用MapReduce进行数据分析的基本技巧,如调试、优化和性能评估。
3. 学生能够运用所学知识解决实际问题,设计并实现小型的数据处理项目。
情感态度价值观目标:1. 学生通过学习MapReduce,培养对分布式计算和大数据技术的兴趣,激发探求新技术的好奇心。
2. 学生通过团队协作完成任务,增强合作意识和团队精神,认识到团队合作的重要性。
3. 学生通过本课程的学习,认识到技术对于解决现实问题的价值,增强利用科技改变生活的信心。
课程性质分析:本课程为信息技术或计算机科学相关学科的高级课程,旨在帮助学生掌握大数据处理的基本方法,培养学生解决实际问题的能力。
学生特点分析:学生应为高中年级或大学低年级,具备一定的编程基础,对数据结构和算法有一定的了解,具备基本的逻辑思维能力。
教学要求:课程注重理论与实践相结合,鼓励学生动手实践,通过案例教学,提高学生的实际操作能力和问题解决能力。
教学过程中,强调学生的主体地位,引导学生主动探索,激发学生的学习兴趣。
通过分解课程目标为具体学习成果,使教学设计和评估更具针对性。
二、教学内容1. MapReduce基本概念:介绍MapReduce编程模型,阐述其在大数据处理中的应用场景,对比传统数据处理方法,突出MapReduce的优势。
- 教材章节:第1章 大数据处理概述2. MapReduce编程原理:详细讲解Map、Reduce函数的作用和实现,以及Shuffle过程。
大数据导论教学大纲《大数据导论》是一门公共选修课程,向各专业的大学生普及大数据的基础知识,讲解大数据处理和分析的基本技术,以及大数据的典型应用案例和不同场景的作用等。
目的是使学习者能了解大数据的基本概念和大数据处理的基本技术,理解大数据分析的基本方法,并能够应用大数据思维和分析方法解决问题。
课程概述本课程为通识类课程,目的是向各专业学生普及大数据的基础知识。
使学生能够了解大数据的基本概念、基本技术和应用场景,理解大数据分析的基本原理和方法,并能够应用大数据思维和分析方法解决本专业的相关问题。
课程的特色是:1、课程内容与实际应用紧密结合;2、通过实例与案例分析,加深学习者对课程知识的理解;3、充分利用媒体展示内容,使得课程内容直观形象、易于理解;4、强调互动,让学生可以充分参与到教学的过程中,收获最好的教学效果。
授课目标(1)能够建立对大数据知识体系的轮廓性认识,了解大数据发展历程、基本概念、主要影响、应用领域、关键技术、计算模式和产业发展,并了解云计算的概念及其与大数据之间的紧密关系;(2)能够了解分布式大数据处理架构Hadoop的基本原理,Hadoop项目结构及其各个组件,并了解Hadoop平台的使用方法;(3)能够了解大数据的存储技术,理解分布式文件系统的基本概念和结构,了解分布式文件系统HDFS的原理和使用方法;(4)能够了解NoSQL数据库的基本概念,了解NewSQL数据库的基本概念和主流产品;(5)能够了解大数据分析的典型方法,如聚类、分类等分析方法,初步掌握典型算法的原理与应用方法;(6)能够了解数据可视化的基本方法和常用工具,学习相关的案例,并进行数据可视化的实践操作。
(7)能够联系实际,了解大数据的典型应用,对大数技术的未来发展趋势有一定了解。
课程大纲《大数据导论》课程简介第一章绪论1.1 什么是大数据1.2 大数据的价值和作用1.3 大数据时代的思维变革作业1第一章单元测试第二章大数据相关技术基础2.1 大数据相关技术基础(1):云计算和Hadoop简介2.2 大数据相关技术基础(2):大数据采集和预处理2.3 大数据相关技术基础(3):大数据计算、分析与可视化作业2测验作业3第三章数据采集与预处理3.1 大数据的来源3.2 大数据采集3.3 大数据预处理3.4 大数据集成测试作业第四章Hadoop架构和大数据存储简介4.1 hadoop简介之一4.1 hadoop简介之二4.2 HDFS的简要介绍4.3 基于HDFS的数据库之一4.3 基于HDFS的数据库之二4.3 基于HDFS的数据库之三4.4 一种基于Hadoop的数据仓库之一4.4 一种基于Hadoop的数据仓库之二4.4 一种基于Hadoop的数据仓库之三单元测验:hadoop简介单元测验:HDFS单元测验:Hbase单元测验:Hive第五章典型大数据计算框架5.1 一种并行编程模型--MapReduce-之一5.1 一种并行编程模型--MapReduce-之二5.1 一种并行编程模型--MapReduce-之三5.1 一种并行编程模型--MapReduce-之四5.2 Apache Spark之一5.2 Apache Spark之二5.2 Apache Spark之三第六章大数据分析6.1 数据描述性分析6.2 回归分析6.3 聚类分析6.4 分类分析6.5 Weka数据挖掘软件简介单元测验1单元测试2-聚类分析单元测试3-分类分析第七章大数据可视化7.1.1 数据可视化的概念7.1.2 数据可视化的发展历程7.1.3 数据可视化技术7.2.1 数据可视化的技术分类7.2.2 数据可视化具体方法7.3.1 数据可视化工具简介7.3.2 Excel数据可视化方法与应用7.3.3 Tableau可视化基础单元测试1单元测试2第八章大数据的应用8.1 大数据的广泛应用8.2.1 推荐系统-18.2.2 推荐系统-28.3.1 城市大数据-18.3.2 城市大数据-2单元测试1单元测试2预备知识掌握计算机应用的基础知识,以及Windows系统和office的基本使用方法。
第四章分布式计算框架MapReduce4.1初识MapReduceMapReduce是一种面向大规模数据并行处理的编程模型,也一种并行分布式计算框架。
在Hadoop流行之前,分布式框架虽然也有,但是实现比较复杂,基本都是大公司的专利,小公司没有能力和人力来实现分布式系统的开发。
Hadoop的出现,使用MapReduce框架让分布式编程变得简单。
如名称所示,MapReduce主要由两个处理阶段:Map阶段和Reduce 阶段,每个阶段都以键值对作为输入和输出,键值对类型可由用户定义。
程序员只需要实现Map和Reduce两个函数,便可实现分布式计算,而其余的部分,如分布式实现、资源协调、内部通信等,都是由平台底层实现,无需开发者关心。
基于Hadoop开发项目相对简单,小公司也可以轻松的开发分布式处理软件。
4.1.1 MapReduce基本过程MapReduce是一种编程模型,用户在这个模型框架下编写自己的Map函数和Reduce函数来实现分布式数据处理。
MapReduce程序的执行过程主要就是调用Map函数和Reduce函数,Hadoop把MapReduce程序的执行过程分为Map和Reduce两个大的阶段,如果细分可以为Map、Shuffle(洗牌)、Reduce三个阶段。
Map含义是映射,将要操作的每个元素映射成一对键和值,Reduce含义是归约,将要操作的元素按键做合并计算,Shuffle在第三节详细介绍。
下面以一个比较简单的示例,形象直观介绍一下Map、Reduce阶段是如何执行的。
有一组图形,包含三角形、圆形、正方形三种形状图形,要计算每种形状图形的个数,见下图4-1。
图:4-1 map/reduce计算不同形状的过程在Map阶段,将每个图形映射成形状(键Key)和数量(值Value),每个形状图形的数量值是“1”;Shuffle阶段的Combine(合并),相同的形状做归类;在Reduce阶段,对相同形状的值做求和计算。
在用户编写程序时,需要编写Map和Reduce两个函数,而Combine是由集群完成的。
在Map函数中,将每一个形状作为参数传入函数,用户编写的程序将形状和数字“1”作为map映射。
对于第一个图形,这个map的Key就是“三角形”,value就是“1”,这样就形成了K/V对,同理对于后面所有的图形都做这样的映射。
映射完成后就形成了以每个形状Key 和数字“1”为Value的K/V键值对,这样Map阶段就工作完成了。
在Combine中,集群将所有Key相同的键值对进行组合,图中可以看出“三角形”后面有4个“1”,圆形后有6个“1”,正方形后有三个“1”,这些“1”正是map阶段键值对的Value。
在Reduce阶段,把相同的Key的Value进行求和就可以统计出每个形状的个数了。
这是单个Map/Reduce任务的执行过程,在集群中运行时系统会自动运行多个Map任务,以并行的方式处理多个输入的数据块,实现基于分布式的并行计算。
其实在我们现实生活中,很多数据要么本身就为键值对的形式,要么可以用键值对这种方式来表示,例如电话号码和通话记录,文件名和文件存储的数据等,键值对是存在于我们身边非常普通的模型。
4.1.2 MapReduce编程思想MapReduce的核心思想只有四个字:分而治之。
MapReduce采用"分而治之",这样就把对大规模数据集的复杂计算任务分解成“简单任务”,分发给集群中各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。
简单地说,MapReduce就是"任务的分解与结果的汇总"。
把复杂的任务分解为若干个“简单任务”来处理。
“简单任务”包含三层含义:计算量变小,数据或计算的规模相对原来任务要大大缩小;就近计算,即任务会被分配到存放所需数据的节点上进行计算,也称本地计算原则;独立运行,这些小任务可以并行计算,彼此间几乎没有依赖关系。
在Reduce阶段,负责对Map阶段的结果进行汇总。
至于需要多少个Reduce任务来汇总,则可以由用户根据需要指定。
”4.1.3 MapReduce的编程模型MapReduce借鉴了函数式程序设计语言Lisp中的思想,定义了的Map和Reduce两个抽象的编程接口,由用户去编程实现。
Map函数: (k1; v1)-->[(k2; v2)]。
输入:键值对(k1;v1)表示接收的数据;处理:文档数据记录(如文本文件中的一行),以键值对的形式传入map函数,处理完之后以另一种键值对的形式输出中间处理结果[k2;v2];输出:键值对[k2;v2]表示的一组中间数据;洗牌(Shuffle):对中间结果数据处理。
对Map输出的[k2;v2]数据,进行分组、合并、排序,传送到Reduce端。
Reduce函数: (k2; [v2])-->[(k3; v3)]。
输入: Map输出的一组键值对[(k2; v2)] 将被进行合并处理将同样主键下的不同数值合并到一个列表[v2]中,故Reduce的输入为(k2;[v2]);处理:对传入的中间结果列表数据进行某种整理或进一步的处理,并输出最终的某种键值对形式的结果[(k3;v3)];输出:键值对[k3;v3]表示的最终结果数据。
下面以处理文本为例,说明编程模型中各阶段执行步骤。
Map函数执行:读取输入文件内容,对输入文件的每一行,解析成Key、Value对,通常行数(行偏移量)为Key值,每行文本作为Value值。
每一个键值对调用一次Map函数。
写自己的逻辑,对输入的Key、Value处理,转换成新的Key、Value输出。
在Shuffle中对输出的Key、Value进行分区。
对不同分区的数据,按照Key进行排序、分组。
相同Key的Value放到一个集合中。
Reduce函数执行:对多个Map任务的输出,按照不同的分区,通过网络copy到不同的Reduce节点。
对多个Map任务的输出进行合并、排序。
写Reduce函数自己的逻辑,对输入的Key、Value处理,转换成新的Key、Value输出。
把Reduce的输出保存到文件中。
4.2 MapReduce编程4.2.1 程序入门最简单的MapReduce应用程序至少包含 3 个部分:一个 Map 函数、一个 Reduce 函数和一个 main 函数。
在运行一个mapreduce计算任务时候,任务过程被分为两个阶段:map 阶段和reduce阶段,每个阶段都是用键值对(key/value)作为输入(input)和输出(output)。
main 函数将作业控制和文件输入/输出结合起来。
下面我们用一个单词统计的例子来学习MapReduce程序执行过程。
•并行读取文本中的内容,然后进行MapReduce操作。
•Map过程:并行读取文本,对读取的单词进行map操作,每个词都以<key,value>形式生成。
一个有三行文本的文件进行MapReduce操作。
读取第一行Hello World Bye World ,分割单词形成Map。
<Hello,1> <World,1> <Bye,1> <World,1>读取第二行Hello Hadoop Bye Hadoop ,分割单词形成Map。
<Hello,1> <Hadoop,1> <Bye,1> <Hadoop,1>读取第三行Bye Hadoop Hello Hadoop,分割单词形成Map。
<Bye,1> <Hadoop,1> <Hello,1> <Hadoop,1>•Reduce操作是对map的结果进行排序,合并,最后得出词频。
经过进一步处理(combiner),将形成的Map根据相同的key组合成value数组。
<Bye,1,1,1> <Hadoop,1,1,1,1> <Hello,1,1,1> <World,1,1>循环执行Reduce(K,V[]),分别统计每个单词出现的次数。
<Bye,3> <Hadoop,4> <Hello,3> <World,2>4.2.2第一个MapReduce程序根据上一小节介绍Word Count的MapReduce执行流程,这里我们来编写真正的第一个自己的MapReduce程序。
编程时只需要用户实现map和reduce两个方法,MapReduce执行原理中的其他步骤默认无需用户实现,而是由集群完成。
编写程序时先在本地开发环境中编写好代码测试通过后将程序打包上传到Hadoop集群中执行。
开发环境与HDSF章节中一致,需将相关Jar包下载到本地工程。
为了测试程序,在编写程序前将content.txt文件上传至HDFS的/mytest4/目录下,content.txt文件的内容为一段文本:the mission of the ASF is to provide software for the publicestablished in 1999 the ASF is a charitable organizationfunded by individual donations and corporate sponsorsASF is a good organization用户编写Map端程序和Reduce端程序,具体步骤如下:1、Map端编写步骤用户编写自己的Map类,需要继承org.apache.hadoop.mapreduce.Mapper类,并重写protected void map(KEYIN key, VALUEIN value, Context context)throws IOException, InterruptedException 方法。
下面是定义了一个类TokenizerMapper。
程序代码如下:代码4-1 TokenizerMapper.java1 import java.io.IOException;2 import java.util.StringTokenizer;3 import org.apache.hadoop.conf.Configuration;4 import org.apache.hadoop.fs.Path;5 import org.apache.hadoop.io.IntWritable;6 import org.apache.hadoop.io.Text;7 import org.apache.hadoop.mapreduce.Job;8 import org.apache.hadoop.mapreduce.Mapper;9 import org.apache.hadoop.mapreduce.Reducer;10 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;11 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;1213 public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {14 IntWritable one = new IntWritable(1);15 Text word = new Text();16 public void map(Object key, Text value, Context context) throws IOException, InterruptedException {17 // 将字符串按空格分开18 StringTokenizer itr = new StringTokenizer(value.toString());19 while (itr.hasMoreTokens()) {20 word.set(itr.nextToken());21 context.write(word, one);22 }23 }24 }代码中第1~11行,是导入相关的类,因为不同版本Hadoop中同名类较多,如果使用自动导入可能会将不同包下的同名类导入,初学者在导入时应多加注意。