Java 코드를 사용하여 로컬 시스템에서 HDFS로 디렉토리를 복사하는 데 문제가 있습니다. 개별 파일을 이동할 수는 있지만 하위 폴더 및 파일을 사용하여 전체 디렉토리를 이동하는 방법을 알아낼 수는 없습니다. 누구든지 저를 도울 수 있습니까? 미리 감사드립니다.디렉토리를 로컬 시스템에서 hdfs로 복사 Java 코드
8
A
답변
17
FileSystem
의 copyFromLocalFile 방법을 사용하면됩니다. 소스 경로가 로컬 디렉토리 인 경우 HDFS 대상에 복사됩니다.
...
Configuration conf = new Configuration();
conf.addResource(new Path("/home/user/hadoop/conf/core-site.xml"));
conf.addResource(new Path("/home/user/hadoop/conf/hdfs-site.xml"));
FileSystem fs = FileSystem.get(conf);
fs.copyFromLocalFile(new Path("/home/user/directory/"),
new Path("/user/hadoop/dir"));
...
0
여기는 HDFS에서 읽고 쓰는 전체 작업 코드입니다. 이 두 인자
입력 경로 (로컬/HDFS)
출력 경로 (HDFS) I는 클라우 데라 샌드 박스를 사용
걸린다.
package hdfsread;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class ReadingAFileFromHDFS {
public static void main(String[] args) throws IOException {
String uri = args[0];
InputStream in = null;
Path pt = new Path(uri);
Configuration myConf = new Configuration();
Path outputPath = new Path(args[1]);
myConf.set("fs.defaultFS","hdfs://quickstart.cloudera:8020");
FileSystem fSystem = FileSystem.get(URI.create(uri),myConf);
OutputStream os = fSystem.create(outputPath);
try{
InputStream is = new BufferedInputStream(new FileInputStream(uri));
IOUtils.copyBytes(is, os, 4096, false);
}
catch(IOException e){
e.printStackTrace();
}
finally{
IOUtils.closeStream(in);
}
}
}
+0
안녕하세요,이 하나를 시도하면 org/apache/hadoop/fs/FSDataOutputStream 오류가 나타납니다. 나는 hadoop-common, hadoop-hdfs 라이브러리를 pom에 추가했다. core-site.xml, hdfs-site.xml을 내 구성에 추가했습니다. – user4342532
관련 문제
- 1. Java 코드 내의 Maven 종속성 복사
- 2. Hadoop에서 HDFS로 파일 쓰기
- 3. 임베디드 시스템에서 코드 실행
- 4. 로컬 시스템에서 EPP 서버에 연결
- 5. 파일을 HDFS에서 로컬 컴퓨터로 복사
- 6. jar에서 로컬 폴더로 디렉토리 복사
- 7. JSP로 원격 UNIX 시스템에서 java 프로그램을 실행하십시오.
- 8. Bash 스크립트 : 디렉토리를 외장 드라이브에 복사 - 디렉토리를 탐색하는 방법?
- 9. java : 디렉토리를 만들고
- 10. TransferFromLocal에서 많은 스레드를 사용하는 hadoop hdfs로
- 11. Java 코드
- 12. PIG가 자동으로 기본 HDFS로 연결 되었습니까?
- 13. 사용자가 복사 할 디렉토리를 선택할 수있게하려면 어떻게해야합니까?
- 14. X 하나의 디렉토리를 다른 대상에 복사
- 15. Amazon S3 디렉토리를 다른 디렉토리에 복사
- 16. 하위 디렉토리를 포함한 iOS 복사 디렉토리
- 17. QR 코드 복사/생성
- 18. readdir을 내 로컬 호스트 시스템에서 위해 scandir
- 19. 덜 CSS는 로컬 파일 시스템에서 실행할 때
- 20. 로컬 파일 시스템에서 Silverlight 위젯 호스팅
- 21. lxml을 로컬 시스템에서 virtualenv에 설치하는 방법은 무엇입니까?
- 22. UIWebView 로컬 파일 시스템에서 HTML 파일로드
- 23. Java - Jar 폴더 복사
- 24. Java, jre로 파일 복사
- 25. java - 배열 배열리스트 복사
- 26. 하나의 시스템에서 다른 시스템으로 하나의 SAP 클라이언트 복사/이동
- 27. Java 코드
- 28. 애플릿은 로컬 파일 시스템에서 파일을 읽고 쓸 수 있습니까?
- 29. 로컬 파일 시스템 디렉토리를 클러스터의 Mapper 입력으로 실행하십시오.
- 30. 로컬 디렉토리를 선택할 수있는 VB 버튼
어떤 버전의 Hadoop을 사용하고 있습니까? 'bin/hadoop dfs -copyFromLocal folder'는'folder'를 복사하고 재귀 적으로 모든 것을 복사합니다. 디렉토리가 '파일'이 아니기 때문에 –
입니다. 재귀 적으로 디렉토리를 생성하고 하나씩 파일을 이동해야합니다 (원하는 경우 평행하게 수행 할 수 있습니다). 물론,이 작업은 원 자성이 아니라는 것을 알아야합니다. 따라서 실패 할 경우 hdfs에서 끝난 파일이 있습니다. – octo