覆写HDFS文件/目录
问题描述:
我保存在HDFS文件和所有我想要做的就是运行我的火花的应用程序,计算结果javaRDD
,为了存储新的使用saveAsTextFile()
HDFS中的“文件”。
但是,如果文件已存在,Spark的saveAsTextFile()
不起作用。它不覆盖它。
我试过
所以我寻找一个解决方案,这一点,我发现一个可行的办法,使其试图保存新的一个工作之前可以通过HDFS API来删除文件。
我添加的代码:
FileSystem hdfs = FileSystem.get(new Configuration());
Path newFolderPath = new Path("hdfs://node1:50050/hdfs/" +filename);
if(hdfs.exists(newFolderPath)){
System.out.println("EXISTS");
hdfs.delete(newFolderPath, true);
}
filerdd.saveAsTextFile("/hdfs/" + filename);
当我试图运行我的星火应用程序,该文件已被删除,但我得到一个FileNotFoundException
。
考虑到这样的事实,即当有人试图从路径中读取文件并且文件不存在时发生此异常,这是没有意义的,因为在删除文件之后,没有代码尝试读取它。我的代码
JavaRDD<String> filerdd = sc.textFile("/hdfs/" + filename) // load the file here
...
...
// Transformations here
filerdd = filerdd.map(....);
...
...
// Delete old file here
FileSystem hdfs = FileSystem.get(new Configuration());
Path newFolderPath = new Path("hdfs://node1:50050/hdfs/" +filename);
if(hdfs.exists(newFolderPath)){
System.out.println("EXISTS");
hdfs.delete(newFolderPath, true);
}
// Write new file here
filerdd.saveAsTextFile("/hdfs/" + filename);
部分,我想在这里做最简单的事情,但我不知道为什么这是行不通的。也许filerdd以某种方式连接到路径?
你可以添加堆栈跟踪吗? – javadba