在流式hadoop程序中获取输入文件名

Kri*_*thy 7 python streaming hadoop filesplitting input

在Java中编写程序时,我能够使用FileSplit在mapper类中找到输入文件的名称.

当我用Python编写程序时(使用流式传输?),有相应的方法吗?

我在apache上的hadoop流文档中找到了以下内容:

请参阅配置参数.在执行流作业期间,转换"映射"参数的名称.点(.)变为下划线(_).例如,mapred.job.id变为mapred_job_id,mapred.jar变为mapred_jar.在您的代码中,使用带下划线的参数名称.

但我仍然无法理解如何在我的mapper中使用它.

任何帮助都非常感谢.

谢谢

Pra*_*ati 7

根据"Hadoop:The Definitive Guide"

Hadoop将作业配置参数设置为Streaming程序的环境变量.但是,它会使用下划线替换非字母数字字符,以确保它们是有效名称.以下Python表达式说明了如何从Python Streaming脚本中检索mapred.job.id属性的值:

os.environ [ "mapred_job_id"]

您还可以通过将-cmdenv选项应用于Streaming启动程序(为您要设置的每个变量一次),为MapReduce启动的Streaming进程设置环境变量.例如,以下设置MAGIC_PARAMETER环境变量:

-cmdenv MAGIC_PARAMETER = abracadabra

  • 看起来Krishnamutry需要的属性称为"map.input.file" - 它可能会作为"map_input_file"环境变量显示为流式作业. (2认同)

zee*_*vfu 5

通过解析mapreduce_map_input_file(新)或map_input_file(不建议使用)环境变量,您将获得地图输入文件名.

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

  • 对于困在旧集群上的任何人来说,`map_input_file`适用于hadoop 0.20.x. (2认同)