streaming支持shell 命令的使用。但是,需要注意的是,对于多个命令,不能使用形如cat; grep 之类的多命令,而需要使用脚本,后面将具体介绍。
下面示例用grep检索巨量数据:
1. 待检索的数据放入hdfs
$ hadoop fs -put localfile /user/hadoop/hadoopfile
使用方法:hadoop fs -put ...
从本地文件系统中复制单个或多个源路径到目标文件系统。也支持从标准输入中读取输入写入目标文件系统。
2. 运行检索:
$ hadoop jar /home/hadoop/hadoop/contrib/streaming/hadoop-0.20.2-streaming.jar -input data/*.* -output out11 -mapper "grep is" -jobconf mapre.job.name="grep-test" -jobconf stream.non.zero.exit.is.failure=false -jobconf mapred.reduce.tasks=1
说明:
-input /user/hadoop/hadoopfile : 待处理文件目录
-output /user/hadoop/result :处理结果存放目录
-mapper "grep hello" :map程序
-jobconf mapre.job.name="grep-test" :任务名
-jobconf stream.non.zero.exit.is.failure=false : map-reduce程序返回值不做判断;streaming默认的情况下,mapper和reducer的返回值不是0,被认为异常任务,将被再次执行,默认尝试4次都不是0,整个job都将失败。而grep在没有匹配结果时返回1。
-jobconf mapred.reduce.tasks=1 : reduce任务数。 此处也可配置为0,为0配置表示告诉Map/reduce框架不要创建reducer任务
3. 查看结果:
$ hadoop fs –cat /user/hadoop/result/part-00000
(责任编辑:IT) |