복붙노트

[HADOOP] Hadoop MapReduce에서 여러 개의 텍스트가 아닌 파일을 단일 맵에 제공

HADOOP

Hadoop MapReduce에서 여러 개의 텍스트가 아닌 파일을 단일 맵에 제공

나는 현재 Hadoop MapReduce의 도움으로 Pdf 파일을 파싱하는 분산 애플리케이션을 작성 중이다. MapReduce 작업에 대한 입력은 수천 개의 Pdf 파일 (주로 100KB에서 2MB까지)이며, 출력은 파싱 된 텍스트 파일 세트입니다.

테스트 목적으로 처음에는 Tom White의 Hadoop에 제공된 WholeFileInputFormat을 사용했습니다. 단일 파일을 단일 맵으로 제공하는 Definitive Guide 서적. 적은 수의 입력 파일로도 제대로 작동하지만 분명한 이유로 수천 개의 파일에서 제대로 작동하지 않습니다. 1 초에 완료되는 데 걸리는 작업의 맵은 비효율적입니다.

그래서, 내가하고 싶은 일은 하나의 맵에 여러 개의 Pdf 파일을 제출하는 것입니다 (예 : 여러 파일을 HDFS 블록 크기 ~ 64MB 주위에있는 단일 청크로 결합). 필자는 CombineFileInputFormat이 필자의 경우에 유용하다는 것을 알았다. 그러나 나는 추상적 인 클래스를 확장하는 방법을 생각해 낼 수 없기 때문에 각 파일과 파일 이름을 하나의 키 - 값 레코드로 처리 할 수있다.

어떤 도움을 주셔서 감사합니다. 감사!

해결법

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

    1.제 생각에 SequenceFile은 여러분의 필요에 맞게 될 것입니다 : http://wiki.apache.org/hadoop/SequenceFile

    제 생각에 SequenceFile은 여러분의 필요에 맞게 될 것입니다 : http://wiki.apache.org/hadoop/SequenceFile

    기본적으로 모든 PDF를 시퀀스 파일에 저장하면 매퍼는 시퀀스 파일의 한 HDFS 블록에 맞는 수의 PDF를 수신합니다. 시퀀스 파일을 만들 때 키를 PDF 파일 이름으로 설정하면 값은 PDF의 이진 표현이됩니다.

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

    2.파일에 HDFS 패턴이있는 텍스트 파일을 만들어 입력 파일로 사용할 수 있습니다. 많은 파일에 대해 매퍼 재사용을 제공하지만 데이터 지역 비용이 발생합니다. 데이터가 비교적 작 으면 높은 복제 계수 (데이터 노드의 수에 가깝습니다)로 문제를 해결할 수 있습니다.

    파일에 HDFS 패턴이있는 텍스트 파일을 만들어 입력 파일로 사용할 수 있습니다. 많은 파일에 대해 매퍼 재사용을 제공하지만 데이터 지역 비용이 발생합니다. 데이터가 비교적 작 으면 높은 복제 계수 (데이터 노드의 수에 가깝습니다)로 문제를 해결할 수 있습니다.

  3. from https://stackoverflow.com/questions/5133881/providing-several-non-textual-files-to-a-single-map-in-hadoop-mapreduce by cc-by-sa and MIT license