[HADOOP] 새 API에서의 AlternTextOutputFormat 대체
HADOOP새 API에서의 AlternTextOutputFormat 대체
두드러져서 MultipleTextOutputFormat은 새 API로 마이그레이션되지 않았습니다. 따라서 출력 디렉토리를 선택하고 즉시 작성되는 키 - 값을 기반으로 fiename을 출력해야한다면 새로운 mapreduce API로 대체 할 수있는 방법은 무엇입니까?
해결법
-
==============================
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.유사 항목 : Hadoop Reducer : 어떻게 투기 실행을 사용하여 여러 디렉토리로 출력 할 수 있습니까?
유사 항목 : Hadoop Reducer : 어떻게 투기 실행을 사용하여 여러 디렉토리로 출력 할 수 있습니까?
근본적으로 감속기에서 직접 HDFS에 쓸 수 있습니다. 추측 실행을 조심하고 파일의 이름을 고유하게 지정해야합니다. 그러면 중단 된 시도를 정리하기 위해 자신 만의 OutputCommitter를 구현해야합니다 (이것은 가장 어렵습니다 정말로 동적 인 출력 폴더가있는 경우, 각 폴더를 단계별로 실행하고 중단 된 / 실패한 작업과 관련된 attemps를 삭제해야합니다. 이것에 대한 간단한 해결책은 추측 실행을 끄는 것입니다
-
==============================
3.가장 좋은 답변을 얻으려면 하둡 (Hadoop) - 최종 가이드 인 3 차 편집을 참조하십시오 (253 페이지 시작).
가장 좋은 답변을 얻으려면 하둡 (Hadoop) - 최종 가이드 인 3 차 편집을 참조하십시오 (253 페이지 시작).
HDG 서적의 발췌 -
"이전 MapReduce API에는 Multiple Outputs와 Multiple Outputs를 생성하는 두 가지 클래스가 있습니다 : 간단히 말해서 MultipleOutputs는 더 완벽하게 기능하지만 MultipleOutputFormat은 출력 디렉토리 구조와 파일 명명법에 대해 더 많은 제어권을가집니다. 새로운 API의 MultipleOutputs는 이전 API의 두 개의 다중 출력 클래스 중 가장 뛰어난 기능입니다. "
MultipleOutputs API를 사용하여 디렉토리 구조, 파일 이름 지정 및 출력 형식을 제어하는 방법에 대한 예제가 있습니다.
HTH.
from https://stackoverflow.com/questions/15100621/multipletextoutputformat-alternative-in-new-api by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 구조체 배열로 데이터 선택 하이브 (0) | 2019.06.04 |
---|---|
[HADOOP] 하이브 및 정규 표현 (0) | 2019.06.04 |
[HADOOP] Hadoop Path 객체를 Java File 객체로 변환하는 방법 (0) | 2019.06.04 |
[HADOOP] Hadoop이 실행 중이더라도 작업 추적기에 내 직업을 보여주지 않습니다. (0) | 2019.06.04 |
[HADOOP] MapReduce 작업 출력 정렬 순서 (0) | 2019.06.04 |