본문 바로가기

오픈소스/pig

PIG - Exceeded max jobconf size 현상 Message: org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.io.IOException: Exceeded max jobconf size: 5591299 limit: 5242880 원인 Pig의 경우 수행 전에 Script가 import 하고 있는 모드 코드를 expanding하게되는데 이 떄에 이를테면 반복되는 코드를 게임서버별로 동일한 테이블을 가져와서 UNION을 하는 경우에 서버가 100개라면 100개의 동일한 스키마를 가져오는 상황이 발생하므로 최종 JobConf 파일 크기가 5메가를 넘어갈 수가 있다 대안 최대허용용량을 늘리는 방법은 적절하지 못하며 LOAD 함수에서는 스키마를 정하지 않고 그대로 읽어와서 최종 UNIO.. 더보기
Pig - COGROUP GROUP BY 기능과 유사하지만, 좀 더 다양하게 사용이 가능하다. 다만, Aggregate 함수를 거친 이후에는 flatten 등과 같은 함수를 통하지 않으면 정상적인 데이터를 얻을 수가 없는데, 특히 COGROUP의 경우 FLATTEN 함수 사용에 주의가 필요하다. 일반적으로 대부분 Tuple에 대한 연산이 이루어지는 반면 FLATTEN 및 IsEmpty는 Relation을 대상으로 한다. 즉, 킷 값을 기준으로 OUTER-JOIN을 하되 서로 값이 없는 값은 서로 존재하는 값을 취하려고 하는 경우다. -- pigs/cogroup.pig a = load 'source/A' using PigStorage(',') as (id:int, addr:chararray); b = load 'source/B' .. 더보기
Pig - ROW_NUMBER (RANK) ROW_NUMBER 혹은 RANK 함수를 통해 임의의 필드들에 의해 정렬된 결과그룹 중에 상위 1개의 결과를 반환SQL Version (Oracle)SELECT uname, flag, rank, score FROM ( SELECT uname, flag, rank, score, ROW_NUMBER() OVER (PARTITION BY uname ORDER BY flag ASC, rank DESC, score ASC) rank FROM A ) B WHERE B.rank=1;Pig Version-- rownum.pig a = load 'source/rownum.csv' using PigStorage(',') as (uname:chararray, flag:int, rank:chararray, score:int).. 더보기
Pig - UPSERT (UPDATE or INSERT) Pig는 맵리듀스 작업을 Pig Latin이라는 언어를 통해서 보다 손쉬운 MapReduce 작업을 가능하게 하는 스크립트 언어이다. 최근 이와 관련된 프로젝트를 수행하고 있어 기존의 SQL 혹은 HQL(Hive QL)으로 작성된 코드를 Pig 스크립트로 변환하는 작업을 하고 있다. 참고가 될 만한 사항들을 정리하고 있습니다.[ UPSERT ]동작 : 대상 테이블에 킷값이 존재하면 UPDATE 그렇지 않으면 INSERT 수행-- upsert.pigA = load 'source/1.csv' using PigStorage(',') as (uid:chararray, name:chararray); B = load 'source/2.csv' using PigStorage(',') as (uid:chararray,.. 더보기