3.《hadoop实战》Hadoop与分布式开发

    我们通常说的分布式系统其实是分布式软件系统,即支持分布式处理的软件系统,它是在通信网络互联的多处理机体系结构上执行任务的,包括分布式操作系统、分布式程序设计语言及其编译(解帮)系统、分布式文件系统和分布式数据库系统等。Hadoop是分布式系统中处理文件的软件系统中文件系统 这一层的软件, 它实现了分布式文件系统和部分分布式 数据库的功能。 Hadoop中的分布式文件系统 HDFS能够实现数据 在计算机集群组成的云上高效的存储和管理, Hadoop中的并行编程框架 MapReduce 能够让用户编写的Hadoop井行应用程序运行更加简化。

    Hadoop上的并行应用程序开发 是基于MapReduce编程框架的。 MapReduce编程模型的原理是: 利用一个输入的key/value对集合来产生一个输出的key/value对集合。 MapReduce 库的用户 用两个函数来表达这个 计算 :Map和Reduce 。用户自定义的map函数接收一个输入的key/value对, 然后产生一个中间 key/value对的集合。 MapReduce把所有具有相同 key值的value集合在-起, 然后传递给reduce函数。

    用户自定义的reduce函数接收key和相关的value集合。reduce函数合并这些value值,形成一个较小的value集合。 一般来说, 每次reduce函数调用只产生0或1个输出的value值。 通常我们通过 一个选代器把中间的value值提供给reduce函数, 这样就可以处理无挂全部放入 内存中的大量的value值集合了。

    上图是MapReduce的数据流图, 这个过程简而言之就是将 大数据集分解为成百上千个小 数据集, 每个(或若干个 )数据集分别由集群中的一个节点〈 →般就是一台普通的计算机〉进行 处理并生成中间结果, 然后这些中间结果又由 大量的节点合并, 形成最终结果。图1-4也指出了MapReduce框架下并行程序中的三个主要函数: map、reduce、 main。 在这个结构中 , 需要 用户完成的工作仅仅是根据任务编写 map和reduce两个函数。

    Map Reduce 计算模型非常适合在大量 计算机组成的大规模集群上并行运行 。 上图中的每 -个 map任务和每一个reduce任务 均可以同时运行于一个单独的计算节点上, 可想而知, 其运算效率是很高的, 那么这样的并行 计算 是如何做到的呢?下面 将简单介绍一下其原理。

    1.数据分布存储
    Hadoop 分布式文件系统(HDFS)由一个名称节点(NameNode)和N个 数据节点(DataNode)组成 ,每个节点均是一台普通的计算机 。 在使用方式上HDFS与我们熟悉的单 机文件系统非常类似, 它可以创建目录, 创建、 复制和删除文件 , 以及查看文件的内容等。但HDFS成层把文件切割成了Block, 然后这些Block 分散地存储子不同的DataNode上, 每个Block还可以复制数份数据 存储于不同的DataNode上, 达到容错容灾的目的。NameNode则是整个 HOPS的核心, 它通过维护一些数据结构 来记录每一个文件被切割成了多少个Block、这些Block可以从哪些DataNode中获得,以及各个DataNode的状态等重要信息。

    2.分布式并行计算
    Hadoop中有一个作为主控的JobTracker,用于调度和管理其他的TaskTracker,Job Tracker可以运行于集群中的任意一台计算机上。TaskTracker则负责执行任务,色必须运 行于DataNode上,也就是说DataNode既是数据存储节点,也是计算节点。JobTracker将 map任务和reduce任务分发给空闲的TaskTracker,让这些任务并行运行,并负责监控任务的运行情况。如果某一个TaskTracker出了故障,JobTracker会将其负责的任务转交给另一个空闲的TaskTracker重新运行。

    3.本地计算
    数据存储在哪一台计算机上,就由哪台计算机进行这部分数据的计算,这样可以减少数据在网络上的传输,降低对网络带宽的需求。在Hadoop这类基于集群的分布式并行系统中,计算节点可以很方便地扩充,它所能够提供的计算能力近乎无限,但是由于数据需要在不同的计算机之间流动,故网络带宽变成了瓶颈,“本地计算”是一种最有效的节约网络带宽的手段,业界把这形容为“移动计算比移动数据更经济”。

   4.任务粒度

    把原始大数据集切割成小数据集时,通常让小数据集小于或等于HDFS中-个Block的大小(默认是64M酌,这样能够保证一个小数据集是位于一台计算机上的,便于本地计算。有M个小数据集待处理,就启动M个map任务,注意这M个map任务分布于N台计算机上,它们会并行运行,reduce任务的数量则可由用户指定。

    5.鼓据分割(Pa「tition)

    把map任务输出的中间结果按key的范围划分成R份(R是预先定义的reduce任务的个数),划分时通常使用hash函数(如:hash(key) mod R),这样可以保证某一范围内的key一定是由一个reduce任务来处理的,可以简化Reduce的过程。

    6.数据合并(C'ombine)

    在数据分割之前,还可以先对中间结果进行数据合并(Combine),即将中间结果中有相同key的<key,value>对合并成一对。Combine的过程与reduce的过程类似,很多情况下可 以直接使用reduce函数,但Combine是作为map任务的一部分,在执行完map函数后紧接着执行的。Combine能够减少中间结果中<key,value>对的数目,从而降低网络流量。

    7. Reduce
    Map任务的中间结果在做完Combine和Partition之后,以文件形式存于本地磁盘上。中间结果文件的位置会通知主控JobTracker, Job Tracker再通知reduce任务到哪一个DataNode上去取中间结果。注意,所有的map任务产生的中间结果均按其key值用同一个 hash函数划分成了R份,R个reduce任务各自负责一段key区间。每个reduce需要向许多个map任务节点取得落在其负责的key区阎内的中间结果,然后执行reduce函数,形成个最终的结果文件。

    8.任务管道
    有R个reduce任务,就会有R个最终结果,很多情况下这R个最终结果并不需要合并成一个最终结果, 因为这R个最终结果又可以作为另 个计算任务的输入, 开始另 个并行计算任务, 这也就形成了任务管道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值