使用hadoop管道在hadoopMap器中获取文件名

ckocjqey  于 2021-06-03  发布在  Hadoop
关注(0)|答案(6)|浏览(498)

如何获取在中执行的输入文件名 hadoop mapperHadoop Pipes? 我可以很容易地在基于java的map reducer中获得文件名,比如
filesplit filesplit=(filesplit)context.getinputsplit();   string filename=filesplit.getpath().getname();  system.out.println(“文件名”+文件名);system.out.println(“目录和文件名”+filesplit.getpath().tostring());
但是我怎样才能进入c++;
请帮帮我
谢谢

0dxa2lsx

0dxa2lsx1#

对于流/管道作业,作业配置被序列化以处理环境变量。
定义输入文件的作业配置属性名为 map.input.file . 启动c程序的pipemapred类负责此序列化( configure 方法,并确保转义job conf属性名( addJobConfToEnvironment 方法行206/266)-意味着所有非 a-Za-z0-9 字符替换为下划线( safeEnvVarName 方法,第276/284行)-因此您在c程序中查找的实际环境变量将被命名为 map_input_file .
我不是一个c++程序员,所以我不能告诉你如何获取环境变量,但我相信这很简单。

7z5jn7bk

7z5jn7bk2#

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

filepath = os.environ['mapreduce_map_input_file']

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

print filename
1sbrub3j

1sbrub3j3#

通过解析 mapreduce_map_input_file (新)或 map_input_file (已弃用)环境变量,可以获取Map输入文件名。
注意:
这两个环境变量区分大小写,所有字母都应为小写。

atmip9wb

atmip9wb4#

如果将hadoop 2.x与python结合使用:

file_name = os.environ['mapreduce_map_input_file']
iyfamqjs

iyfamqjs5#

找到了如何在python中实现这一点:

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

filename是您想要的变量-这将为您提供Map程序正在处理的文件名。
其他一些有用的环境变量包括:
mapred\u job\u id=完整作业id
mapred_tip_id=特定Map器或还原器任务的id

irlmq6kh

irlmq6kh6#

我一直在为同样的问题挣扎。我找到了解决办法。

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

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

相关问题