`
backsnow
  • 浏览: 127243 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用 MapReduce 解决与云计算相关的 Big Data 问题(转载)

 
阅读更多

揭示 MapReduce 和云计算为什么非常适合处理大量数据

Noah Gift, 助理工程主管, AT&T Interactive

 

简介: 对于非常复杂的计算,有时候需要能够访问更多物理和虚拟资源才能得到结果,但是在组织内建立网格系统要面对资源、后勤和技术障碍,甚至有一些行政障碍。云计算能够解决这个问题。通过让把两个数字相加的位置变得透明和不相关,云计算可以与 MapReduce 函数完美地结合以处理大量 Big Data 计算。作者讨论云计算和 MapReduce 为什么有助于解决 Big Data 问题。

 

 

发布日期: 2011 年 1 月 12 日 
级别: 初级 原创语言: 英文 
访问情况 4150 次浏览 
建议: 0 (添加评论)

1 star2 stars3 stars4 stars5 stars 平均分 (共 8 个评分 )

 

MapReduce 词汇表

Mapper:这个函数执行一个工作单元。工作可以是把两个数字相加这样的简单操作。它返回一个键(比如 IP 地址或单词)和一个值(比如计数)。

Reducer:这个函数把一个序列中的所有元素组合起来。

分布式文件系统:一个共享的文件系统,处理数据的所有计算机都能够访问它。

微观经济学指出,比起让大多数成员来执行要在该系统中存在所必需的活动,基于专业分工的系统生产力更高。换句话说,对于每个任务,全能的人的生产力比不上专门从事特定任务的人。这称为比较优势 — 如果一个人相当精通某种服务,而不熟悉其他服务,他在提供这种服务方面就具有优势。专业分工可以促进特定技能的提升。(Robert Frank 和 Ben Bernanke 所著的 Principles of Microeconomics 很好地论述了这一现象;有一个故事说,Peace Corps 的一位志愿者在尼泊尔雇佣了一位名叫 Birkhaman 的厨师;这位厨师几乎无所不能;从宰羊到修理闹钟,他什么都会干。在尼泊尔,即使是水平最低的工人也能够提供很多种服务。)

云计算就是比较优势原理的直接示例。在本文中,我将讨论 MapReduce 编程模式(最初为对并行的复杂性进行抽象而设计)为什么非常适合云计算,尤其是在处理涉及大量数据的问题时。

通过让把两个数字相加的位置变得透明不相关,可以在 MapReduce 抽象的基础上完美进行云计算。在研究示例之前,我们先看看 MapReduce 为什么很成功。

为什么要在云中使用 MapReduce

MapReduce 编程模式是在 Google 开发出来的。Google 工程师发表的文章 "MapReduce: Simplified Data Processing on Large Clusters" 清楚地解释了 MapReduce 的工作方式。这篇文章导致的结果是,从 2004 年到现在出现了许多开放源码的 MapReduce 实现。

MapReduce 系统获得成功的原因之一是,它为编写需要大规模并行处理的代码提供了简单的编程模式。它受到了 Lisp 的函数编程特性和其他函数式语言的启发。

现在,讨论 MapReduce 和云计算为什么非常相配。MapReduce 的关键特点是它能够对开发人员隐藏操作并行语义 — 并行编程的具体工作方式

即使您的公司拥有数千台计算机(这几乎不可能),这个特点也非常有意义。即使组织有多余的处理能力,要想在组织内建立网格,也常常要克服许多技术、行政和后勤障碍。

分布式计算中的 Erlang

云计算的潮流催生了许多新东西,包括 Erlang。Erlang 是一种独特的编程语言,它提供了用来描述操作系统的许多特性。这些特殊的特性让它成为构建大型分布式系统的理想语言。很自然,许多分布式算法的 “云” 实现都是用 Erlang 编写的,比如 CouchDB 或 Disco。甚至在云这个词出现之前,就已经使用 Erlang 构建云系统了。

突然之间,云计算成了非常引人注目的思想。

有了云,开发人员就可以通过编写脚本供应任意数量的计算机,运行 MapReduce 作业,而且只按照使用每个系统的时间付费。使用时间可以是 10 分钟,也可以是 10 个月,无论是哪种情况,都同样简便。

这种模式的精彩案例出现在 Yelp("Real people. Real reviews®: A review site for local businesses")。在此公司的工程博客上,最近发表了一篇关于 如何使用 MapReduce 增强特性 的文章,题目为 “People Who Viewed This Also Viewed...”。这是一个典型的 Big Data 问题,因为 Yelp 每天生成 100GB 的日志数据。

工程师最初建立了自己的 Hadoop 集群,但是最终他们编写了自己的 MapReduce 框架 mrjob,它在 Amazon 的 Elastic MapReduce 服务上运行。Yelp 的搜索和数据挖掘工程师 Dave M 说:

我们如何增强 People Who Viewed this Also Viewed... 特性?正如您所猜测的,我们使用 MapReduce。MapReduce 是把大任务分解为小任务的最简单的方法。Mapper 读取输入行并返回 (key, value) 元组。把每个键和对应的所有值发送给一个 Reducer ... 我们在 mrjob Python 框架中编写了这个简单的 MapReduce 作业,它执行单词频率统计。

Dave M 还说:

我们以前所做的像许多公司一样运行 Hadoop 集群一样 ... 当我们把代码放到 web 服务器上时,就已经把它送到 Hadoop 计算机上。

这不错,因为我们的作业可以引用代码库中的任何其他代码。

这也很不好。在把作业放进生产环境之前,根本无法确定它是否有效。最糟糕的是,我们的集群在大多数时候空闲着,甚至时常出现一个非常大的作业,会占用所有节点,所有其他任务不得不等待。

在 Amazon 云上运行的 MapReduce 帮助 Yelp 淘汰了 Hadoop 集群。经过一年时间,Yelp 的 mrjob 框架现在非常稳定了,所以 Yelp 现在在 GitHub 上共享它。

云计算和 MapReduce 的组合看起来非常适合处理 Big Data 作业。现在,讲解如何处理大量日志数据。

真实环境中的日志文件处理

许多人都要面对的一个真实问题是如何处理大量日志数据。清单 1 中的代码示例(也可以下载)演示我如何只使用 Python 的多处理模块汇总 6.3GB 的 Internet Information Services (IIS) 日志文件。在一台 MacBook Pro 笔记本上,它只用大约 2 分钟就运行完了,结果是生成了最常出现的 25 个 IP 地址。


清单 1. 使用 Python 的 MP 模块汇总 6.3GB 的日志文件 
				
Code Listing:  iis_map_reduce_ipsum.py
"""N-Core Map Reduce Log Parser/Summation"""

from collections import defaultdict
from operator import itemgetter
from glob import glob
from multiprocessing import Pool, current_process
from itertools import chain

def ip_start_mapper(logfile):
    log = open(logfile)
    for line in log:
        yield line.split()

def ip_cut(lines):
    for line in lines:
        try:
            ip = line[8]
        except IndexError:
            continue
        yield ip, 1

def mapper(logfile):
    print "Processing Log File: %s-%s" % (current_process().name, logfile)
    lines = ip_start_mapper(logfile)
    cut_lines = ip_cut(lines)
    return ip_partition(cut_lines)

def ip_partition(lines):
    partitioned_data = defaultdict(list)
    for ip, count in lines:
        partitioned_data[ip].append(count)
    return partitioned_data.items()        

def reducer(ip_key_val):
    ip, count = ip_key_val
    return (ip, sum(sum(count,[])))

def start_mr(mapper_func, reducer_func, files, processes=8, chunksize=1):
    pool = Pool(processes)
    map_output = pool.map(mapper_func, files, chunksize)
    partitioned_data = ip_partition(chain(*map_output))
    reduced_output = pool.map(reducer_func, partitioned_data)
    return reduced_output

def print_report(sort_list, num=25):
    for items in sort_list[0:num]:
        print "%s, %s" % (items[0], items[1])
def run():
    files = glob("*.log")
    ip_stats = start_mr(mapper, reducer, files)
    sorted_ip_stats = sorted(ip_stats, key=itemgetter(1), reverse=True)
    print_report(sorted_ip_stats)
    
if __name__ == "__main__":
    run()

图 1 以图形方式说明操作过程。


图 1. IIS 日志文件 MapReduce 图
IIS 日志文件 MapReduce 图 

我们来研究一下代码。您可以看到它非常简短,只有大约 50 行:

  • mapper 函数提取出每行中的 IP 地址并返回它和值 1。这是 (key,value) 提取阶段,这在生成的每个进程中执行。当产生结果时,把结果收集到一个链式的迭代器中(参见 more on chain(*iterables) and other Python itertools),为缩减阶段做好准备。这称为数据分区

  • 在 MapReduce 生命周期中,下一步是浓缩和汇总所有中间结果。这由示例中的缩减函数完成,包含缩减阶段。 

  • 最后,生成一个很大的列表并输出前 25 个结果。

使用多处理模块是为了便于解释 MapReduce,但是这段代码只需稍加修改,就可以在其他一些 MapReduce 云上运行。这个作业的完整输出见清单 2。


清单 2. 运行的清单 1 的完整输出
				
lion% time python iisparse.py
Processing Log File: PoolWorker-1-ex100812.log
Processing Log File: PoolWorker-2-ex100813.log
Processing Log File: PoolWorker-3-ex100814.log
Processing Log File: PoolWorker-4-ex100815.log
Processing Log File: PoolWorker-5-ex100816.log
Processing Log File: PoolWorker-6-ex100817.log
Processing Log File: PoolWorker-7-ex100818.log
Processing Log File: PoolWorker-8-ex100819.log
Processing Log File: PoolWorker-7-ex100820.log
Processing Log File: PoolWorker-3-ex100821.log
Processing Log File: PoolWorker-8-ex100822.log
Processing Log File: PoolWorker-4-ex100823.log
Processing Log File: PoolWorker-6-ex100824.log
Processing Log File: PoolWorker-1-ex100825.log
Processing Log File: PoolWorker-2-ex100826.log
10.0.1.1, 24047
10.0.1.2, 22667
10.0.1.4, 20234
10.0.1.5, 18180
[...output supressed for space, and IP addresses changed for privacy]
python iisparse.py  57.40s user 7.48s system 54% cpu 1:59.47 total

结束语

下一步

当然,要看一下本文的 参考资料。您可能希望重点关注 “自然语言处理” 和 “进一步了解本文中的主题”。

另外,下载 Yelp 的 mrjob 和 Apache Hadoop 的 IBM 发行版并做实验。

严格地说,云计算可以意味着许多活动,包括在数据中心中的虚拟机上运行顺序的脚本。在本文中,我应用 MapReduce 和云计算背后的一些理论解决汇总大量数据这个实际问题。

基于云的 MapReduce 系统既有开放源码的,也有商用产品。您可以应用从本文学到的知识处理数 PB 的日志文件;因此,MapReduce 抽象是一种非常有用的工具,尤其是在云环境中。


下载

描述 名字 大小 下载方法
本文的 Python 示例脚本 MapReducePythonScript.zip 1KB HTTP

关于下载方法的信息


参考资料

学习

获得产品和技术

  • 可以从 GitHub 获取 Yelp 的 mrjob 框架。 

讨论

关于作者

/developerworks/i/p-nogift.jpg

Noah Gift 是 O'Reilly 出版的 Python For UNIX and Linux System Administration 的作者之一,现在还在为 Manning 撰写 Google App Engine In Action 一书。他是一名作家、演说家、顾问和社区负责人,并为 Red Hat MagazineO'Reilly 和 MacTech 撰稿。他的咨询公司的网站是 http://www.giftcs.com,在 http://noahgift.com 可以找到他的许多作品。还可以在 Twitter(http://twitter.com/noahgift)上关注他的近况。

他拥有加州洛杉矶的 CIS 的硕士学位,以及加州 Poly San Luis Obispo 的营养科学学士学位。他是通过 Apple 和 LPI 认证的系统管理员,曾经在许多公司工作过,如加利福尼亚理工学院、Disney Feature Animation、Sony Imageworks、Turner Studios 和 Weta Digital。在空闲的时候,他喜欢和妻子 Leah 以及他们的儿子 Liam 一起度过,谱写钢琴曲、参加马拉松比赛以及积极地参与体育活动。

分享到:
评论

相关推荐

    Python课程设计 课设 手写数字识别卷积神经网络源码+文档说明.zip

    高分设计源码,详情请查看资源内容中使用说明 高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明

    SpringBoot2.0快速开发框架权限.rar

    SpringBoot2.0快速开发框架权限.rarSpringBoot2.0快速开发框架权限.rarSpringBoot2.0快速开发框架权限.rar

    大语言模型的微调和推理baichuan7B, chatglm2-6B, Qwen-7B-chat源码.zip

    详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;

    基于Qt与STM32平台开发的汽车车机系统上位机

    基于Qt开发的汽车车机系统上位机 & 常见类型汽车传感器信号模拟发生器 任务和要求: 任务: 根据发动机测控系统信号需求,设计一套发动机信号模拟器人机交互系统,能够根据需要向下位机输出控制信号,使其输出发动机测控系统需要的传感器模拟信号,给发动机测控系统的开发提供方便。 要求: 1.设计应包含上位机与下位机的交互程序及人机交互界面的设计,与下位机设计相结合,使其能够实现全部类型发动机传感器信号的模拟输出及显示。 2.设计中需要采用模块化开发程序。 3.所设计的人机交互界面简洁合理。 4.应考虑所设计系统的实用性。 具体工作内容: 1.根据设计目标,查阅相关设计标准和设计方法资料,对发动机信号模拟器设计中的关键工程原理和工程方法进行提炼,并围绕关键问题进行国内外设计现状调研,开展分析、评价与总结,确定主要研究内容,制定设计技术路线,制定设计计划(周进度),撰写开题报告,并进行开题答辩,开题报告参考文献应不少于15篇(其中外文文献不少于 4 篇,近五年文献不少于三分之一)。 2.根据设计要求和技术指标,进行满足功能原理需求的多方案拟定,考虑安全、 标准等多因素进行技术性与经济性评价

    实验-三、数据库安全性(目的、要求和模板).doc

    实验-三、数据库安全性(目的、要求和模板).doc

    毕设绝技 - 4天玩乐完成商城系统完整资料day02

    文件为第二天视频教程 在毕业设计的挑战中,有时我们需要以极短的时间完成一个相对复杂的项目,比如一个商城系统。虽然时间紧迫,但只要我们合理规划、高效执行,完全有可能在4天内完成一个基础且功能完备的商城系统。 商城系统,也被称为网上商城系统或Online Mall system,是一种功能完善的网上销售系统。该系统主要包括产品发布、在线订购、在线支付、在线客服等功能模块,旨在为企业或个人提供一个在线销售平台,实现商品的展示、交易和客户服务。 商城系统具有多种核心功能,如商品管理、订单管理、用户管理和营销管理。商品管理功能支持商品的添加、编辑、删除、分类和搜索,满足商家对商品信息的全面管理需求。订单管理功能则涵盖订单的生成、支付、发货、退款和评价等环节,确保交易流程的顺畅进行。用户管理功能包括用户的注册、登录、个人信息管理和收货地址管理等,提升用户体验。而营销管理功能则通过促销活动的设置、优惠券的发放和积分兑换等手段,帮助商家提升销售业绩。 商城系统的特点主要体现在功能性、易用性和安全性上。商城系统注重功能性的开发,每个功能都有其发挥作用的地方,满足商家的实际需求。

    忻州师范学院-论文答辩PPT模板我给母校送模板作品.pptx

    PPT模板,答辩PPT模板,毕业答辩,学术汇报,母校模板,我给母校送模板作品,周会汇报,开题答辩,教育主题模板下载。PPT素材下载。

    小型餐饮管理系统-数据库设计报告.doc

    小型餐饮管理系统-数据库设计报告.doc

    毕业设计+Python+基于OpenCV的交通路口红绿灯控制系统设计+Sqlite +PyCharm 1.zip.zip

    本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!! 本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!! 本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!

    西南交通大学-毕业答辩PPT模板我给母校送模板作品.pptx

    PPT模板,答辩PPT模板,毕业答辩,学术汇报,母校模板,我给母校送模板作品,周会汇报,开题答辩,教育主题模板下载。PPT素材下载。

    2024年中国中空纤维膜行业研究报告.docx

    2024年中国中空纤维膜行业研究报告

    四川师范大学-PPT模板我给母校送模板作品.pptx

    PPT模板,答辩PPT模板,毕业答辩,学术汇报,母校模板,我给母校送模板作品,周会汇报,开题答辩,教育主题模板下载。PPT素材下载。

    实验三、数据库安全性实验报告.doc

    实验三、数据库安全性实验报告.doc

    西北农林科技大学-PPT模板我给母校送模板作品.pptx

    PPT模板,答辩PPT模板,毕业答辩,学术汇报,母校模板,我给母校送模板作品,周会汇报,开题答辩,教育主题模板下载。PPT素材下载。

    java电子相册源码.rar

    java电子相册源码.rarjava电子相册源码.rarjava电子相册源码.rarjava电子相册源码.rar

    玉米脱粒机设计及其总装配图(论文、dwg图).rar

    玉米脱粒机设计及其总装配图(论文、dwg图)

    studyopencv2

    studyopencv2

    2024-2030全球与中国牛肉卷饼市场现状及未来发展趋势.docx

    2024-2030全球与中国牛肉卷饼市场现状及未来发展趋势

    在KITTI车辆数据集,采用随机多尺度变化增强车辆训练集样本数量,采用k-means聚类获取最优先验候选框大小

    在KITTI车辆数据集,采用随机多尺度变化增强车辆训练集样本数量,采用k-means聚类获取最优先验候选框大小,引入到YOLOv3模型中,提升模型的车辆检测精度和鲁棒性。.zip

    基于Vue+SSM高校疫情信息管理系统源码.zip

    详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;

Global site tag (gtag.js) - Google Analytics