揭示 MapReduce 和云计算为什么非常适合处理大量数据
简介: 对于非常复杂的计算,有时候需要能够访问更多物理和虚拟资源才能得到结果,但是在组织内建立网格系统要面对资源、后勤和技术障碍,甚至有一些行政障碍。云计算能够解决这个问题。通过让把两个数字相加的位置变得透明和不相关,云计算可以与 MapReduce 函数完美地结合以处理大量 Big Data 计算。作者讨论云计算和 MapReduce 为什么有助于解决 Big Data 问题。
发布日期: 2011 年 1 月 12 日
级别: 初级
原创语言: 英文
访问情况 4150 次浏览
建议: 0 (添加评论)
微观经济学指出,比起让大多数成员来执行要在该系统中存在所必需的活动,基于专业分工的系统生产力更高。换句话说,对于每个任务,全能的人的生产力比不上专门从事特定任务的人。这称为比较优势 — 如果一个人相当精通某种服务,而不熟悉其他服务,他在提供这种服务方面就具有优势。专业分工可以促进特定技能的提升。(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 的关键特点是它能够对开发人员隐藏操作并行语义 — 并行编程的具体工作方式。
即使您的公司拥有数千台计算机(这几乎不可能),这个特点也非常有意义。即使组织有多余的处理能力,要想在组织内建立网格,也常常要克服许多技术、行政和后勤障碍。
突然之间,云计算成了非常引人注目的思想。
有了云,开发人员就可以通过编写脚本供应任意数量的计算机,运行 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 图 我们来研究一下代码。您可以看到它非常简短,只有大约 50 行:
使用多处理模块是为了便于解释 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
|
回页首
结束语
严格地说,云计算可以意味着许多活动,包括在数据中心中的虚拟机上运行顺序的脚本。在本文中,我应用 MapReduce 和云计算背后的一些理论解决汇总大量数据这个实际问题。
基于云的 MapReduce 系统既有开放源码的,也有商用产品。您可以应用从本文学到的知识处理数 PB 的日志文件;因此,MapReduce 抽象是一种非常有用的工具,尤其是在云环境中。
回页首
下载
描述
名字
大小
下载方法
本文的 Python 示例脚本 |
MapReducePythonScript.zip |
1KB |
HTTP |
关于下载方法的信息
参考资料
学习
获得产品和技术
- 可以从 GitHub 获取 Yelp 的 mrjob 框架。
讨论
关于作者
分享到:
相关推荐
微观经济学指出,比起让大多数成员来执行要在该系统中存在所必需的活动,基于专业分工的系统生产力更高。换句话说,对于每个任务,全能的人的生产力比不上专门从事特定任务的人。这称为比较优势 ...
综上所述,云计算与BigData大数据数据挖掘紧密相连,前者为后者提供了强大的基础设施和处理框架,而后者则充分利用云计算的优势,实现了对海量数据的高效挖掘和分析。随着技术的不断演进,云计算和大数据挖掘将继续...
《HCIA-Big Data V3.0 培训教材》是华为认证体系中的一个重要组成部分,专注于大数据领域的基础知识和实践技能。此教材旨在为学员提供全面的大数据理论知识和技术实操,帮助他们理解和掌握大数据的核心概念、技术...
在云计算领域,Google无疑是引领潮流的巨头之一,其在2000年代初期发表的三篇论文——"The Google File System"(GFS)、"MapReduce: Simplified Data Processing on Large Clusters"和"Bigtable: A Distributed ...
《华为HCIP-Big Data Developer V2.0大数据培训教材与实验指导》...通过这个培训,学习者不仅可以获得HCIP-Big Data Developer的认证,还能具备解决实际大数据问题的能力,为职业生涯中的大数据项目提供强有力的支持。
"大数据与云计算" 大数据和云计算是当前社会热点话题,秉承“按需服务”理念的云计算高速发展,“数据即资源”的大数据时代已经来临。如何更好地管理和利用大数据已经成为普遍关注的话题。 大数据是指无法在一定...
【大数据与云计算培训学习资料 Hadoop的MapReduce中多文件输出】 MapReduce是Hadoop框架的核心部分,主要用于处理大规模数据的分布式计算。在默认情况下,MapReduce任务的输出是一个单一的文件,由TextOutputFormat...
【HCIP-Big Data Developer V2.0】是华为针对大数据开发的专业认证教材,旨在帮助学员深入了解大数据技术的主流应用和开发实践。本教材适用于希望通过学习掌握大数据开发技能的IT专业人士,不仅覆盖了理论知识,也...
此外,你还将学习如何使用Apache Spark、Hive、Pig等大数据处理工具,以及如何在云计算环境中部署和管理大数据解决方案。 总的来说,"Web Intelligence and Big Data" 的学习将带你进入一个充满机遇和挑战的世界,...
4. **故障排查与问题解决**:提供常见问题的解决方法和故障排查技巧,帮助学员迅速定位并解决问题,减少系统停机时间。 5. **大数据实战**:通过实际操作实验,使学员熟悉FusionInsight平台上的数据导入导出、数据...
"Bigdata report"标签表明这门课程关注的重点是大数据环境下的软件开发策略和实施方法。以下是基于这一主题的详细知识点: 1. **大数据定义**:大数据是指在传统数据处理工具无法有效管理和分析的海量、高速、多样...
6. HCIE-Big Data【大数据】:这是核心部分,可能包括Hadoop生态系统(如MapReduce, HBase, Hive, Spark等)、流处理(如Kafka, Flink)和数据挖掘工具(如Hue, Pig)。此外,大数据处理框架、数据分析和可视化技术...
【大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第9期_MapReduce初级案例 共43页.pdf】 本文将详细讲解Hadoop集群中的MapReduce初级案例,主要涉及如何利用MapReduce进行数据去重操作。MapReduce是Hadoop...
《数据密集型文本处理与MapReduce》是Jimmy Lin和Chris Dyer合著的一本关于大数据处理的著作,书中深入探讨了在云环境中的计算方法、MapReduce的基本原理以及如何利用MapReduce解决各种复杂的文本处理问题。...
HCIA(Huawei Certified ICT Associate)是华为认证的初级信息技术专家证书,主要针对大数据方向的 HCIA-big data 认证,旨在验证考生对大数据基础知识、技术原理和应用场景的理解与掌握。H13-711 是这个认证的考试...
首先,大数据(Big Data)指的是在可容忍的时间内难以用常规软件工具进行捕捉、管理和处理的大规模数据集合。大数据通常具有四个特征,即所谓的“4V”:Volume(大量)、Velocity(高速)、Variety(多样)和...
《华为HCIP-Big Data Developer大数据培训教材与实验指导手册》是华为针对大数据开发领域推出的专业认证课程,旨在培养具备大数据处理、分析和应用能力的专业人才。本教材结合理论知识和实践操作,全面覆盖了大数据...
### Big Data Analytics Beyond Hadoop #### 一、概述与背景 在大数据时代,处理和分析海量数据已成为企业和组织的关键需求之一。《Big Data Analytics Beyond Hadoop》这本书由Vijay Srinivas Agneeswaran撰写,...