[HADOOP] HDFS에서 로컬 머신으로 파일 복사하기
HADOOPHDFS에서 로컬 머신으로 파일 복사하기
HDFS 파일 시스템에서 로컬 시스템으로 파일을 "다운로드"하는 데 문제가 있습니다. (반대의 작동이 문제없이 작동하더라도). * 참고 : 지정된 경로의 파일이 HDFS 파일 시스템에 있습니다.
다음은 코드 스 니펫입니다.
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "${NAMENODE_URI}");
FileSystem hdfsFileSystem = FileSystem.get(conf);
String result = "";
Path local = new Path("${SOME_LOCAL_PATH}");
Path hdfs = new Path("${SOME_HDFS_PATH}");
String fileName = hdfs.getName();
if (hdfsFileSystem.exists(hdfs))
{
hdfsFileSystem.copyToLocalFile(hdfs, local);
result = "File " + fileName + " copied to local machine on location: " + localPath;
}
else
{
result = "File " + fileName + " does not exist on HDFS on location: " + localPath;
}
return result;
예외는 다음과 같습니다.
12/07/13 14:57:46 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Exception in thread "main" java.io.IOException: Cannot run program "cygpath": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at org.apache.hadoop.util.Shell.runCommand(Shell.java:206)
at org.apache.hadoop.util.Shell.run(Shell.java:188)
at org.apache.hadoop.fs.FileUtil$CygPathCommand.<init>(FileUtil.java:412)
at org.apache.hadoop.fs.FileUtil.makeShellPath(FileUtil.java:438)
at org.apache.hadoop.fs.FileUtil.makeShellPath(FileUtil.java:465)
at org.apache.hadoop.fs.RawLocalFileSystem.execCommand(RawLocalFileSystem.java:573)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:565)
at org.apache.hadoop.fs.FilterFileSystem.setPermission(FilterFileSystem.java:403)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:452)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:420)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:774)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:755)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:654)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:259)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:232)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:183)
at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1837)
at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1806)
at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1782)
at com.hmeter.hadoop.hdfs.hdfsoperations.HdfsOperations.fileCopyFromHdfsToLocal(HdfsOperations.java:75)
at com.hmeter.hadoop.hdfs.hdfsoperations.HdfsOperations.main(HdfsOperations.java:148)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 22 more
어떤 아이디어가 문제가 될 수 있습니까? Cygwin에서 cyqpath가 필요한 이유는 무엇입니까? Windows 7에서이 코드를 실행하고 있습니다.
감사
해결법
-
==============================
1.API에서이 방법을 사용해보십시오.
API에서이 방법을 사용해보십시오.
//where delSrc is do you want to delete the source, src and dst you already have and useRawLocalFileSystem should be set to true in your case hdfsFileSystem.copyToLocalFile(delSrc, src, dst, useRawLocalFileSystem);
귀하의 경우 :
hdfsFileSystem.copyToLocalFile(hdfs, local);
와:
hdfsFileSystem.copyToLocalFile(false, hdfs, local, true);
-
==============================
2.아래 코드를 따라갈 수 있습니다 :
아래 코드를 따라갈 수 있습니다 :
public static void main(String args[]){ try { Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:54310/user/hadoop/"); FileSystem fs = FileSystem.get(conf); FileStatus[] status = fs.listStatus(new Path("hdfsdirectory")); for(int i=0;i<status.length;i++){ System.out.println(status[i].getPath()); fs.copyToLocalFile(false, status[i].getPath(), new Path("localdir")); } } catch (IOException e) { e.printStackTrace(); } }
from https://stackoverflow.com/questions/11471176/copying-file-from-hdfs-to-local-machine by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하나의 블록에 여러 개의 파일이 저장되어 있습니까? (0) | 2019.06.14 |
---|---|
[HADOOP] Hive HDFS의 각 삽입에 대한 다중 작은 파일 만들기 (0) | 2019.06.14 |
[HADOOP] hadoop의 시퀀스 파일은 무엇입니까? (0) | 2019.06.14 |
[HADOOP] 기록중인 파일에 액세스 중 (0) | 2019.06.14 |
[HADOOP] Hadoop Map 텍스트 파일 읽기 줄이기 (0) | 2019.06.14 |