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

时间:2011-09-16 19:59:18

标签: python input streaming hadoop filesplitting

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

当我用Python编写程序时(使用流媒体?)

是否有相应的方法可以做到这一点

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

  

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

但我仍然无法理解如何在我的映射器中使用它。

非常感谢任何帮助。

由于

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

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

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

答案 2 :(得分:0)

Hadoop 2.x的新ENV_VARIABLE是MAPREDUCE_MAP_INPUT_FILE