Apache Pig 잠깐 사용기

Hadoop summit에서 발표된 pig 관련 자료를 보고 잠깐 테스트 겸해서 돌려 보았습니다.
발표자료에 있는 script는 다음과 같습니다.

Visits= load ‘/data/visits’as (user, url, time);
Visits= foreach Visits generate user, Canonicalize(url), time;
Pages= load ‘/data/pages’as (url, pagerank);
VP= join Visits by url, Pages by url;
UserVisits = group VP by user;
UserPageranks = foreach UserVisits generate user, AVG(VP.pagerank) as avgpr;
GoodUsers = filter UserPageranks by avgpr > ‘0.5’;
store GoodUsers into '/data/good_users';

두번째 라인에 있는 Canonicalize()는 사용자 정의 eval func 이라서 이 부분은 뺴고 테스트 했습니다.
사용하면서 느낀 내용은 다음과 같습니다.

1. 문서 및 예제가 너무 부족하다.
   사이트나 오픈된 문서에 있는 문법들이 조금씩 틀리고 버그가 있고, 예제도 많지 않아 문법을 익히는데 상당한 어려움이 있었습니다. 특히 schema 지정하는 부분에서 cogroup과 join이 서로 틀려 무지 헤맸습니다.

2. syntax, semantic 오류에 대한 메세지가 부족하여 script 버그 찾기가 무지 어렵다.
  javacc 기반의 parser를 사용하고 있기 때문에 예상은 하고 있었지만 그래도 심하네요.

3. join 에서 map 갯수가 로딩되는 파일 수만큼만 생성된다.
  이거는 버그인지 제가 잘못해서인지는 모르겠지만 두개의 디렉토리를 로딩해서 join을 할 경우 한 디렉토리에 파일 하나가 1G이고 다른 디렉토리에 파일이 100MB이면 2개의 map만 생성되어 수행됩니다. 당근 무지 느리죠. 혹시나 하고 디렉토리에 파일을 여러개 넣어 보니까 파일 수만큼 map이 생성되네여...

4. dump
pig의 경우 로컬 모드에서도 돌아가게 되어 있습니다. 굳이 hadoop을 사용하지 않더라도 로컬레 저장된 파일을 분석하는 용도로 활용할 수 있습니다. hadoop 데몬 서버 띄울 필요도 없습니다. 이 경우 shell mode에서 dump 라는 명령어가 있는데 지정된 변수의 값을 콘솔에 출력해줍니다. 근데 이게 70개인가 넘어가니까 아무것도 나오지 않습니다. 제가 스크립트 잘못 만들줄 알고 한참 삽질했죠... store 명령을 이용해서 저장하면 잘 저장되고요...

5. store
dump의 경우 cogroup과 같이 bag 등의 결과도 한눈에 보기 좋게 구성해주는 반면에 store의 경우 하나의 row에 하나의 변수에는 값이 하나만 존재하도록 해야 합니다.

6. 종합
아직 제대로된 문서와 메일링 리스트가 활성화 되지 않다 보니 손에 익숙할 정도 사용하는데 까지 상당한 시행 착오가 필요할 것 같습니다. 그리고 map 갯수라든지 성능에 대한 부분을 반드시 확인한 다음에 사용해야 합니다.
아직 인큐베이팅 수준이라서 완성도 있는 내용이 나온 다음에 사용하는 것이 좋지 않나 생각합니다. 마지막으로 발표자료에 있는 script 그대로 돌리면 안돌아 갑니다. *^^*
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 김형준


Trackback URL : http://www.jaso.co.kr/trackback/258

Leave a comment
« Previous : 1 : ... 131 : 132 : 133 : 134 : 135 : 136 : 137 : 138 : 139 : ... 347 : Next »