在用Java编写程序时,我可以使用FileSplit在mapper类中找到输入文件的名称。
当我用Python编写程序时(使用流媒体?)
是否有相应的方法可以做到这一点我在apache上的hadoop流文档中找到了以下内容:
请参阅配置参数。在执行流式传输作业期间, 转换“mapred”参数的名称。点(。) 成为下划线(_)。例如,mapred.job.id成为 mapred_job_id和mapred.jar成为mapred_jar。在您的代码中,使用 带下划线的参数名称。
但我仍然无法理解如何在我的映射器中使用它。
非常感谢任何帮助。
由于
答案 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