복붙노트

[HADOOP] udf에서 hdfs 파일에 액세스

HADOOP

udf에서 hdfs 파일에 액세스

내 udf 통화에서 파일에 액세스하고 싶습니다. 이것은 내 스크립트입니다 :

files = LOAD '$docs_in' USING PigStorage(';') AS (id, stopwords, id2, file);
buzz = FOREACH files GENERATE pigbuzz.Buzz(file, id) as file:bag{(year:chararray, word:chararray, count:long)}; 

항아리가 등록되었습니다. 경로는 파일이 실제로 존재하는 내 hdfs에 상대적입니다. 전화가 걸립니다. 그러나 파일이 발견되지 않은 것 같습니다. 어쩌면 내가 hdfs에서 파일에 액세스하려하기 때문일 수도 있습니다.

내 UDF Java 호출에서 hdfs의 파일에 어떻게 액세스 할 수 있습니까?

해결법

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

    1.EvalFunc 안에서 HDFS에서 파일을 얻을 수 있습니다 :

    EvalFunc 안에서 HDFS에서 파일을 얻을 수 있습니다 :

    FileSystem fs = FileSystem.get(UDFContext.getUDFContext().getJobConf());
    in = fs.open(new Path(fileName));
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    ....
    

    또한 파일을 분산 캐시에 저장하는 것을 고려해 볼 수 있습니다.이 경우 EvalFunc 클래스에서 getCacheFiles ()를 재정의해야합니다.

    Eq :

    @Override
    public List<String> getCacheFiles() {
      List<String> list = new ArrayList<String>(2);
      list.add("/cache/pig/wordlist1.txt#w1");
      list.add("/cache/pig/wordlist2.txt#w2");
      return list;
    }
    

    파일을 가져 오려면 파일의 심볼릭 링크 (w1과 w2)를 전달하면됩니다. 각 작업 노드의 로컬 파일 시스템

    BufferedReader br = new BufferedReader(new FileReader(fileName));
    
  2. from https://stackoverflow.com/questions/17514022/access-hdfs-file-from-udf by cc-by-sa and MIT license