hadoop流

hadoop流提供了一个api,允许用户保用任何脚本语言写Map函数或Reduce函数。Hadoop流的关键是,它使用UNIX标准作为程序与Hadoop之间的接口。因此,任何程序只要可以从标准流中读取数据并且可以写入数据到标准输出流,那么就可以通过Hadoop流使用其它语言编写MapReduce程序的Map函数或Reduce函数。

如下面的示例

bin/hadoop jar contrib/streaming/hadoop-streaming-1.0.4.jar -input input -output wcoutput4 -mapper /bin/cat -reducer /usr/bin/wc

输入文件如下

file01
Hello World Bye World

file02
Hello Hadoop Goodbye Hadoop

运行成功之后,输出文件如下

      2       8      52	

wc命令用来统计文件中行数、单词数和字节数,可以看到,上面的统计结果是正确的。

当一个可执行文件作为Mapper时,每一个Map任务会以一个独立的进程启动这个可执行文件,然后在Map任务运行时,会把输入切分成行提供给可执行文件,并作为它的标准输入内容。当可执行文件运行出结果时,Map从标准输出中收集数据,并将其转化为<key, value>对,作为Map的输出。

Reduce与Map相同,如果可执行文件作为Reduce时,Reduce任务会启动这个可执行文件,并且将<key, value>对转化为行作为这个可执行文件的标准输入。然后,Reduce会收集这个可执行文件的标准输出内容。并把每一行转化为<key,value>对,作为Reduce的输出。

Map与Reduce将输出转化为<key,value>对的默认方法是:将每行的第一个tab符号之前的内容作为key,之后的内容作为value。如果没有tab符号,那么这一行的所有内容会作为key,而value值为null。当然这是可以更改的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值