如何获取在中执行的输入文件名 hadoop mapper
在 Hadoop Pipes?
我可以很容易地在基于java的map reducer中获得文件名,比如
filesplit filesplit=(filesplit)context.getinputsplit(); string filename=filesplit.getpath().getname(); system.out.println(“文件名”+文件名);system.out.println(“目录和文件名”+filesplit.getpath().tostring());
但是我怎样才能进入c++;
请帮帮我
谢谢
6条答案
按热度按时间0dxa2lsx1#
对于流/管道作业,作业配置被序列化以处理环境变量。
定义输入文件的作业配置属性名为
map.input.file
. 启动c程序的pipemapred类负责此序列化(configure
方法,并确保转义job conf属性名(addJobConfToEnvironment
方法行206/266)-意味着所有非a-Za-z0-9
字符替换为下划线(safeEnvVarName
方法,第276/284行)-因此您在c程序中查找的实际环境变量将被命名为map_input_file
.我不是一个c++程序员,所以我不能告诉你如何获取环境变量,但我相信这很简单。
7z5jn7bk2#
下面的代码将能够打印文件名
1sbrub3j3#
通过解析
mapreduce_map_input_file
(新)或map_input_file
(已弃用)环境变量,可以获取Map输入文件名。注意:
这两个环境变量区分大小写,所有字母都应为小写。
atmip9wb4#
如果将hadoop 2.x与python结合使用:
iyfamqjs5#
找到了如何在python中实现这一点:
filename是您想要的变量-这将为您提供Map程序正在处理的文件名。
其他一些有用的环境变量包括:
mapred\u job\u id=完整作业id
mapred_tip_id=特定Map器或还原器任务的id
irlmq6kh6#
我一直在为同样的问题挣扎。我找到了解决办法。
我只发布了阅读文件名部分。getinputsplit()方法返回文件的整个路径+结尾的一些未知字符。我想要文件的纯路径,所以删除字符串的结束字符。我不知道为什么weired字符被添加到字符串的末尾,但是让我们通过删除结尾字符来使用它~!