복붙노트

[HADOOP] 수백만 개의 작은 XML 파일 구문 분석

HADOOP

수백만 개의 작은 XML 파일 구문 분석

1000 만 개의 작은 XML 파일 (300KB-500KB)이 있습니다. Mapoutduce에서 Mahaout의 XML 입력 형식을 사용하여 데이터를 읽었으며 구문 분석에 SAX Parser를 사용하고 있습니다. 그러나 처리가 매우 느립니다. 입력 파일의 압축 (lzo)을 사용하면 increse 성능에 도움이됩니까? 각 폴더에는 80-90k xml 파일이 포함되어 있으며, 프로세스를 시작하면 각 파일에 대한 매퍼가 실행됩니다. 매퍼를 줄일 수있는 방법은 없습니다. ?

해결법

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

    1.Hadoop은 엄청난 양의 작은 파일들과 잘 작동하지 않습니다. 매우 큰 파일 몇 개를 처리하도록 설계되었습니다.

    Hadoop은 엄청난 양의 작은 파일들과 잘 작동하지 않습니다. 매우 큰 파일 몇 개를 처리하도록 설계되었습니다.

    파일을 압축하면 도움이되지 않습니다. 왜냐하면 문제는 작업을 수행 할 때 많은 컨테이너를 인스턴스화하여 각 파일마다 하나씩 맵을 실행해야하기 때문입니다. 인스턴스화 컨테이너는 입력을 처리하는 데 필요한 시간 (메모리 및 CPU와 같은 많은 리소스)보다 많은 시간이 소요될 수 있습니다.

    Mahaout의 입력 형식에는 익숙하지 않지만, hadoop에는 하나의 Mapper에서 여러 입력을 결합하는 문제를 최소화하는 클래스가 있습니다. 클래스는 CombineTextInputFormat입니다. XML을 사용하려면 CombineFileInputFormat을 확장하는 자체 XMLInputFormat을 만들어야 할 수도 있습니다.

    그러나 개선되지 않은 또 다른 대안은 컨테이너간에 JVM을 재사용 할 수 있다는 것입니다. 하둡 맵 렌더링 작업에서 JVM 재사용

    JVM을 재사용하면 각 JVM을 만드는 데 필요한 시간은 안전하지만 각 파일마다 하나의 컨테이너를 만들어야합니다.

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

    2.이 기사에서 인용 된 것처럼 세 가지 방법 중 하나를 수행 할 수 있습니다.

    이 기사에서 인용 된 것처럼 세 가지 방법 중 하나를 수행 할 수 있습니다.

    여러 솔루션을 나열하는 기사 1과 기사 2를 발견했습니다 (이 기사에서 일부 비 일반적인 대안을 제거했습니다).

  3. from https://stackoverflow.com/questions/32616324/parsing-millions-of-small-xml-files by cc-by-sa and MIT license