2

如何获取正在执行的输入文件hadoop mapperHadoop Pipes?

我可以在基于 java 的 map reducer 中轻松获取文件名,例如

FileSplit fileSplit = (FileSplit)context.getInputSplit(); 字符串文件名 = fileSplit.getPath().getName(); System.out.println("文件名"+文件名); System.out.println("目录和文件名"+fileSplit.getPath().toString());

但是我怎样才能进入 C++;

请帮帮我

谢谢

4

6 回答 6

3

对于流/管道作业,作业配置被序列化以处理环境变量。

定义输入文件的作业配置属性名为map.input.file. 启动 C++ 程序的PipeMapRed类负责此序列化(configure方法,第 151 行),并确保作业配置属性名称被转义(addJobConfToEnvironment方法行 206/266) - 这意味着所有非a-Za-z0-9字符都替换为下划线(safeEnvVarName方法,第 276/284 行) - 因此您在 c++ 程序中查找的实际环境变量将命名为map_input_file.

我不是 C++ 程序员,所以我不能告诉你如何获取环境变量,但我确信它足够简单。

于 2012-12-27T19:37:42.720 回答
1

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

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

于 2014-07-23T09:16:36.603 回答
1

如果您在Python中使用HADOOP 2.x :

file_name = os.environ['mapreduce_map_input_file']
于 2014-06-26T14:35:59.380 回答
0

弄清楚如何在 Python 中执行此操作:

import os
filename = os.environ['map_input_file']

文件名是您想要的变量 - 这将为您提供映射器正在处理的文件名。

其他一些有用的环境变量是:

  • mapred_job_id = 完整的作业 ID
  • mapred_tip_id = 特定映射器或减速器任务的 id
于 2013-03-07T17:35:56.187 回答
0

我一直在努力解决同样的问题。我找到了解决方案。

void map(HadoopPipes::MapContext& context) {                                                                                         
    string path;
    path = context.getInputSplit();                                                                                                    
    path.erase(path.end()-1);
}

我只发布了阅读文件名部分。getInputSplit() 方法返回文件的整个路径 + 最后的一些未知字符。我想要文件的纯路径,所以删除字符串的结束字符。我不知道为什么奇怪的字符被添加到字符串的末尾,但是让我们通过删除结束字符来使用它~!

于 2014-03-25T07:41:16.523 回答
0

下面的代码将能够打印文件名

filepath = os.environ['mapreduce_map_input_file']

filename = os.path.split(filepath)[-1]

print filename
于 2020-06-28T19:00:44.273 回答