복붙노트

[HADOOP] HDFS에서 데이터 읽기-프로그램이 경로를 찾을 수 없습니다

HADOOP

HDFS에서 데이터 읽기-프로그램이 경로를 찾을 수 없습니다

HDFS에서 파일 내용을 읽으려고합니다. 내 코드는 다음과 같습니다-

package gen;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class ReadFromHDFS {

 public static void main(String[] args) throws Exception {

  if (args.length < 1) {
   System.out.println("Usage: ReadFromHDFS <hdfs-file-path-to-read-from>");
   System.out.println("Example: ReadFromHDFS 'hdfs:/localhost:9000/myFirstSelfWriteFile'");
   System.exit(-1);
  } 

  try {
   Path path = new Path(args[0]);
   FileSystem fileSystem = FileSystem.get(new Configuration());
   BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileSystem.open(path)));
   String line = bufferedReader.readLine();
   while (line != null) {
    System.out.println(line);
    line = bufferedReader.readLine();
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

그러나이 프로그램에 내 HDFS 디렉토리의 경로를 지정하는 방법을 알 수 없습니다. 나는 시도했다-

java -cp <hadoop jar:myjar> gen.ReadFromHDFS <path>

어디에서 경로를 사용하여 디렉토리를 직접 참조하려고했는데 (내가 hadoop fs -ls를 할 때 볼 수 있음) 디렉토리 내부의 파일에 hdfs : / localhost, hdfs : /를 추가하면 아무것도 작동하지 않습니다. 폴더의 경로를 HDFS로 정확히 전달하는 방법을 알려주는 사람이 있습니까? 예를 들어, 경로를 접두사없이 직접 제공하면 파일이 존재하지 않는다고 말합니다.

편집 : 지금까지 해결책 중 어느 것도 나를 위해 작동하지 않는 것 같습니다. 나는 항상 예외를 받는다-

  java.io.FileNotFoundExceptoin: File <filename> does not exist.
  at org.apache.hadoop.fs.getFileSystem.getFileStatus(RawLocalFileSystem.java:361)

파일을 로컬에서 찾으려고합니다.

해결법

  1. ==============================

    1.시험

    시험

    FileSystem fileSystem = FileSystem.get(new Configuration());
    Path path = new Path(fileSystem.getName() + "/" + args[0]);
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileSystem.open(path)));
    String line = bufferedReader.readLine();
    

    HDFS에서 파일 경로를 접두사없이 제공하십시오.

    "/myFirstSelfWriteFile"
    

    "hdfs : / localhost"를 포함하지 마십시오

  2. ==============================

    2.패키지 org.apache.hadoop.fs (FileSystem, FSDataInputStream, FSDataOutputStream 및 Path)의 클래스를 사용해야합니다. 몇 가지 기사가 있지만 Hadoop Wiki 에서이 기사를 사용합니다.

    패키지 org.apache.hadoop.fs (FileSystem, FSDataInputStream, FSDataOutputStream 및 Path)의 클래스를 사용해야합니다. 몇 가지 기사가 있지만 Hadoop Wiki 에서이 기사를 사용합니다.

  3. ==============================

    3.경로에 하나가 누락 된 것처럼 보입니다. 파일 시스템 뒤에 /가 있어야합니다. 다음 경로를 지정하십시오

    경로에 하나가 누락 된 것처럼 보입니다. 파일 시스템 뒤에 /가 있어야합니다. 다음 경로를 지정하십시오

    hdfs://localhost:9000/myFirstSelfWriteFile
    
  4. from https://stackoverflow.com/questions/24986887/reading-data-from-hdfs-my-program-cant-find-the-path by cc-by-sa and MIT license