[HADOOP] Java를 사용하여 HDFS에서 파일 액세스
HADOOPJava를 사용하여 HDFS에서 파일 액세스
Java API를 사용하여 HDFS의 파일에 액세스하려고 시도하지만 파일을 찾을 수 없을 때마다 발생합니다. 내가 액세스하는 데 사용하는 코드는 다음과 같습니다.
Configuration conf = new Configuration();
conf.addResource(FileUtilConstants.ENV_HADOOP_HOME + FileUtilConstants.REL_PATH_CORE_SITE);
conf.addResource(FileUtilConstants.ENV_HADOOP_HOME + FileUtilConstants.REL_PATH_HDFS_SITE);
try {
FileSystem fs = FileSystem.get(conf);
Path hdfsfilePath = new Path(hdfsPath);
logger.info("Filesystem URI : " + fs.getUri());
logger.info("Filesystem Home Directory : " + fs.getHomeDirectory());
logger.info("Filesystem Working Directory : " + fs.getWorkingDirectory());
logger.info("HDFS File Path : " + hdfsfilePath);
if (!fs.exists(hdfsfilePath)) {
logger.error("File does not exists : " + hdfsPath);
}
다음은 코드에서 출력되는 명령 행입니다.
[root@koversevms ~]# java -jar /tmp/thetus-incendiary-koverse-extension-fileutils-1.0-SNAPSHOT.jar
13/07/10 02:47:18 INFO fileutils.HadoopFileChecksumUtils: Filesystem URI : file:///
13/07/10 02:47:18 INFO fileutils.HadoopFileChecksumUtils: Filesystem Home Directory : file:/root
13/07/10 02:47:18 INFO fileutils.HadoopFileChecksumUtils: Filesystem Working Directory : file:/root
13/07/10 02:47:18 INFO fileutils.HadoopFileChecksumUtils: HDFS File Path : /usr/hadoop/sample/sample.txt
13/07/10 02:47:18 ERROR fileutils.HadoopFileChecksumUtils: File does not exists : /usr/hadoop/sample/sample.txt
나는 잘못되었다는 것을 모르기 때문에 hadoop을 처음 사용합니다.
해결법
-
==============================
1.다음은이 질문에 대한 대답의 맥락에서 원래 게시 된 코드 단편입니다. 원래 질문의 의도에도 불구하고 귀하의 질문을 해결해야합니다. 코드의 핵심은 scheme (file : //)부터 시작하는 문제입니다. 구성에서 fs.defaultFS 변수를 확인하십시오.
다음은이 질문에 대한 대답의 맥락에서 원래 게시 된 코드 단편입니다. 원래 질문의 의도에도 불구하고 귀하의 질문을 해결해야합니다. 코드의 핵심은 scheme (file : //)부터 시작하는 문제입니다. 구성에서 fs.defaultFS 변수를 확인하십시오.
package org.myorg; import java.security.PrivilegedExceptionAction; import org.apache.hadoop.conf.*; import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileStatus; public class HdfsTest { public static void main(String args[]) { try { UserGroupInformation ugi = UserGroupInformation.createRemoteUser("hbase"); ugi.doAs(new PrivilegedExceptionAction<Void>() { public Void run() throws Exception { Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://1.2.3.4:8020/user/hbase"); conf.set("hadoop.job.ugi", "hbase"); FileSystem fs = FileSystem.get(conf); fs.createNewFile(new Path("/user/hbase/test")); FileStatus[] status = fs.listStatus(new Path("/user/hbase")); for(int i=0;i<status.length;i++){ System.out.println(status[i].getPath()); } return null; } }); } catch (Exception e) { e.printStackTrace(); } } }
from https://stackoverflow.com/questions/17564074/accessing-files-in-hdfs-using-java by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 루프를 통해 hdfs 디렉토리 (0) | 2019.06.17 |
---|---|
[HADOOP] JDBC를 통한 Spark SQL과 Apache Drill 통합 (0) | 2019.06.17 |
[HADOOP] .txt / .csv 파일을 ORC 형식으로 변환하는 방법 (0) | 2019.06.17 |
[HADOOP] Windows에서 실행 - 정확히 winutils가 무엇이며 왜 필요합니까? (0) | 2019.06.17 |
[HADOOP] hadoop mapreduce : java.lang.UnsatisfiedLinkError : org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy () Z (0) | 2019.06.17 |