7

如果在使用 Java 编写程序时使用 FileSplit 映射器类中的输入文件,我能够找到名称。

当我用 Python 编写程序(使用流式传输?)时,是否有相应的方法可以做到这一点?

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

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

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

非常感谢任何帮助。

谢谢

4

3 回答 3

8

根据“Hadoop:权威指南”

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

os.environ["mapred_job_id"]

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

-cmdenv MAGIC_PARAMETER=abracadabra

于 2011-09-17T04:30:40.150 回答
6

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

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

于 2014-07-23T09:09:08.210 回答
0

Hadoop 2.x 的新 ENV_VARIABLE 是 MAPREDUCE_MAP_INPUT_FILE

于 2014-06-26T15:13:00.240 回答