2011-09-16 83 views
7

在Java中编写程序时,如果使用FileSplit的映射器类中的输入文件能够找到该名称。在流式传输hadoop程序中获取输入文件名

有没有做到这一点通过相应的方式,当我用Python语言编写程序(使用流?)

我发现在Apache Hadoop的流媒体文件中的以下内容:

查看所配置的参数。在执行流式作业期间, 将转换“mapred”参数的名称。点(。) 变为下划线(_)。例如,mapred.job.id变成 mapred_job_id,而mapred.jar变成mapred_jar。在您的代码中,使用 参数名称和下划线。

但我仍然不能理解如何在我的映射器中使用这个。

任何帮助,高度赞赏。

感谢

回答

7

按照"Hadoop : The Definitive Guide"

Hadoop的设定工作参数配置为流媒体节目的环境变量。但是,它会用下划线替换非字母数字字符,以确保它们是有效的名称。下面的Python表达式说明了如何从一个Python流脚本中检索mapred.job.id属性的值:

os.environ [“mapred_job_id”]

您还可以设置环境变量来通过将-cmdenv选项应用于Streaming启动器程序(对于希望设置的每个变量一次),由MapReduce启动流式处理。例如,下面的设置MAGIC_PARAMETER环境变量:

-cmdenv MAGIC_PARAMETER =胡言乱语

+2

看起来像Krishnamutry需要的属性被称为“map.input.file” - 这可能会作为“map_input_file”环境变量显示为流式作业。 –

+0

注意:句点应替换为下划线 –

+0

谢谢 - 更新它。 –

0

Hadoop的2.x的新ENV_VARIABLE是MAPREDUCE_MAP_INPUT_FILE

+0

您应该使用小写'mapreduce_map_input_file' – ofekp

4

通过解析mapreduce_map_input_file(新)或map_input_file(不赞成)环境变量,您将获得地图输入文件名称。

注意:
两个环境变量区分大小写,所有字母都小写

+1

'map_input_file'适用于hadoop 0.20.x,适用于任何卡在旧集群中的人 – Blake