我想在Map程序代码上生成hdfs路径。文件系统拥有我们可以从cli执行的所有方法,如put、get、mkdir等。。。但是当hdfs中已经存在一个目录时,如何在我的mapper或reducer代码中生成它的路径就不知道了。我正在使用 MR2 ..谢谢。
MR2
63lcw9qa1#
您可以在mapper/reducer代码中使用setup()方法,并使用文件系统api创建目录。如果您想检查目录/文件是否已经存在,那么使用filesystem类中的“exists”方法。
0x6upsns2#
阅读 input.txt 从 HDFS ```public class HdfsRead {public static void main(String[] args) throws IOException {
input.txt
HDFS
String uri = args[0]; Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create(uri), conf); FSDataInputStream in = null ; try {byte [] buffer = new byte[256]; in = fs.open(new Path(uri)); IOUtils.copyBytes(in, System.out, 4096, false); } finally { IOUtils.closeStream(in); } } }
检查文件是否已存在,删除它
FileSystem fs = FileSystem.get(conf);Path path = new Path(args[0]);if(fs.exists(path)){fs.delete(path);}
commandline argumentargs[0] = "hdfs://localhost:9000/input.txt"
2条答案
按热度按时间63lcw9qa1#
您可以在mapper/reducer代码中使用setup()方法,并使用文件系统api创建目录。如果您想检查目录/文件是否已经存在,那么使用filesystem类中的“exists”方法。
0x6upsns2#
阅读
input.txt
从HDFS
```public class HdfsRead {
public static void main(String[] args) throws IOException {
FileSystem fs = FileSystem.get(conf);
Path path = new Path(args[0]);
if(fs.exists(path)){
fs.delete(path);
}
commandline argument
args[0] = "hdfs://localhost:9000/input.txt"