복붙노트

[HADOOP] hdfs 블록 크기보다 큰 XmlInputFormat 요소 구문 분석

HADOOP

hdfs 블록 크기보다 큰 XmlInputFormat 요소 구문 분석

필자는 Hadoop MapReduce (4 일 정확함)를 처음 사용했으며 클러스터에서 분산 XML 구문 분석을 수행하도록 요청 받았습니다. 인터넷에서 내 (재) 검색을 수행 할 때 Mahout의 XmlInputFormat을 사용하는 것이 매우 쉽지만 내 작업은 시스템이 거대한 (~ 5TB) XML 파일에서 작동하는지 확인하는 것입니다.

내 지식에 따르면, mappers에 전송 된 파일 분할은 hdfs 블록 크기 (또는 작업 블록 크기)보다 클 수 없습니다. [내가 잘못하면 나를 바로 잡으십시오].

내가 직면 한 문제는 XML 요소가 큽니다 (~ 200MB), 일부는 작아서 (~ 1MB)

그래서 내 질문은 : XmlInputFormat에 의해 만들어진 XML 요소 청크 블록 크기보다 큰 경우 어떻게됩니까? 매퍼에 전체 큰 파일 (예 : 200MB)을 보냅니 까? 아니면 3 개의 스플릿 (64 + 64 + 64 + 8)으로 요소를 보냅니 까?

현재 회사의 가상 클러스터에 액세스 할 수 없기 때문에 테스트를 수행하고 찾을 수 없습니다. 친절하게 도와주세요.

해결법

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

    1.그래서 일을 정리하기 위해 :

    그래서 일을 정리하기 위해 :

    Mahout의 XMLInputFormat은 XML 파일을 처리하고 구성된 두 시작 / 끝 태그 사이에서 XML을 추출합니다. 따라서 XML이 다음과 같이 보이면 :

    <main>
      <person>
        <name>Bob</name>
        <dob>1970/01/01</dob>
      </person>
    </main>
    

    시작 태그 / 종료 태그를 으로 구성하면 매퍼는 다음 쌍을 맵 메서드에 전달합니다.

    LongWritable: 10
    Text: "<person>\n    <name>Bob</name>\n    <dob>1970/01/01</dob>\n  </person>"
    

    매퍼에서이 데이터로 수행하는 작업은 귀하에게 달려 있습니다.

    스플릿과 관련하여 XmlInputFormat은 TextInputFormat을 확장하므로 입력 파일이 분할 가능 (즉, 압축되지 않은 압축 파일 또는 스냅 가능한 분할 가능 코덱으로 압축 된 파일) 인 경우 파일은 다음과 같이 하나 이상의 매퍼로 처리됩니다.

    파일이 이러한 블록 또는 분할 된 크기의 청크로 분할되면 XmlInputFormat은 블록 / 분할 경계의 바이트 주소 / 오프셋을 검색 한 다음 구성된 XML 시작 태그를 찾거나 블록의 바이트 주소에 도달 할 때까지 앞으로 스캔합니다 / 경계를 나눕니다. 시작 태그를 찾으면 종료 태그 (또는 파일 끝)를 찾을 때까지 데이터를 소비합니다. 끝 태그를 찾으면 레코드가 매퍼로 전달됩니다. 그렇지 않으면 매퍼가 입력을받지 못합니다. 강조하기 위해지도는 종료 태그를 찾으려고 할 때 블록 / 분할의 끝을지나 스캔 할 수 있지만 시작 태그를 찾은 경우에만이를 수행합니다. 그렇지 않으면 블록 / 분할의 끝에서 스캔이 중지됩니다.

    그래서 (결국) 귀하의 질문에 대답, 당신은 매퍼를 구성하지 않은 경우 (그리고 또한 알려진대로 매퍼를 기본 또는 식별을 사용하고 있습니다) 그렇다면 XML 덩어리의 크기는 중요하지 않습니다 (MB의, GB의 , 결핵!) 그것은 감속기로 전송됩니다.

    나는 이것이 의미가 있기를 바랍니다.

    편집하다

    귀하의 의견에 후속 조치를 취하십시오 :

  2. from https://stackoverflow.com/questions/12639745/parsing-xmlinputformat-element-larger-than-hdfs-block-size by cc-by-sa and MIT license