2013-04-02 3 views
1

돼지의 MultiStorage를 사용하여 입력 파일을 많은 작은 출력 파일로 분할하고 있습니다.Pig MultiStorage 속도 향상 방법

<snip registers and defines> 
a = load '$FILES' using AvroStorage(); 
a_projected = foreach a generate field1, field2; 
a_explode = foreach a_projected generate field1, FLATTEN(TOKENIZE(field2)); 

--splitting based on field2 
store a_explode into '$OUTPUT' using org.apache.pig.piggybank.storage.MultiStorage('$OUTPUT','1'); 

이에서 읽고 S3에 쓰기 : 도움이된다면

는 스크립트가 같이 보입니다. '$ FILES'매개 변수는 파일 크기가 약 2,000MB 인 약 1 만 줄의 단일 폴더입니다.

MultiStorage를 사용할 때 하나의 파일이있는 약 4-5000 개의 개별 폴더 순서로 분할되며 실행하는 데 약 15 분이 걸립니다.

PigStorage를 사용할 때 예상대로 출력 파일이 하나 나옵니다. 실행하는 데 약 20 초가 걸립니다.

MultiStorage에서 예상되는 성능입니까? 그것을 개선하기 위해 할 수있는 일이 있습니까?

답변

0

키 공간이 너무 넓을 수 있습니다.이 경우 MultiStorage는 각 키마다 하나씩 여러 개의 파일을 생성하게됩니다. 너무 많은 파일을 생성하면 (내부적으로 MultiStorage는 각 키에 대해 Writer를 만듭니다) 많은 시간이 필요합니다. 키당 파일을 갖고 싶지 않다면 PigStorage를 사용해야합니다.