`
backsnow
  • 浏览: 128097 次
  • 性别: 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 一起度过,谱写钢琴曲、参加马拉松比赛以及积极地参与体育活动。

分享到:
评论

相关推荐

    用MapReduce解决与云计算相关的BigData问题

    微观经济学指出,比起让大多数成员来执行要在该系统中存在所必需的活动,基于专业分工的系统生产力更高。换句话说,对于每个任务,全能的人的生产力比不上专门从事特定任务的人。这称为比较优势 ...

    大数据与云计算(论文).doc

    随着互联网和移动设备的普及,大数据已经在我们 的生活中无处不在,而有关大数据与隐私的问题也日益受到关注。毫无疑问,未来可以 获得的个人数据量越多,其中的信息量就越大。只要拥有了足够多的数据,我们甚至可 ...

    大数据与云计算培训学习资料 Hadoop的MapReduce中多文件输出 共9页.pdf

    大数据与云计算培训学习资料 Hadoop的MapReduce中多文件输出 共9页.pdf

    大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第9期_MapReduce初级案例 共43页.pdf

    大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第9期_MapReduce初级案例 共43页.pdf

    Google写的云计算三篇巨作:BigTable,MapReduce,Google File System

    Google写的三篇关于云计算的论文,篇篇经典,打包上传,如果这三篇都不看,你还搞什么云计算?

    MEM课程培训教程 大数据与云计算技术教程 大数据处理平台和技术 3-MapReduce并行计算(共69页).pdf

    大数据处理平台和技术 1-大数据处理平台与技术概述(共63页).pdf 大数据处理平台和技术 2-HDFS-大数据文件系统(共45页).pdf 大数据处理平台和技术 3-MapReduce—并行计算(共69页).pdf 大数据处理平台和技术 4-...

    数据分析-大数据

    从技术上看,大数据与云计算的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,必须采用分布式架构。它的特色在于对海量数据进行分布式数据挖掘。但它必须依托云计算的分布式处理、...

    BigData_and_AI:学习大数据和人工智能

    交互和探索性计算环境Scipy: 解决科学计算中各种标准问题域的包的集合: 数据量大 数据类型繁多 处理速度快 价值密度低过程数据采集数据存储数据计算: GFS + MapReduce离线运算实时运算数据应用相关技术云计算: 通过...

    大数据PPT.pptx

    大数据简介模板,随着云时代的来临,大数据(Big data)也吸引了越来越多的关注。...大数据分析常和云计算联系到一起,因为实时的大型数据集分析需要像MapReduce一样的框架来向数十、数百或甚至数千的电脑分配工作。

    蓝色曲线背景的云计算大数据PPT模板

    PowerPoint模板内容页,由21张蓝色幻灯片图表,与介绍云计算大数据的文字排版。 一、大数据是什么 二、机遇和挑战 三、应用和案例 四、特征和构成 五、大数据趋势 随着云时代的来临,大数据(Big data)也吸引了...

    大数据云计算教程 大数据基础入门学习课程 大数据导论课程系列 全套PPT课件 共45个章节.rar

    3.1 大数据相关技术基础(1) 3.2 大数据相关技术基础(2) 3.3 大数据相关技术基础(3) 4.1 大数据来源 4.2 大数据采集 4.3 大数据预处理 4.4 大数据集成 5.1 hadoop简介之一 5.2 hadoop简介之二 5.3 HDFS的简要介绍 5.4...

    云计算框架Spart的论文集

    Apache Spark is an open source cluster computing system that aims to make data analytics fast — both fast to run and fast to write. To run programs faster, Spark offers a general execution model ...

    大数据云的数据交换共享平台的架构探索.pptx

    该平台架构探索基于云计算的特性,例如按需使用、自助使用、广泛接入、多租户和资源管理等。平台架构探索的核心组件包括短时任务资源管理框架 YARN、资源隔离/调度/管理框架 Kubernetes、批处理框架 MapReduce、高...

    [详细完整版]大数据技术.doc

    大数据 大数据(big data,mega data),或称巨量资料,指的是需要新处理模式才能具有更强的决策力、洞察力和流程优 化能力的海量、高增长率和多样化的信息资产。大数据的4V特点:Volume(大量)、Veloc ity(高速)、...

    BigData-Getting-Started:大数据相关框架实战项目(Hadoop, Spark, Storm, Flink)

    这学期云计算课程需要使用集群环境,刚好学校有云资源,记录下集群搭建过程 2. 目录结构 hadoop-train Hadoop基础与电商行为日志分析 新手入门大数据 本课程从Hadoop核心技术入手,以电商项目为依托,带领你从0基础...

    《大数据》第1章大数据概念与应用.pptx

    "《大数据》第1章大数据概念与应用" 以下是关于大数据概念和应用的知识点总结: 大数据概念 大数据(Big Data)是指其规模超出了常规数据库工具获取、存储、管理和分析能力的数据集。该概念第一次被正式提出是在...

    我对大数据的看法.pdf

    我对⼤数据的看法 我对⼤数据的看法 ⼤数据 ⼤数据(bigdata),或称巨量资料,指的是所涉及的资料量规模巨⼤到⽆法透过⽬前主流软件⼯具,在合理时间内达到撷取、管理、处理、并 整理成为帮助企业经营决策更积极⽬的...

    大数据概述——精选推荐.pdf

    ⼤数据(big data)是指⽆法在⼀定时间范围内⽤常规软件⼯具进⾏捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策⼒、洞 察发现⼒和流程优化能⼒的海量、⾼增长率和多样化的信息资产。 ------百度...

    大数据分析一体机.pptx

    较常见的解决方案 大数据储存 大数据处理 数据分享 数据检索 数据分析 数据展现 分布式软件架构 并行计算框架 分布式存储 横向扩容(Scale-out) 架构 存储与运算合一 Big Data 运算与存储,单一架构解决 大数据分析...

    大数据介绍.pptx

    7、为充分发挥大数据的潜力,以下几个方面的问题必须得到解决: 数据策略 技术 企业变革和人才 数据存取 产业结构 大数据介绍全文共49页,当前为第6页。 纵观全球数据形势:大幅增长和价值创造 数据量正在呈指数...

Global site tag (gtag.js) - Google Analytics