设为首页 加入收藏

TOP

用 MapReduce 解决与云计算相关的 Big Data 问题(二)
2011-03-22 12:44:34 来源:IBM 作者:Noah Gift 【 】 浏览:1581
Tags:MapReduce 解决 计算 相关 Big Data 问题
ducer(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 抽象是一种非常有用的工具,尤其是在云环境中。

    首页 上一页 1 2 下一页 尾页 2/2/2
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    分享到: 
    上一篇将您的 web 应用程序转化为多租户.. 下一篇云计算基础