python hadoop streaming_Hadoop Streaming模式的优缺点?

Hadoop Streaming是临时任务最常使用的模式,理论上适于数据规模较小、业务逻辑简单的小M-R。在实际的工业应用中,使用Python等简单脚本语言写成、规模较大的Streaming任务也很常见,比如我就很无耻的用Python写了一个数据规模很大(每个集群的原始数据都在几十TB级别),复杂度也不能算低(13个节点)的例行DAG任务,每个Mapper占用1000个Task Tracker,Reducer也要占用300~500个。。可它真的是个streaming

优点:

1,直接:在TaskTracker上执行时直接以stdin/stdout作为数据传输媒介,意味着你可以用任何语言编写Map-Reduce任务。Hadoop是用来处理以文件形式保存和输出的超大规模半结构化数据的,这种数据一般随机性强,Linux Shell、Python这种能直接运行的脚本语言本身就是最佳选择。一些原先在单机上跑的、基于文件的任务脚本,可以轻易修改为Map-Reduce任务,从而在分布式集群上跑。

2,方便灵活:对于一些逻辑不复杂的任务,可以使用简单脚本语言(Python, Shell, Perl等等)编写和提交任务,不需要编译,不用打jar包,只要Task Tracker上有相应的环境即可立即执行,而执行语句也可以在提交时指定,这对于平时经常使用Linux的同学来说实在太方便了,pipeline, cat, 甚至awk都可以自如使用,因为它的执行者就是shell本身

缺点:

1,慢,这是使用了标准输入/输出的缘故,数据交换过程不如Java API直接(不过,过多或过少Mapper数量,以及分桶不均等问题也会造成数据IO极不正常的慢)

2,无法避免的数据类型转换:还是因为stdin/out的缘故,数据以文本类型在节点之间交互,这点暂不必说;而Java API则使用了专门封装过的数据类型

3,那个关于Key的故事:作为分桶和Reduce前排序的依据,Streaming模式貌似只能支持以第一个\t之前的那一坨为key。我们自行开发的Hadoop分支已经支持多key排序,不知当前社区版的情况如何

4,习惯OO同学,您还是用Java吧:如果文件比较多,而且带有目录结构的话呢,使用Streaming模式只有一种选择:archive,使用时请注意如果压缩一定要用gzip,后缀使用tgz或者tar.gz,否则可能悲剧。

5,关于字典:一定要用archive,用file在分发任务的时候会将字典文件上传到每台task tracker上,字典大的话IO压力会比较大

说了这么多,也掺杂一些自己平时的使用体会和闲扯。因为平时使用的是公司自行开发时间较长的Hadoop分支,一些叙述不见得和社区版相符,还请各位指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值