[HADOOP] HDFS : Java / Scala API를 사용하여 여러 파일 이동
HADOOPHDFS : Java / Scala API를 사용하여 여러 파일 이동
주어진 정규 표현식에 해당하는 여러 파일을 Java / Scala 프로그램을 사용하여 HDFS로 옮길 필요가 있습니다. 예를 들어, 이름이 * .xml 인 모든 파일을 폴더 a에서 폴더 b로 이동해야합니다.
셸 명령을 사용하면 다음을 사용할 수 있습니다.
bin/hdfs dfs -mv a/*.xml b/
FileSystem 클래스에서 이름 바꾸기 메소드를 사용하여 다음 코드 (스칼라 언어)를 사용하여 Java API를 사용하여 단일 파일을 이동할 수 있습니다.
// Prepare initial configuration
val conf = new Configuration()
conf.set("fs.defaultFS", "hdfs://hdfs:9000/user/root")
val fs = FileSystem.get(conf)
// Move a single file
val ok = fs.rename(new Path("a/file.xml"), new Path("b/file.xml"));
내가 아는 한 Path 클래스는 URI를 나타냅니다. 그렇다면 다음과 같은 방식으로 사용할 수 없습니다.
val ok = fs.rename(new Path("a/*.xml"), new Path("b/"));
Java / Scala API를 통해 HDFS에서 파일 세트를 이동하는 방법이 있습니까?
해결법
-
==============================
1.fs.rename (새 경로 ( "a"), 새 경로 ( "b"))를 사용할 수 있습니다.
fs.rename (새 경로 ( "a"), 새 경로 ( "b"))를 사용할 수 있습니다.
그러나 * .xml을 갖고 싶으면 globfilter와 같은 필터 파일이 있습니다.
FileSystem fs = FileSystem.get(URI.create(arg0[0]), conf); Path path = new Path(arg0[0] + arg0[1]); // arg0[1] NYSE_201[2-3] //arg0[0] is base path //ar0[1] uses regular expression FileStatus[] status = fs.globStatus(path); Path[] paths = FileUtil.stat2Paths(status); for (Path p : paths) { // <loops all the source paths> // <need to implement logic to rename the paths using fs.rename> }
from https://stackoverflow.com/questions/34087020/hdfs-move-multiple-files-using-java-scala-api by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] N 일보다 오래된 hdfs의 파티션 폴더 삭제 (0) | 2019.07.03 |
---|---|
[HADOOP] Hadoop put 명령 던지기 - 1 대신 1 개의 노드에만 복제 가능 (0) | 2019.07.03 |
[HADOOP] HBase에서 복구가 어떻게 작동합니까? (0) | 2019.07.03 |
[HADOOP] Hive / Hadoop 간헐적 인 실패 : 대상을 대상으로 이동할 수 없습니다. (0) | 2019.07.03 |
[HADOOP] 스파이크 HiveContext에서 하이브 병합 명령이 작동하지 않습니다. (0) | 2019.07.03 |