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

Python 在流式hadoop程序中获取输入文件名,python,input,streaming,hadoop,filesplitting,Python,Input,Streaming,Hadoop,Filesplitting,在用Java编写程序时,我能够使用FileSplit在mapper类中找到输入文件的名称 当我用Python(使用流媒体)编写程序时,有没有相应的方法来实现这一点 我在apache上的hadoop流媒体文档中发现了以下内容: 请参阅配置参数。在执行流作业期间, 转换“mapred”参数的名称。点(.) 变成下划线(\)。例如,mapred.job.id变为 mapred_job_id和mapred.jar变为mapred_jar。在代码中,使用 带下划线的参数名称 但是我仍然不明白如何在我的地图

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

当我用Python(使用流媒体)编写程序时,有没有相应的方法来实现这一点

我在apache上的hadoop流媒体文档中发现了以下内容:

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

但是我仍然不明白如何在我的地图绘制程序中使用它

非常感谢您的帮助

谢谢

根据

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

os.environ[“映射作业id”]

您还可以通过将-cmdenv选项应用于流式启动程序,为MapReduce启动的流式处理设置环境变量(每个要设置的变量一次)。例如,下面设置MAGIC_参数环境变量:


-cmdenv MAGIC_PARAMETER=abracadabra

Hadoop 2.x的新环境变量是MAPREDUCE_MAP_INPUT_FILE

通过解析
MAPREDUCE_MAP_INPUT_FILE
(新)或
MAP_INPUT_FILE
(弃用)环境变量,您将获得映射输入文件名

注意:

这两个环境变量是区分大小写的,所有字母都是小写的,看起来Krishnamutry需要的属性被称为“map.input.file”-可能会显示为“map\u input\u file”流作业的环境变量。注意:句点应替换为下划线
map\u input\u file
适用于hadoop 0.20.x对于卡在旧集群上的任何人,应使用小写的“mapreduce\u map\u input\u file”