大数据技术原理与应用 第三篇 大数据处理与分析 (一) MapReduce

目录

第七章、 MapReduce

一、 MapReduce概述

1.1 MapReduce与传统并行计算框架的区别

1.2 MapReduce思想

1.3 Map和Reduce函数

二、 MapReduce的工作流程

2.1 概述

2.2 Shuffle过程

三、 MapReduce 编程


第七章、 MapReduce

摩尔定律:CPU性能大约每隔18个月翻一番,从2005年逐渐失效

分布式并行编程:当人们不再把性能寄托在CPU提升上,人们开始借助分布式并行编程来提高程序的性能。分布式并行程序运行在大规模计算机集群上,充分利用集群的并行处理能力。

一、 MapReduce概述

1.1 MapReduce与传统并行计算框架的区别

传统并行计算框架

MapReduce

集群架构/容错性

HPC【高性能计算集群】,共享式(共享内存/共享存储),容错性差

非共享式,容错性好

硬件/价格/扩展性

刀片服务器、高速网、SAN,价格贵,扩展性差

普通PC机,便宜,扩展性好

编程/学习难度

what-how,难

what,简单

适用场景

实时、细粒度计算、计算密集型

批处理、非实时、数据密集型

1.2 MapReduce思想

MapReduce将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数:Map和Reduce

设计思想:“计算向数据靠拢”,而不是“数据向计算靠拢”,因为移动数据需要大量的网络传输开销,移动计算更经济安全

MapReduce模型:一个存储在分布式文件系统的大规模数据集会被切分成许多独立的小数据集,这些小数据集被多个Map任务并行处理。MapReduce框架会为每个Map任务输入一个小数据集(分片),Map任务的结果将会作为Reduce任务的输入,最终由Reduce任务输出结果并写入分布式文件系统

适用MapReduce处理的前提:待处理的数据集可以分解成许多小数据集,而且每一个小数据集都可以并行处理

1.3 Map和Reduce函数

两个函数都是输入一个键值对,以一定的映射规则输出另一个键值对

函数

输入

输出

说明

Map

输入来自分布式文件系统的文件块,这些文件块的格式是任意的,同一个元素不能跨文件块存储。

【键没有唯一性】

<k1,v1>如:

<行号,“a b c”>

【同一输入元素可以产生多个相同键的多个键值对】

List(<k2,v2>)如:<“a”,1>、<“b”,1>

1.将小数据集进一步解析成一批<key,value>对,输入Map函数中进行处理

2.每个输入的<k1,v1>会输出一批<k2,v2>。<k2,v2>是计算的中间结果

Reduce

<k2,List(v2)>

如:<“a”,<1,1,1>>

<k3,v3>

<“a”,3>

Reduce的任务是将输入的一些列具有相同键的键值对以某种方式组合,然后产生输出,输出结果会合并成一个文件

输入的中间结果<k2,List(v2)>中的List(v2)表示是一批属于同一个k2的value

二、 MapReduce的工作流程

2.1 概述

1、对输入进行检验、切分【逻辑切分】,通过RecordReader对切分产生的InputSplit进行处理,加载数据并转换成适合Map任务读取的键值对

2、将一个大的MapReduce作业拆分成多个Map任务,每个Map任务间是并行系,相互之间并不进行数据传输【不需要额外的数据传输开销】,且每个Map任务在存储相应数据的数据节点上执行【运算向数据靠拢,输入文件在本地】

3、当Map任务结束后,根据用户定义的映射规则生成键值对形式的多个中间结果【中间结果保存在本地】

4、当所有的Map任务结束后,中间结果进行一定的分区、排序、合并、归并等操作,得到<key,<value1,value2>>格式的键值对,这个从无序<key,value>得到有序<key,valuelist>的过程称为Shuffle【每个Map任务都会进行Shuffle】

5、Shuffle后的中间结果将被分发到多个Reduce任务【通过MapReduce框架自身实现】,在多台机器上运行【具有相同key的键值对会被发送到同一个Reduce任务中】,Reduce任务间是并行关系

6、Reduce任务根据用户定义的逻辑对中间结果进行汇总处理,并将得到的最终结果输出到分布式文件系统的相应目录中

P.S.

Split:HDFS 以固定大小的block 为基本单位存储数据,而MapReduce 的处理单位是split。split 是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。

Map任务的数量:Hadoop为每个split创建一个Map任务,split 的多少决定了Map任务的数目。大多数情况下,理想的分片大小是一个HDFS块

Reduce任务的数量:最优的Reduce任务个数取决于集群中可用的reduce任务槽(slot)的数目,通常设置比reduce任务槽数目稍微小一些的Reduce任务个数(这样可以预留一些系统资源处理可能发生的错误)

2.2 Shuffle过程

shuffle:对Map任务的输出结果进行分区、排序、合并、归并等处理并交给Reduce的过程

该过程分为Map端操作和Reduce端操作

Map端的Shuffle过程

1、数据输入:输入数据。根据映射规则产生多个键值对

2、执行Map任务:每个Map任务会分配一个缓存,Map输出的键值对会被写入缓存,积累一定数量后再一次性写入【有利于降低寻址开销,方便I/O操作】

3、溢写(分区、排序和合并):当缓存中数据快占满内存时,启动溢写操作【启动后台另一个线程】

分区:将缓存中的数据进行按键值对分区【默认】,采用哈希函数对key处理,再对Reduce任务数量取模【hash(key) mod R】,用于将结果分配给相应Reduce任务

排序:根据key对数据进行内存排序【默认】。

Combiner合并操作【可选】:可以将key相同的value求和,得到<key,value1+value2>【合并不能改变最终结果】,文件归并时,如果溢写文件数量大于预定值(默认3)则可以再次启动Combiner,少于3不需要

4、写入磁盘:最后将数据写入磁盘,并清空缓存。每次溢写会产生新的溢写文件。

5、文件归并:在所有Map任务结束时,系统对所有溢写文件进行归并,生成一个大文件,这个大文件是分区的

6、通知Reduce:JobTracker会一直监测Map任务的执行,并通知Reduce任务来领取数据

Reduce端的Shuffle过程

1、领取数据:将保存在Map机器本地磁盘上的中间结果领取并放到Reduce任务自己机器的本地磁盘上,在Reduce任务开始前,一直在领取属于自己处理分区的数据。

2、归并数据:从Map端领取的数据会被放到Reduce任务的缓存上,同样的进行溢写操作,溢写过程中会将同key数据归并,然后排序,也可以使用用户定义的Combiner进行合并。当所有数据都领取完时,会生成一个大溢写文件。【每轮归并溢写文件的数量是设置的值,默认为10,即50个溢写文件需要5轮归并操作,得到5个大溢写文件】

3、数据输入给Reduce:若干得到的溢写大文件不会继续归并,可以直接输入Reduce任务中,减少磁盘读写开销。

三、 MapReduce 编程

MapReduce 编程框架分为三个部分

MapReduce 编程框架分为三个部分,分别创建如下三个类

public class WcMap extends Mapper<LongWritable, Text, Text, LongWritable>{
    //重写map这个方法
    //mapreduce框架每读一行数据就调用一次该方法
    protected void map(LongWritable key, Text value, Context context)
            throws IOException, InterruptedException {
        //具体业务逻辑就写在这个方法体中,而且我们业务要处理的数据已经被框架传递进来,在方法的参数中key-value
        //key是这一行数据的起始偏移量,value是这一行的文本内容
    }
}

public class WcReduce extends Reducer<Text, LongWritable, Text, LongWritable>{

    //继承Reducer之后重写reduce方法
    //第一个参数是key,第二个参数是集合。
    //框架在map处理完成之后,将所有key-value对缓存起来,进行分组,然后传递一个组<key,valus{}>,调用一次reduce方法
    protected void reduce(Text key, Iterable<LongWritable> values,Context context) 
            throws IOException, InterruptedException {
            
    }
}

public class WcRunner {

    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        //创建配置文件
        Configuration conf = new Configuration();
        //获取一个作业
        Job job = Job.getInstance(conf);
        
        //设置整个job所用的那些类在哪个jar包
        job.setJarByClass(WcRunner.class);
        
        //本job使用的mapper和reducer的类
        job.setMapperClass(WcMap.class);
        job.setReducerClass(WcReduce.class);
        
        //指定reduce的输出数据key-value类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);
        
        
        //指定mapper的输出数据key-value类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);
        
        //指定要处理的输入数据存放路径
        FileInputFormat.setInputPaths(job, new Path("hdfs://master:9000/user/cg/input"));
        
        //指定处理结果的输出数据存放路径
        FileOutputFormat.setOutputPath(job, new Path("hdfs://master:9000/user/cg/output"));
        
        //将job提交给集群运行 
        job.waitForCompletion(true);
    } 
}

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本书系统介绍涉及并行计算的体系结构、编程范例、算法与应用和标准等。覆盖了并行计算领域的传统问题,并且尽可能地采用与底层平台无关的体系结构和针对抽象模型来设计算法。书中选择MPI(Message Passing Interface)、POSIX线程和OpenMP这三个应用最广泛的编写可移植并行程序的标准作为编程模型,并在不同例子中反映了并行计算的不断变化的应用组合。本书结构合理,可读性强,加之每章精心设计的习题集,更加适合教学。 本书论述清晰,示例生动,并附有大量习题,适合作为高等院校计算机及相关专业本科生和研究生的教材或参考书。原版自1993年出版第1版到2003年出版第2版以来,已在世界范围内被广泛地采用为高等院校本科生和研究生的教材或参考书。 第1章 并行计算介绍 1.1 推动并行化 1.1.1 计算能力因素——从晶体管到浮点运算速度 1.1.2 内存及磁盘速度的因素 1.1.3 数据通信因素 1.2 并行计算适用范围 1.2.1 在工程及设计中的应用 1.2.2 科学计算中的应用 1.2.3 商业应用 1.2.4 计算机系统中的应用 1.3 本书的组织及内容 1.4 书目评注 习题 第2章 并行编程平台 2.1 隐式并行:微处理器体系结构的发展趋势 2.1.1 流水线与超标量执行 2.1.2 超长指令字处理器 2.2 内存系统性能的局限 2.2.1 使用高速缓存改善有效内存延迟 2.2.2 内存带宽的影响 2.2.3 躲避内存延迟的其他方法 2.2.4 多线程与预取间的权衡 2.3 并行计算平台剖析 2.3.1 并行平台的控制结构 2.3.2 并行平台的通信模型 2.4 并行平台的物理组织 2.4.1 理想并行计算机的体系结构 2.4.2 并行计算机互连网络 2.4.3 网络拓扑结构 2.4.4 静态互连网络评价 2.4.5 动态互连网络评价 2.4.6 多处理器系统中的高速缓存一致性 2.5 并行计算机的通信成本 2.5.1 并行计算机的消息传递成本 2.5.2 共享地址空间计算机的通信成本 2.6 互连网络的路由选择机制 2.7 进程-处理器映射的影响和映射技术 2.7.1 的映射技术 2.7.2 成本-性能平衡 2.8 书目评注 习题 第3章 并行算法设计原则 3.1 预备知识 3.1.1 分解、任务与依赖 3.1.2 粒度、并发性与任务交互 3.1.3 进程和映射 3.1.4 进程与处理器 3.2 分解技术 3.2.1 递归分解 3.2.2 数据分解 3.2.3 探测性分解 3.2.4 推测性分解 3.2.5 混合分解 3.3 任务和交互的特点 3.3.1 任务特性 3.3.2 任务间交互的特征 3.4 负载平衡的映射技术 3.4.1 静态映射方案 3.4.2 动态映射方案 3.5 包含交互开销的方法 3.5.1 最大化数据本地性 3.5.2 最小化争用与热点 3.5.3 使计算与交互重叠 3.5.4 复制数据或计算 3.5.5 使用最优聚合交互操作 3.5.6 一些交互与另一些交互的重叠 3.6 并行算法模型 3.6.1 数据并行模型 3.6.2 任务模型 3.6.3 工作池模型 3.6.4 主-从模型 3.6.5 流水线模型或生产者-消费者模型 3.6.6 混合模型 3.7 书目评注 习题 第4章 基本通信操作 4.1 一对多广播以及多对一归约 4.1.1 环或线性阵列 4.1.2 格网 4.1.3 超立方体 4.1.4 平衡二叉树 4.1.5 算法细节 4.1.6 成本分析 4.2 多对多广播和归约 4.2.1 线性阵列和环 4.2.2 格网 4.2.3 超立方体 4.2.4 成本分析 4.3 全归约与前缀和操作 4.4 散发和收集 4.5 多对多私自通信 4.5.1 环 4.5.2 格网 4.5.3 超立方体 4.6 循环移位 4.6.1 格网 4.6.2 超立方体 4.7 提高某些通信操作的速度 4.7.1 消息分裂和路由选择 4.7.2 全端口通信 4.8 小结 4.9 书目评注 习题 第5章 并行程序的解析建模 5.1 并行程序中的开销来源 5.2 并行系统的性能度量 5.2.1 执行时间 5.2.2 总并行开销 5.2.3 加速比 5.2.4 效率 5.2.5 成本 5.3 粒度对性能的影响 5.4 并行系统的可扩展性 5.4.1 并行程序的扩展特性 5.4.2 可扩展性的等效率度量 5.4.3 成本最优性和等效率函数 5.4.4 等效率函数的下界 5.4.5 并发度和等效率函数 5.5 最小执行时间和最小成本最优执行时间 5.6 并行程序渐近分析 5.7 其他可扩展性的度量 5.8 书目评注 习题 第6章 使用消息传递模式编程 6.1 消息传递编程的原理 6.2 操作构件:发送和接收操作 6.2.1 阻塞式消息传递操作 6.2.2 无阻塞式消息传递操作 6.3 MPI:消息传递接口 6.3.1 启动和终止MPI库 6.3.2 通信器 6.3.3 获取信息 6.3.4 发送和接收消息 6.3.5 实例:奇偶排序 6.4 拓扑结构与嵌入 6.4.1 创建和使用笛卡儿拓扑结构 6.4.2 实例:Cannon的矩阵与矩阵相乘 6.5 计算与通信重叠 6.6 聚合的通信和计算操作 6.6.1 障碍 6.6.2 广播 6.6.3 归约 6.6.4 前缀 6.6.5 收集 6.6.6 散发 6.6.7 多对多 6.6.8 实例:一维矩阵与向量相乘 6.6.9 实例:单源最短路径 6.6.10 实例:样本排序 6.7 进程组和通信器 6.8 书目评注 习题 第7章 共享地址空间平台的编程 7.1 线程基础 7.2 为什么要用线程 7.3 POSIX线程API 7.4 线程基础:创建和终止 7.5 Pthreads中的同步原语 7.5.1 共享变量的互斥 7.5.2 用于同步的条件变量 7.6 控制线程及同步的属性 7.6.1 线程的属性对象 7.6.2 互斥锁的属性对象 7.7 线程注销 7.8 复合同步结构 7.8.1 读-写锁 7.8.2 障碍 7.9 设计异步程序的技巧 7.10 OpenMP:基于命令的并行编程标准 7.10.1 OpenMP编程模型 7.10.2 在OpenMP中指定并发任务 7.10.3 OpenMP中的同步结构 7.10.4 OpenMP中的数据处理 7.10.5 OpenMP库函数 7.10.6 OpenMP中的环境变量 7.10.7 显式线程与基于OpenMP编程的比较 7.11 书目评注 习题 第8章 稠密矩阵算法 8.1 矩阵向量乘法 8.1.1 一维行划分 8.1.2 二维划分 8.2 矩阵与矩阵的乘法 8.2.1 简单的并行算法 8.2.2 Cannon算法 8.2.3 DNS算法 8.3 线性方程组求解 8.3.1 简单高斯消元算法 8.3.2 带部分主元选择的高斯消元算法 8.3.3 求解三角系统:回代法 8.3.4 求解线性方程组时的数值因素 8.4 书目评注 习题 第9章 排序 9.1 并行计算机中的排序问题 9.1.1 输入输出序列的存放位置 9.1.2 如何进行比较 9.2 排序网络 9.2.1 双调排序 9.2.2 将双调排序映射到超立方体和格网 9.3 冒泡排序及其变体 9.3.1 奇偶转换 9.3.2 希尔排序 9.4 快速排序 9.4.1 并行快速排序 9.4.2 用于CRCWPRAM的并行形式 9.4.3 用于实际体系结构的并行形式 9.4.4 主元选择 9.5 桶和样本排序 9.6 其他排序算法 9.6.1 枚举排序 9.6.2 基数排序 9.7 书目评注 习题 第10章 算法 10.1 定义和表示 10.2 最小生成树:Prim算法 10.3 单源最短路径:Dijkstra算法 10.4 全部顶点对间的最短路径 10.4.1 Dijkstra算法 10.4.2 Floyd算法 10.4.3 性能比较 10.5 传递闭包 10.6 连通分量 10.7 稀疏算法 10.7.1 查找最大独立集 10.7.2 单源最短路径 10.8 书目评注 习题 第11章 离散优化问题的搜索算法 11.1 定义与实例 11.2 顺序搜索算法 11.2.1 深度优先搜索算法 11.2.2 最佳优先搜索算法 11.3 搜索开销因子 11.4 并行深度优先搜索 11.4.1 并行DFS的重要参数 11.4.2 并行DFS分析的一般框架 11.4.3 负载平衡方案分析 11.4.4 终止检测 11.4.5 试验结果 11.4.6 深度优先分支定界搜索的并行形式 11.4.7 IDA*的并行形式 11.5 并行最佳优先搜索 11.6 并行搜索算法的加速比异常 11.7 书目评注 习题 第12章 动态规划 12.1 动态规划概述 12.2 串行一元DP形式 12.2.1 最短路径问题 12.2.2 0/1背包问题 12.3 非串行一元DP形式 12.4 串行多元DP形式 12.5 非串行多元DP形式 12.6 综述与讨论 12.7 书目评注 习题 第13章 快速傅里叶变换 13.1 串行算法 13.2 二进制交换算法 13.2.1 全带宽网络 13.2.2 有限带宽网络 13.2.3 并行快速傅里叶变换中的额外计算 13.3 转置算法 13.3.1 二维转置算法 13.3.2 转置算法的推广 13.4 书目评注 习题 附录A 函数的复杂度与阶次分析 索引
系统中,HadoopMapReduce A:大数据技术原理应用第三章主要介绍了分布式文件系统和MapReduce并行计算框架中的Hadoop技术,包括Hadoop的概念、特点、架构、组件、安装、使用等方面。在分布式文件系统中,Hadoop使用HDFS作为其基础架构,实现文件存储和访问的高可用性和可扩展性,能够支持大规模的数据存储和处理。而MapReduceHadoop提供的一种分布式并行计算框架,能够将大规模数据处理任务分解成多个小任务,在分布式计算环境中进行并行计算,从而提高数据处理能力和效率。 Hadoop的组件包括HDFS、YARN和MapReduce。其中,HDFS作为文件存储系统,YARN是Hadoop的资源管理框架,用于管理集群资源,对作业进行调度和监控。MapReduceHadoop的分布式计算框架,其基本思想是将计算任务分解成多个小任务,并在分布式计算环境中进行并行计算。在MapReduce执行过程中,Map函数用于将输入数据划分为若干份,并由多个Map任务同时处理,生成键值对;Reduce函数用于对Map任务生成的键值对进行汇总和统计,得到最终的结果。 Hadoop的安装和使用需要先配置环境,然后下载和安装Hadoop软件包,进行集群配置和启动,具体的安装和使用过程在第三章中有详细说明。 总结来说,Hadoop技术是大数据处理中非常重要的基础技术之一,能够支持大规模数据存储和处理,提高数据处理能力和效率。MapReduce并行计算框架Hadoop的重要组件,能够将大规模数据处理任务分解成多个小任务,在分布式计算环境中进行并行计算

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月望曦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值