参考;hadoop实战
hadoop程序都是java写的,不过hadoop也支持用其他语言来编程,需要用到Streaming的通用API。主要用于编写简单、短小得到mapreduce程序,他可以通过脚本语言,开发更加便捷,并能够充分利用非java库。streaming使用unix中的流与程序进行交互,从stdin输入数据,输出到stdout。数据必须为文本且每行被视为一个记录。streaming的整个数据流就像管道,数据先流过mapper,然后再reducer中排序,最后输出。streaming不同于storm,storm是实时流处理框架。stream只是hadoop里常用作数据处理的,支持多语言的API.
bin/hadoop jar~/hadoop-2.7.3/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar -input /user/root/input/apat63_99 -output /user/root/output-file ~/AttributeCount.py -mapper 'AttributeCount.py 1' -reducer aggregater
1 输入输出路径写的是文件夹的地址,这里都是写的hdfs的绝对路径地址
2 file指定的是文件的绝对地址
3 mapper指定我们使用的map函数
4 reducer 指定使用的reduce函数
5 mapper函数为自定义脚本文件
#! /usr/bin/env python
import sys
index = int(sys.argv[1])
for line in sys.stdin:
fields=line.split(",")
print "LongValueSum:"+fields[index]+"\t"+"1"
这里用到一个LongValueSum是一个运算函数。另外还有ValueHistogram函数,对于每个键,它输出数字来代表不同的含义。1唯一值个数2最小个数3中值个数4最大个数5平均个数6标准方差