[HADOOP] 자바에서 hdfs 폴더 삭제
HADOOP자바에서 hdfs 폴더 삭제
가장자리 노드에서 실행중인 Java 응용 프로그램에서 hdfs 폴더가 있으면 삭제해야합니다. 그 폴더에서 출력되는 mapreduce 작업 (스파크 포함)을 실행하기 전에 그렇게해야합니다.
나는 그 방법을 사용할 수 있음을 발견했다.
org.apache.hadoop.fs.FileUtil.fullyDelete(new File(url))
그러나 로컬 폴더 (예 : 실행중인 컴퓨터의 파일 URL)에서만 작동하도록 할 수 있습니다. 나는 다음과 같은 것을 사용하려고 시도했다 :
url = "hdfs://hdfshost:port/the/folder/to/delete";
hdfs : // hdfshost : port는 hdfs namenode IPC입니다. 나는 mapreduce를 위해 그것을 사용한다. 그래서 그것은 정확하다. 그러나 아무것도하지 않습니다.
그래서, 어떤 URL을 사용해야합니까, 아니면 또 다른 방법이 있습니까?
참고 : 여기에 간단한 프로젝트가 있습니다.
해결법
-
==============================
1.나는 이렇게 해.
나는 이렇게 해.
Configuration conf = new Configuration(); conf.set("fs.hdfs.impl",org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()); conf.set("fs.file.impl",org.apache.hadoop.fs.LocalFileSystem.class.getName()); FileSystem hdfs = FileSystem.get(URI.create("hdfs://<namenode-hostname>:<port>"), conf); hdfs.delete("/path/to/your/file", isRecursive);
파일 경로에 hdfs : // hdfshost : port /가 필요하지 않습니다.
-
==============================
2.이것은 나를 위해 작동합니다.
이것은 나를 위해 작동합니다.
그냥 내 WordCount 프로그램에서 다음 코드를 추가 할 것입니다 :
import org.apache.hadoop.fs.*; ... Configuration conf = new Configuration(); Path output = new Path("/the/folder/to/delete"); FileSystem hdfs = FileSystem.get(URI.create("hdfs://namenode:port"),conf); // delete existing directory if (hdfs.exists(output)) { hdfs.delete(output, true); } Job job = Job.getInstance(conf, "word count"); ...
분산 파일 시스템을 얻으려면 명시 적으로 hdfs : // hdfshost : port를 추가해야합니다. 그렇지 않으면 코드가 로컬 파일 시스템에서만 작동합니다.
from https://stackoverflow.com/questions/28767607/delete-hdfs-folder-from-java by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하이브 쿼리가있는 Hadoop의 연속 레코드 간의 차이점 계산 (0) | 2019.06.22 |
---|---|
[HADOOP] Hive를 사용하여 날짜 차이를 몇 분 만에 얻는 방법 (0) | 2019.06.22 |
[HADOOP] Hadoop에 JAVA_Home이 설정되지 않았습니다. (0) | 2019.06.22 |
[HADOOP] org.apache.hadoop.hbase.PleaseHoldException : 마스터가 초기화 중입니다. (0) | 2019.06.22 |
[HADOOP] SafeModeException : 이름 노드가 안전 모드에 있습니다. (0) | 2019.06.22 |