房产中介网站源码网站开发与服务合同范本
房产中介网站源码,网站开发与服务合同范本,网站建设专业课程,企业qq下载官网下载安装原文地址#xff1a;http://www.cnblogs.com/joyeecheung/p/3757915.html 相关随笔#xff1a; 点击打开链接 Hadoop-1.0.4集群搭建笔记用python hadoop streaming 编写分布式程序#xff08;二#xff09; -- 在集群上运行与监控用python hadoop streaming 编写分布式程… 原文地址http://www.cnblogs.com/joyeecheung/p/3757915.html 相关随笔 点击打开链接 Hadoop-1.0.4集群搭建笔记用python hadoop streaming 编写分布式程序二 -- 在集群上运行与监控用python hadoop streaming 编写分布式程序三 -- 自定义功能 MapReduce与HDFS简介 什么是Hadoop Google为自己的业务需要提出了编程模型MapReduce和分布式文件系统Google File System并发布了相关论文可在Google Research的网站上获得 GFS 、 MapReduce。 Doug Cutting和Mike Cafarella在开发搜索引擎Nutch时对这两篇论文做了自己的实现即同名的MapReduce和HDFS合起来就是Hadoop。 MapReduce的Data flow如下图原始数据经过mapper处理再进行partition和sort到达reducer输出最后结果。 图片来自Hadoop: The Definitive Guide Hadoop Streaming原理 Hadoop本身是用Java开发的程序也需要用Java编写但是通过Hadoop Streaming我们可以使用任意语言来编写程序让Hadoop运行。 Hadoop Streaming的相关源代码可以在Hadoop的Github repo 查看。简单来说就是通过将用其他语言编写的mapper和reducer通过参数传给一个事先写好的Java程序Hadoop自带的*-streaming.jar这个Java程序会负责创建MR作业另开一个进程来运行mapper将得到的输入通过stdin传给它再将mapper处理后输出到stdout的数据交给Hadooppartition和sort之后再另开进程运行reducer同样地通过stdin/stdout得到最终结果。因此我们只需要在其他语言编写的程序里通过stdin接收数据再将处理过的数据输出到stdoutHadoop streaming就能通过这个Java的wrapper帮我们解决中间繁琐的步骤运行分布式程序。 图片来自Hadoop: The Definitive Guide 原理上只要是能够处理stdio的语言都能用来写mapper和reducer也可以指定mapper或reducer为Linux下的程序如awk、grep、cat或者按照一定格式写好的java class。因此mapper和reducer也不必是同一类的程序。 Hadoop Streaming的优缺点 优点 可以使用自己喜欢的语言来编写MapReduce程序换句话说不必写Java XD不需要像写Java的MR程序那样import一大堆库在代码里做一大堆配置很多东西都抽象到了stdio上代码量显著减少因为没有库的依赖调试方便并且可以脱离Hadoop先在本地用管道模拟调试 缺点 只能通过命令行参数来控制MapReduce框架不像Java的程序那样可以在代码里使用API控制力比较弱有些东西鞭长莫及因为中间隔着一层处理效率会比较慢 所以Hadoop Streaming比较适合做一些简单的任务比如用python写只有一两百行的脚本。如果项目比较复杂或者需要进行比较细致的优化使用Streaming就容易出现一些束手束脚的地方。 用python编写简单的Hadoop Streaming程序 这里提供两个例子 Michael Noll的word count程序Hadoop: The Definitive Guide里的例程 使用python编写Hadoop Streaming程序有几点需要注意 在能使用iterator的情况下尽量使用iterator避免将stdin的输入大量储存在内存里否则会严重降低性能streaming不会帮你分割key和value传进来传进来的只是一个个字符串而已需要你自己在代码里手动调用split()从stdin得到的每一行数据末尾似乎会有\n保险起见一般都需要使用rstrip()来去掉在想获得K-V list而不是一个个处理key-value pair时可以使用groupby配合itemgetter将key相同的k-v pair组成一个个group得到类似Java编写的reduce可以直接获取一个Text类型的key和一个iterable作为value的效果。注意itemgetter的效率比lambda表达式要高所以如果需求不是很复杂的话尽量用itemgetter比较好。 我在编写Hadoop Streaming程序时的基本模版是 #!/usr/bin/env python
# -*- coding: utf-8 -*-Some description here...
import sys
from operator import itemgetter
from itertools import groupbydef read_input(file):Read input and split.for line in file:yield line.rstrip().split(\t)def main():data read_input(sys.stdin)for key, kviter in groupby(data, itemgetter(0)):# some code here..if __name__ __main__:main() 如果对输入输出格式有不同于默认的控制主要会在read_input()里调整。 本地调试 本地调试用于Hadoop Streaming的python程序的基本模式是 $ cat input path | python path to mapper script | sort -t $\t -k1,1 | python path to reducer script output path 或者如果不想用多余的cat也可以用定向 $ python path to mapper script input path | sort -t $\t -k1,1 | python path to reducer script output path 这里有几点需要注意 Hadoop默认按照tab来分割key和value以第一个分割出的部分为key按key进行排序因此这里使用 sort -t $\t -k1,1 来模拟。如果你有其他需求在交给Hadoop Streaming执行时可以通过命令行参数调本地调试也可以进行相应的调整主要是调整sort的参数。因此为了能够熟练进行本地调试建议先掌握sort命令的用法。 如果你在python脚本里加上了shebang并且为它们添加了执行权限也可以用类似于 ./mapper.py 来代替 python mapper.py 推荐阅读 Hadoop Streaming的官方文档建议通读 Recommendations with hadoop streaming and python
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/87683.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!