복붙노트

[HADOOP] 새 API에서의 AlternTextOutputFormat 대체

HADOOP

새 API에서의 AlternTextOutputFormat 대체

두드러져서 MultipleTextOutputFormat은 새 API로 마이그레이션되지 않았습니다. 따라서 출력 디렉토리를 선택하고 즉시 작성되는 키 - 값을 기반으로 fiename을 출력해야한다면 새로운 mapreduce API로 대체 할 수있는 방법은 무엇입니까?

해결법

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

    1.AWS EMR Hadoop 1.0.3을 사용하고 있으며 k / v 쌍을 기반으로 다른 디렉토리와 파일을 지정할 수 있습니다. MultipleOutputs 클래스에서 다음 함수 중 하나를 사용하십시오.

    AWS EMR Hadoop 1.0.3을 사용하고 있으며 k / v 쌍을 기반으로 다른 디렉토리와 파일을 지정할 수 있습니다. MultipleOutputs 클래스에서 다음 함수 중 하나를 사용하십시오.

    public void write(KEYOUT key, VALUEOUT value, String baseOutputPath)
    

    또는

    public <K,V> void write(String namedOutput, K key, V value,
                            String baseOutputPath)
    

    이전의 write 메소드는 맵 출력 키와 같은 유형 (맵퍼에서 이것을 사용하는 경우) 또는 reduce 출력 키와 동일한 유형 (감속기에서 이것을 사용하는 경우)을 요구합니다. 이 값은 비슷한 방식으로 입력해야합니다.

    후자의 write 메소드는 addNamedOutput 함수를 사용하여 MultipleObjects 정적 속성을 설정할 때 지정된 유형과 일치하는 키 / 값 유형을 필요로합니다.

    public static void addNamedOutput(Job job,
                                  String namedOutput,
                                  Class<? extends OutputFormat> outputFormatClass,
                                  Class<?> keyClass,
                                  Class<?> valueClass)
    

    Context가 사용하는 것보다 다른 출력 유형이 필요한 경우에는 후자의 write 메소드를 사용해야합니다.

    다른 출력 디렉토리를 얻는 방법은 다음과 같이 디렉토리 분리 기호가 포함 된 baseOutputPath를 전달하는 것입니다.

    multipleOutputs.write("output1", key, value, "dir1/part");
    

    필자의 경우이 파일은 "dir1 / part-r-00000"이라는 파일을 만들었습니다.

    .. 디렉토리를 포함하는 baseOutputPath를 사용하지 못했기 때문에 모든 baseOutputPaths가 -output 매개 변수에 전달 된 경로에 엄격하게 포함되었습니다.

    MultipleOutputs를 설정하고 올바르게 사용하는 방법에 대한 자세한 내용은 내가 찾은 코드 (광산은 아니지만 매우 유용하다는 것을 알았고 다른 출력 디렉토리를 사용하지 않음)를 참조하십시오. https://github.com/rystsov/learning-hadoop/blob/master/src/main/java/com/twitter/rystsov/mr/MultipulOutputExample.java

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

    2.유사 항목 : Hadoop Reducer : 어떻게 투기 실행을 사용하여 여러 디렉토리로 출력 할 수 있습니까?

    유사 항목 : Hadoop Reducer : 어떻게 투기 실행을 사용하여 여러 디렉토리로 출력 할 수 있습니까?

    근본적으로 감속기에서 직접 HDFS에 쓸 수 있습니다. 추측 실행을 조심하고 파일의 이름을 고유하게 지정해야합니다. 그러면 중단 된 시도를 정리하기 위해 자신 만의 OutputCommitter를 구현해야합니다 (이것은 가장 어렵습니다 정말로 동적 인 출력 폴더가있는 경우, 각 폴더를 단계별로 실행하고 중단 된 / 실패한 작업과 관련된 attemps를 삭제해야합니다. 이것에 대한 간단한 해결책은 추측 실행을 끄는 것입니다

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

    3.가장 좋은 답변을 얻으려면 하둡 (Hadoop) - 최종 가이드 인 3 차 편집을 참조하십시오 (253 페이지 시작).

    가장 좋은 답변을 얻으려면 하둡 (Hadoop) - 최종 가이드 인 3 차 편집을 참조하십시오 (253 페이지 시작).

    HDG 서적의 발췌 -

    "이전 MapReduce API에는 Multiple Outputs와 Multiple Outputs를 생성하는 두 가지 클래스가 있습니다 : 간단히 말해서 MultipleOutputs는 더 완벽하게 기능하지만 MultipleOutputFormat은 출력 디렉토리 구조와 파일 명명법에 대해 더 많은 제어권을가집니다. 새로운 API의 MultipleOutputs는 이전 API의 두 개의 다중 출력 클래스 중 가장 뛰어난 기능입니다. "

    MultipleOutputs API를 사용하여 디렉토리 구조, 파일 이름 지정 및 출력 형식을 제어하는 ​​방법에 대한 예제가 있습니다.

    HTH.

  4. from https://stackoverflow.com/questions/15100621/multipletextoutputformat-alternative-in-new-api by cc-by-sa and MIT license