没有合适的资源?快使用搜索试试~ 我知道了~
用 Hadoop 进行分布式并行编程
4星 · 超过85%的资源 需积分: 9 22 下载量 200 浏览量
2010-03-10
19:44:50
上传
评论
收藏 524KB PDF 举报
温馨提示
试读
39页
用 Hadoop 进行分布式并行编程 用 Hadoop 进行分布式并行编程 用 Hadoop 进行分布式并行编程
资源推荐
资源详情
资源评论
用 Hadoop 进行分布式并行编程第 1 部分
Hadoop 简介
Hadoop 是一个开源的可运行于大规模集群上的分布式并行编程框架,由
于分布式存储对于分布式编程来说是必不可少的,这个框架中还包含了一个分布
式文件系统 HDFS( Hadoop Distributed File System )。也许到目前为止,
Hadoop 还不是那么广为人知,其最新的版本号也仅仅是 0.16,距离 1.0 似
乎都还有很长的一段距离,但提及 Hadoop 一脉相承的另外两个开源项目 Nu
tch 和 Lucene ( 三者的创始人都是 Doug Cutting ),那绝对是大名鼎鼎。L
ucene 是一个用 Java 开发的开源高性能全文检索工具包,它不是一个完整的
应用程序,而是一套简单易用的 API 。在全世界范围内,已有无数的软件系统,
Web 网站基于 Lucene 实现了全文检索功能,后来 Doug Cutting 又开创了
第一个开源的 Web 搜索引擎(http://www.nutch.org) Nutch, 它在 Luce
ne 的基础上增加了网络爬虫和一些和 Web 相关的功能,一些解析各类文档格
式的插件等,此外,Nutch 中还包含了一个分布式文件系统用于存储数据。从
Nutch 0.8.0 版本之后,Doug Cutting 把 Nutch 中的分布式文件系统以及
实现 MapReduce 算法的代码独立出来形成了一个新的开源项 Hadoop。Nut
ch 也演化为基于 Lucene 全文检索以及 Hadoop 分布式计算平台的一个开
源搜索引擎。
基于 Hadoop,你可以轻松地编写可处理海量数据的分布式并行程序,并将
其运行于由成百上千个结点组成的大规模计算机集群上。从目前的情况来看,H
adoop 注定会有一个辉煌的未来:"云计算"是目前灸手可热的技术名词,全球
各大 IT 公司都在投资和推广这种新一代的计算模式,而 Hadoop 又被其中几
家主要的公司用作其"云计算"环境中的重要基础软件,如:雅虎正在借助 Hado
op 开源平台的力量对抗 Google, 除了资助 Hadoop 开发团队外,还在开发
基于 Hadoop 的开源项目 Pig, 这是一个专注于海量数据集分析的分布式计
算程序。Amazon 公司基于 Hadoop 推出了 Amazon S3 ( Amazon Sim
ple Storage Service ),提供可靠,快速,可扩展的网络存储服务,以及一个
商用的云计算平台 Amazon EC2 ( Amazon Elastic Compute Cloud )。
在 IBM 公司的云计算项目--"蓝云计划"中,Hadoop 也是其中重要的基础软
件。Google 正在跟 IBM 合作,共同推广基于 Hadoop 的云计算。
迎接编程方式的变革
在摩尔定律的作用下,以前程序员根本不用考虑计算机的性能会跟不上软件
的发展,因为约每隔 18 个月,CPU 的主频就会增加一倍,性能也将提升一倍,
软件根本不用做任何改变,就可以享受免费的性能提升。然而,由于晶体管电路
已经逐渐接近其物理上的性能极限,摩尔定律在 2005 年左右开始失效了,人
类再也不能期待单个 CPU 的速度每隔 18 个月就翻一倍,为我们提供越来越
快的计算性能。Intel, AMD, IBM 等芯片厂商开始从多核这个角度来挖掘 CP
U 的性能潜力,多核时代以及互联网时代的到来,将使软件编程方式发生重大
变革,基于多核的多线程并发编程以及基于大规模计算机集群的分布式并行编程
是将来软件性能提升的主要途径。
许多人认为这种编程方式的重大变化将带来一次软件的并发危机,因为我们
传统的软件方式基本上是单指令单数据流的顺序执行,这种顺序执行十分符合人
类的思考习惯,却与并发并行编程格格不入。基于集群的分布式并行编程能够让
软件与数据同时运行在连成一个网络的许多台计算机上,这里的每一台计算机均
可以是一台普通的 PC 机。这样的分布式并行环境的最大优点是可以很容易的
通过增加计算机来扩充新的计算结点,并由此获得不可思议的海量计算能力,
同时又具有相当强的容错能力,一批计算结点失效也不会影响计算的正常进行以
及结果的正确性。Google 就是这么做的,他们使用了叫做 MapReduce 的并
行编程模型进行分布式并行编程,运行在叫做 GFS ( Google File System )
的分布式文件系统上,为全球亿万用户提供搜索服务。
Hadoop 实现了 Google 的 MapReduce 编程模型,提供了简单易用的
编程接口,也提供了它自己的分布式文件系统 HDFS,与 Google 不同的是,H
adoop 是开源的,任何人都可以使用这个框架来进行并行编程。如果说分布式
并行编程的难度足以让普通程序员望而生畏的话,开源的 Hadoop 的出现极大
的降低了它的门槛,读完本文,你会发现基于 Hadoop 编程非常简单,无须任
何并行开发经验,你也可以轻松的开发出分布式的并行程序,并让其令人难以置
信地同时运行在数百台机器上,然后在短时间内完成海量数据的计算。你可能会
觉得你不可能会拥有数百台机器来运行你的并行程序,而事实上,随着"云计算"
的普及,任何人都可以轻松获得这样的海量计算能力。例如现在 Amazon 公司
的云计算平台 Amazon EC2 已经提供了这种按需计算的租用服务,有兴趣的
读者可以去了解一下,这篇系列文章的第三部分将有所介绍。
掌握一点分布式并行编程的知识对将来的程序员是必不可少的,Hadoop
是如此的简便好用,何不尝试一下呢?也许你已经急不可耐的想试一下基于 Ha
doop 的编程是怎么回事了,但毕竟这种编程模型与传统的顺序程序大不相同,
掌握一点基础知识才能更好地理解基于 Hadoop 的分布式并行程序是如何编
写和运行的。因此本文会先介绍一下 MapReduce 的计算模型,Hadoop 中的
分布式文件系统 HDFS, Hadoop 是如何实现并行计算的,然后才介绍如何安
装和部署 Hadoop 框架,以及如何运行 Hadoop 程序。
MapReduce 计算模型
MapReduce 是 Google 公司的核心计算模型,它将复杂的运行于大规模
集群上的并行计算过程高度的抽象到了两个函数,Map 和 Reduce, 这是一个
令人惊讶的简单却又威力巨大的模型。适合用 MapReduce 来处理的数据集
(或任务)有一个基本要求: 待处理的数据集可以分解成许多小的数据集,而且每
一个小数据集都可以完全并行地进行处理。
图 1. MapReduce 计算流程
图一说明了用 MapReduce 来处理大数据集的过程, 这个 MapReduce
的计算过程简而言之,就是将大数据集分解为成百上千的小数据集,每个(或若
干个)数据集分别由集群中的一个结点(一般就是一台普通的计算机)进行处理并
生成中间结果,然后这些中间结果又由大量的结点进行合并, 形成最终结果。
计算模型的核心是 Map 和 Reduce 两个函数,这两个函数由用户负责实
现,功能是按一定的映射规则将输入的 <key, value> 对转换成另一个或一批
<key, value> 对输出。
表一 Map 和 Reduce 函数
函数 输入 输出 说明
Map <k1, v1> List(<k2,v2>)
1. 将小数据集进一步解析成一批
<key,value> 对,输入 Map 函数
中进行处理。
2. 每一个输入的 <k1,v1> 会输出
一批 <k2,v2>。 <k2,v2> 是计算
的中间结果。
Reduce
<k2,List(v2)> <k3,v3>
输入的中间结果 <k2,List(v2)> 中
的 List(v2) 表示是一批属于同一个
k2 的 value
以一个计算文本文件中每个单词出现的次数的程序为例,<k1,v1> 可以是
<行在文件中的偏移位置, 文件中的一行>,经 Map 函数映射之后,形成一批
中间结果 <单词,出现次数>, 而 Reduce 函数则可以对中间结果进行处理,
将相同单词的出现次数进行累加,得到每个单词的总的出现次数。
基于 MapReduce 计算模型编写分布式并行程序非常简单,程序员的主要
编码工作就是实现 Map 和 Reduce 函数,其它的并行编程中的种种复杂问
题,如分布式存储,工作调度,负载平衡,容错处理,网络通信等,均由 Map
Reduce 框架(比如 Hadoop )负责处理,程序员完全不用操心。
回页首
四 集群上的并行计算
MapReduce 计算模型非常适合在大量计算机组成的大规模集群上并行运
行。图一中的每一个 Map 任务和每一个 Reduce 任务均可以同时运行于一个
单独的计算结点上,可想而知其运算效率是很高的,那么这样的并行计算是如何
做到的呢?
数据分布存储
Hadoop 中的分布式文件系统 HDFS 由一个管理结点 ( NameNode )
和N个数据结点 ( DataNode )组成,每个结点均是一台普通的计算机。在使用
上同我们熟悉的单机上的文件系统非常类似,一样可以建目录,创建,复制,删
除文件,查看文件内容等。但其底层实现上是把文件切割成 Block,然后这些
Block 分散地存储于不同的 DataNode 上,每个 Block 还可以复制数份存储
于不同的 DataNode 上,达到容错容灾之目的。NameNode 则是整个 HDF
S 的核心,它通过维护一些数据结构,记录了每一个文件被切割成了多少个 Bl
ock,这些 Block 可以从哪些 DataNode 中获得,各个 DataNode 的状态
等重要信息。如果你想了解更多的关于 HDFS 的信息,可进一步阅读参考资料:
The Hadoop Distributed File System:Architecture and Design
分布式并行计算
Hadoop 中有一个作为主控的 JobTracker,用于调度和管理其它的 Tas
kTra
本地计算
数据存储在哪一台计算机上,就由这台计算机进行这部分数据的计算,这样
可以
cker, JobTracker 可以运行于集群中任一台计算机上。TaskTracker 负
责执行任务,必须运行于 DataNode 上,即 DataNode 既是数据存储结点,
也是计算结点。 JobTracker 将 Map 任务和 Reduce 任务分发给空闲的 Ta
skTracker, 让这些任务并行运行,并负责监控任务的运行情况。如果某一个
TaskTracker 出故障了,JobTracker 会将其负责的任务转交给另一个空闲的
TaskTracker 重新运行。
减少数据在网络上的传输,降低对网络带宽的需求。在 Hadoop 这样的基
于集群的分布式并行系统中,计算结点可以很方便地扩充,而因它所能够提供的
计算能力近乎是无限的,但是由是数据需要在不同的计算机之间流动,故网络带
宽变成了瓶颈,是非常宝贵的,“本地计算”是最有效的一种节约网络带宽的手段,
业界把这形容为“移动计算比移动数据更经济”。
图 2. 分布存储与并行计算
任务粒度
把原始大数据集切割成小数据集时,通常让小数据集小于或等于 HDFS 中
一个
Partition
把 Map 任务输出的中间结果按 key 的范围划分成 R 份( R 是预先定
义的 o
Combine
在 partition 之前,还可以对中间结果先做 combine,即将中间结果中有
相同
Reduce 任务从 Map 任务结点取中间结果
Map 任务的中间结果在做完 Combine 和 Partition 之后,以文件形式
存于
Block 的大小(缺省是 64M),这样能够保证一个小数据集位于一台计算
机上,便于本地计算。有 M 个小数据集待处理,就启动 M 个 Map 任务,注
意这 M 个 Map 任务分布于 N 台计算机上并行运行,Reduce 任务的数量
R 则可由用户指定。
Reduce 任务的个数),划分时通常使用 hash 函数如: hash(key) m
d R,这样可以保证某一段范围内的 key,一定是由一个 Reduce 任务来处理,
可以简化 Reduce 的过程。
key 的 <key, value> 对合并成一对。combine 的过程与 Reduce
的过程类似,很多情况下就可以直接使用 Reduce 函数,但 combine 是作为
Map 任务的一部分,在执行完 Map 函数后紧接着执行的。Combine 能够减
少中间结果中 <key, value> 对的数目,从而减少网络流量。
本地磁盘。中间结果文件的位置会通知主控 JobTracker, JobTracker 再
通知 Reduce 任务到哪一个 DataNode 上去取中间结果。注意所有的 Map
任务产生中间结果均按其 Key 用同一个 Hash 函数划分成了 R 份,R 个 R
剩余38页未读,继续阅读
资源评论
- daishiju2012-06-26不错哦,入门级的部署和程序开发过程描述
fengyingcong1991
- 粉丝: 21
- 资源: 51
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 《CKA/CKAD应试指南/从docker到kubernetes 完全攻略》学习笔记 第1章docker基础(1.1-1.4)
- 基于python实现的水下压缩空气储能互补系统建模仿真与经济效益分析+源代码+论文
- 华中科技大学-自然语言处理实验,Bi-LSTM+CRF的中文分词框架,并且利用基于深度学习的方法进行中文命名实体识别++源码报告
- 基于动态罚函数的铁路车流分配与径路优化模型python源码
- 鱼群算法求解组环问题python源码+文档说明
- 基于决策优化的多波束测深测线规划模型MATLAB代码
- 课程设计-基于python实现的多目标优化算法求解带时间窗的车辆路径规划问题+源代码+文档说明+界面截图+pptx
- 基于通信信号与通信系统的MATLAB仿真源码-课程设计
- 嵌入式-信号机制(概念,发送,定时,捕捉,SIGCHLD 信号实现回收子进程)
- c语言管理系统大一大二笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功