복붙노트

[HADOOP] Hadoop MapReduce는 중첩 된 디렉토리를 작업 입력으로 제공합니다.

HADOOP

Hadoop MapReduce는 중첩 된 디렉토리를 작업 입력으로 제공합니다.

여러 레벨의 파일을 포함하는 중첩 된 디렉토리 구조를 처리하는 작업을하고 있습니다.

one/
├── three/
│   └── four/
│       ├── baz.txt
│       ├── bleh.txt
│       └── foo.txt
└── two/
    ├── bar.txt
    └── gaa.txt

하나를 / 입력 경로로 추가하면 루트 수준에서 즉시 사용할 수있는 파일이 없으므로 파일이 처리되지 않습니다.

나는 job.addInputPathRecursively (..)에 대해 읽었지만, 최근 릴리스에서는 더 이상 사용되지 않는 것으로 보인다. (hadoop 1.0.2를 사용하고있다.) 폴더를 걷고 job.addInputPath (dir)을 사용하여 각 dir을 추가하는 코드를 작성했습니다.이 디렉토리는 어떤 이유로 인해 디렉토리를 입력 파일로 처리하려고 시도 할 때까지 작동했습니다. - split.getPath ()가 디렉토리 일 때 fs.open (split.getPath ())을 시도합니다 (이것은 LineRecordReader.java 내부에서 발생합니다).

중첩 된 디렉토리 구조로 작업을 제공하는 더 간단한 방법이 있어야한다는 것을 스스로 확신하고 있습니다. 어떤 아이디어?

편집 - 분명히 거기에 열려있는 버그가 있습니다.

해결법

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

    1.나는이 문서를 찾지 못했지만 * / * 작동합니다. 그래서 그것은 '입력 경로 / * / *'입니다.

    나는이 문서를 찾지 못했지만 * / * 작동합니다. 그래서 그것은 '입력 경로 / * / *'입니다.

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

    2.import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

    FileInputFormat.setInputDirRecursive (job, true);

    아니, 그냥 LeiFeng 전화 해!

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

    3.재귀 적으로 distcp 나 이와 유사한 로그 파일이 남아있을 수 있기 때문에 데이터를 거치는 것이 위험 할 수 있습니다. 내가 대안을 제안하자.

    재귀 적으로 distcp 나 이와 유사한 로그 파일이 남아있을 수 있기 때문에 데이터를 거치는 것이 위험 할 수 있습니다. 내가 대안을 제안하자.

    명령 줄에서 재귀 적 보행을 한 다음, 공백으로 구분 된 매개 변수의 경로를 MapReduce 프로그램에 전달하십시오. argv에서 목록 가져 오기 :

    $ hadoop jar blah.jar "`hadoop fs -lsr recursivepath | awk '{print $8}' | grep '/data.*\.txt' | tr '\n' ' '`"
    

    긴 bash를 유감스럽게 생각하지만 작업이 완료됩니다. 상황을 변수로 분해하기 위해 bash 스크립트로 래핑 할 수 있습니다.

    개인적으로 map-in-filepath 접근법을 사용하여 코드 자체에 경로가 하드 코딩되지 않도록하고 파일의 복잡한 목록에 대해 실행되도록 설정하는 것이 상대적으로 쉽습니다.

  4. ==============================

    4.여전히 관련이 있는지는 모르지만 적어도 hadoop 2.4.0에서는 mapreduce.input.fileinputformat.input.dir.recursive 속성을 true로 설정하면 문제가 해결됩니다.

    여전히 관련이 있는지는 모르지만 적어도 hadoop 2.4.0에서는 mapreduce.input.fileinputformat.input.dir.recursive 속성을 true로 설정하면 문제가 해결됩니다.

  5. ==============================

    5.그냥 FileInputFormat.addInputPath ( "파일 패턴"); 나는 입력이 diff 형식의 .gz 형식 인 그래프 분석을 위해 내 첫 번째 hadoop prog을 작성하고있다. 그것은 나를 위해 일했다! !!

    그냥 FileInputFormat.addInputPath ( "파일 패턴"); 나는 입력이 diff 형식의 .gz 형식 인 그래프 분석을 위해 내 첫 번째 hadoop prog을 작성하고있다. 그것은 나를 위해 일했다! !!

  6. from https://stackoverflow.com/questions/10210713/hadoop-mapreduce-provide-nested-directories-as-job-input by cc-by-sa and MIT license