用python + hadoop streaming 编写分布式程序的本地调试方法
来源:互联网 发布:淘宝软文引流怎么写 编辑:程序博客网 时间:2024/05/22 08:06
使用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 sysfrom operator import itemgetterfrom 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
0 0
- 用python + hadoop streaming 编写分布式程序的本地调试方法
- 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试
- Python利用hadoop Streaming编写的Map-Reduce程序命令运行和本地调试运行
- Python+hadoop Streaming编写的Map-Reduce程序与调试运行
- Hadoop分布式程序的调试方法
- hadoop-python:计算平均值分布式程序编写
- hadoop YARN分布式程序的编写
- python Hadoop Streaming程序测试
- Hadoop Streaming: c++编写uniq程序
- 用hadoop-streaming 运行python map-reduce程序
- python hadoop 在streaming中获取文件名的方法
- IDEA调试本地Hadoop程序
- 用Python编写Hadoop下MapReduce程序
- 用Bash Script编写Hadoop MapReduce Streaming
- python程序的调试方法
- python程序的调试方法
- python程序的调试方法
- python程序的调试方法
- Android Material适配 为控件设置指定背景色和点击波纹效果
- 基本的TCP编程
- 解决Android加载图片时内存溢出的问题
- Quartz2D绘图一
- HDU 5072 Coprime(容斥)
- 用python + hadoop streaming 编写分布式程序的本地调试方法
- C++静态库与动态库
- hdu 5445 Food Problem(多重背包)
- 1075:What Are You Talking About
- 黑马程序员——Java基础(五)之面向对象
- js的调用函数前先执行某语句问题
- cocoaPods的安装
- 引起内存泄露的原因:CheckList
- libevent客户端以及服务器