현재 Hadoop MapReduce를 사용하여 Pdf 파일을 구문 분석하는 분산 응용 프로그램을 작성하고 있습니다. MapReduce 작업 입력은 수천 개의 Pdf 파일 (주로 100KB에서 2MB까지)이며 출력은 파싱 된 텍스트 파일 집합입니다.Hadoop MapReduce에서 하나의지도에 여러 개의 텍스트가 아닌 파일 제공
테스트 목적으로 처음에 나는 Tom White의 Hadoop에서 제공 한 WholeFileInputFormat
을 사용했습니다. The Definitive Guide 책은 단일 파일을 단일 맵으로 제공합니다. 적은 수의 입력 파일로도 제대로 작동하지만 분명한 이유로 수천 개의 파일에서 제대로 작동하지 않습니다. 1 초에 완료되는 데 걸리는 작업의 맵은 비효율적입니다.
그래서 내가하고 싶은 것은 하나의지도에 여러 개의 PDF 파일을 제출하는 것입니다 (예 : 여러 파일을 HDFS 블록 크기가 약 64MB 인 단일 청크로 결합). 저의 경우에는 CombineFileInputFormat
이 유용하다는 것을 알았습니다. 그러나 나는 추상적 인 클래스를 확장하는 방법을 생각해 낼 수 없기 때문에 각 파일과 파일 이름을 하나의 키 - 값 레코드로 처리 할 수있다.
도움을 주시면 감사하겠습니다. 감사!
pdfs가 sequencefiles 일지라도 Hadoop은 filesplit을 사용하여 각 파일에 대한 매퍼를 만듭니다. –
'SequenceFile'을 사용하면 모든 내 10,000 PDF를 'SequenceFile'청크로 변환해야합니다. 다시 말하자면,이 변환 단계에서 각 파일을 각 맵에 제출하는 것입니다. 그리 효율적이지 않습니다. 어쨌든, 귀하의 의견에 감사드립니다. –
시퀀스 파일을 만드는 데 시간이 오래 걸리지 않아야하며 효율성 향상은 해당 파일을 두 번 이상 사용하면 발생합니다. 내가 사용한 이후로 꽤 오랜 시간이 걸렸지 만, 시퀀스 파일은 작업 추적기의 HDFS 청크마다 하나의 Mapper 인스턴스를 생성하고,이 인스턴스는 로컬의 각 레코드에 대해 한 번 map 메소드를 호출합니다 청크 (inputsplit). 제거해야 할 가장 중요한 오버 헤드는 Mapper 인스턴스 내에서 map 메소드를 여러 번 호출하는 것이 아니라 mapper 인스턴스를 만드는 것입니다. – stinkymatt