안녕하세요? UDF 관련 질문입니다.

57 views
Skip to first unread message

topcl...@gmail.com

unread,
Jun 28, 2016, 9:54:32 PM6/28/16
to Apache Tajo 한국 사용자 그룹
안녕하세요? 저는 한 회사에서 개발자로 일하고 있는 김형준이라고 합니다.

Tajo의 편리성과 장점이 많은 공부가 되고 있습니다.

Hadoop과 Tajo를 이용하여 데이터를 집계하는 System을 개발하고 있는데, Python UDF를 사용하던 중 에러를 잡지 못해서 이렇게 질문 드립니다.

제가 작성한 Python UDF는 이런 형태입니다.

def fnc1(a):
    return 1 if (a == 'P') else 0

def fnc2(a):
    return 1 if (a == 'S') else 0

def fnc3(a, b):
    return ((int(a)&0xff00)>>8)>>int(b)&0x1

def fnc4(a, b):
    return (int(a)&0xff)>>int(b)&0x1

def fnc5(a):
    return int(a)*4096/1000000000

생성한 Table의 사용할 Column의 Data Type은 모두 Text 입니다.

예를 들어 select fnc1('P'); 이라고 수행했을 때는 결과값이 1로 정상적으로 리턴되는데,

select fnc1(column1) from table1; 이라고 수행할 경우 ERROR: internal error: null 이라는 에러가 발생합니다.

사용하고 있는 Tajo Version은 0.11.1 인데, 업데이트 로그를 살펴보니 internal error 관련 버그를 잡으셨다는 글을 보았습니다. 혹시 0.11.3 최신 버전으로 재설치를 해야할까요?

만약 해결책이 있다면, 도움을 부탁드리겠습니다.

감사합니다.


Jihoon Son

unread,
Jun 29, 2016, 9:06:22 AM6/29/16
to topcl...@gmail.com, Apache Tajo 한국 사용자 그룹
안녕하세요, 레포팅 감사합니다.
확인해본 결과 현재까지 해결되지 않은 버그입니다. https://issues.apache.org/jira/browse/TAJO-2168 티켓에서 진행 상황을 확인하실 수 있습니다.

이 에러는 입력 질의가 select와 from으로만 구성된 단순한 질의일 경우에만 발생하기 때문에, 별로 좋은 방법은 아니지만 다음처럼 피해가실 수 있습니다.

default> select fnc1(column1) from table1 where 1 = 1;

에러가 해결되면 다시 메일 드리겠습니다.
손지훈 드림

2016년 6월 29일 (수) 오전 10:54, <topcl...@gmail.com>님이 작성:

topcl...@gmail.com

unread,
Jun 29, 2016, 10:39:18 PM6/29/16
to Apache Tajo 한국 사용자 그룹, topcl...@gmail.com
안녕하세요. 먼저 답변 감사드립니다.

우선 제시해주신 방법대로 where 1 = 1 조건을 추가하여 쿼리를 실행시킨 결과, Output이 출력되는 것을 확인할 수 있었습니다.

링크 주신 티켓에서 진행 상황을 계속 확인하도록 하겠습니다.

별개로, UDF 관련 매뉴얼의 output type과 관련하여 python의 예제코드의 내용이 조금 부족한 것이 아쉽습니다.

예제코드에 Decorator 관련한 내용이 있으면 조금 더 유저들에게 쉽게 느껴지지 않을까 싶습니다. Tajo Python 내 tajo_util.py의 아래 코드를 추가하는 것이 어떠할지요?

def output_type(*type_str):
    def wrap(f):
        def wrapped_f(*args):
            return f(*args)
        return wrapped_f
    return wrap

조금이나마 저같은 초보자에게 도움이 될 수 있었으면 하는 마음에 제안 드려 봅니다.

그리고 향후 제가 현재 개발 중인 System이 성공적으로 완료되면, 저희 회사도 Powered By 항목에 추가가 가능할까요?

마지막으로 빠른 대응에 다시 한 번 감사드립니다. :)

김형준 드림


2016년 6월 29일 수요일 오후 10시 6분 22초 UTC+9, Jihoon Son 님의 말:

Jihoon Son

unread,
Jun 30, 2016, 7:09:10 PM6/30/16
to topcl...@gmail.com, Apache Tajo 한국 사용자 그룹
의견 감사합니다.
파이썬 udf 부분은 아직 미흡한 부분이 많이 있습니다. 말씀해주신 output_type decorator에 대한 설명이 부족한 것도 그 중 하나입니다. 미흡한 부분들을 개선하면서 의견 주신 것도 반영할 수 있도록 하겠습니다.

그리고 powered by 추가는 언제든지 환영입니다! 시스템 개발 중에 타조에 관련해서 질문 있으시면 언제든 올려주세요.

감사합니다.
손지훈 드림

topcl...@gmail.com

unread,
Jul 1, 2016, 5:02:35 AM7/1/16
to Apache Tajo 한국 사용자 그룹, topcl...@gmail.com
작은 의견임에도 적극적으로 수용해주셔서 감사합니다.

시스템 개발 및 테스트 과정 중 다른 질문을 하나 드리고자 합니다.

현재 서버 한 대에 Hadoop 2.6.0 Single Node와 HDFS를 사용하는 Tajo Distribute Mode (Not local cluster)를 구축하여 테스트를 진행하고 있습니다.

AVG, SUM, Rank 등으로 이루어진 약 630개의 쿼리를 각각 수행하여 External Table로부터 제가 필요한 데이터를 만들고 있습니다.

쿼리는 정상적으로 수행되지만, 조금 더 시간을 단축시키고 싶어서 이렇게 질문드립니다.

서버 사양은 24 vCores, 1 Physical Disk, 150 GB Memory 입니다.

Documentation에 있는 내용을 바탕으로 이것저것 많은 설정을 건드려보았는데, 쿼리를 수행하는 속도는 크게 차이가 없고 CPU core가 1~2개 정도만 사용되고 있는 것처럼 보였습니다.

단순히 Single Node에서 Test를 하기에 그런 것인지, 아니면 조금 더 Performance를 개선할 수 있는 (모든 자원을 다 사용하여 쿼리를 수행하는?) 방법이 있는지 궁금합니다.

630개의 쿼리가 한번에 수행되면 좋을텐데, 그 내용은 검색 결과 아직 개발 중이신걸로 보았습니다.

그럼 좋은 주말 되시고 답변을 기다리고 있겠습니다. :)


2016년 7월 1일 금요일 오전 8시 9분 10초 UTC+9, Jihoon Son 님의 말:

Jong-young Park

unread,
Jul 1, 2016, 5:25:21 AM7/1/16
to topcl...@gmail.com, Apache Tajo 한국 사용자 그룹
디스크를 더 꽂으셔야만 될 거 같은데요...^^;;

디스크 한 대라면 어차피 I/O에서 병목이 걸리므로 CPU 코어가 많아도 제대로 활용할 수 없을겁니다.

Jinho Kim

unread,
Jul 1, 2016, 7:00:43 AM7/1/16
to Apache Tajo 한국 사용자 그룹, topcl...@gmail.com
안녕하세요.

쿼리 동시실행은 0.11.0 부터 가능 해졌습니다. 그냥 사용하시면 됩니다. 가급적 최신버전을 사용해 주세요
그리고 jvm heap, disk parallel 을 조절하시면 cpu core 수만큼 다 사용됩니다.

export TAJO_WORKER_HEAPSIZE=100000

- Task 당 사용될 메모리입니다. OOM이 난다면 좀더 올려주세요
<property> 
 <name>tajo.task.resource.min.memory-mb</name> 
 <value>5000</value> 
</property> 

- Disk 1개당 동시실행입니다. NVMe 급이면 대역폭 / 100MB정도 좋습니다.
 <property> 
 <name>tajo.worker.resource.disk.parallel-execution.num</name> 
 <value>20</value> 
</property>


https://tajo.apache.org/docs/current/configuration/tajo-site-xml.html
- 메모리가 많으니 broadcast 도 올려주세요
<property>
<name>tajo.dist-query.broadcast.non-cross-join.threshold-kb</name>
<value>50000</value>
</property>

- group by 시 메모리를 더 활용할수 있게 올려주세요
<property>
 <name>tajo.executor.groupby.in-memory-hash-threshold-mb</name> 
 <value>128</value> 
</property>

- hash shuffle 시 Disk I/O 에대한 버퍼 사이즈로 클수록 flush 횟수가 줄어듭니다.

<property>

  <name>tajo.executor.hash-shuffle.buffer-mb</name>

  <value>200</value>

</property>


2016년 7월 1일 금요일 오후 6시 2분 35초 UTC+9, topcl...@gmail.com 님의 말:

Jihoon Son

unread,
Jul 3, 2016, 5:01:42 AM7/3/16
to Jinho Kim, Apache Tajo 한국 사용자 그룹, topcl...@gmail.com
안녕하세요, 레포팅해주신 버그가 수정되어 0.11.4 branch와 master branch에 반영되었습니다.

이 중 0.11.4 nightly build 버전을 https://builds.apache.org/job/Tajo-0.11.4-nightly/lastSuccessfulBuild/artifact/tajo-dist/target/tajo-0.11.4-SNAPSHOT.tar.gz 에서 다운받으실 수 있습니다.

감사합니다.
손지훈 드림

2016년 7월 1일 (금) 오후 8:00, Jinho Kim <jin...@gmail.com>님이 작성:

topcl...@gmail.com

unread,
Jul 3, 2016, 10:39:27 PM7/3/16
to Apache Tajo 한국 사용자 그룹, topcl...@gmail.com
주영님, 안녕하세요.

답변에 감사드립니다. 서버 담당자와 얘기해보고 디스크를 더 꽂는 방법도 생각해봐야 겠습니다.

감사합니다. 좋은 하루 되세요. :)

2016년 7월 1일 금요일 오후 6시 25분 21초 UTC+9, Jong-young Park 님의 말:

topcl...@gmail.com

unread,
Jul 3, 2016, 10:42:15 PM7/3/16
to Apache Tajo 한국 사용자 그룹, jin...@gmail.com, topcl...@gmail.com
진호님, 지훈님 안녕하세요.

주말은 잘 보내셨나요? 먼저 상세한 답변과 버그 수정에 감사드립니다.

진호님께 한 가지 질문이 더 있는데요, 쿼리 동시실행이 가능하다는 뜻에 대해서 조금 혼동이 와서 다시 여쭤봅니다.

지난번에 말씀드렸다시피, 630개의 AVG, SUM, Rank 등으로 이루어진 쿼리이고 select를 한 후 HDFS에 Insert 하는 방식으로 작성했습니다.

Documentation을 참고하여 file을 생성해서 tsql -f SQL.txt를 사용해 보았지만, 순차적으로 쿼리를 수행하는 것처럼 보이는데 이게 말씀하신 부분 동시실행인 것인지,

아니면 630개를 동시에 실행하는 방법이 따로 있는 것인지 궁금합니다. (각각의 Session 개념으로)

기초적인 질문을 매번 드리는 것 같습니다. 시스템 구축 업무에 많은 도움이 되고 있습니다. 항상 감사드립니다. :)

2016년 7월 3일 일요일 오후 6시 1분 42초 UTC+9, Jihoon Son 님의 말:

Jinho Kim

unread,
Jul 12, 2016, 7:04:01 AM7/12/16
to Apache Tajo 한국 사용자 그룹, jin...@gmail.com, topcl...@gmail.com
안녕하세요. 답변이 많이 늦었네요.

cron, zenkins, workflow tool, 또는 TajoClient 로 직접 하실수 있습니다. 성공 실패여부를 기록하신다면 tsql 보다는 적은 노력이 들겠네요.
tsql 로 실행하면 콘솔로 stdio 가 연결되어 1개의 세션으로 처리하게 되어있습니다.  -B 옵션을 주면 background 로 실행되는데요 
테스트 해본결과 cli 가 잘 종료되지 않는 문제를 발견했습니다. 이건 곧 고쳐드리겠습니다.

감사합니다.


2016년 7월 4일 월요일 오전 11시 42분 15초 UTC+9, topcl...@gmail.com 님의 말:

topcl...@gmail.com

unread,
Jul 13, 2016, 7:52:42 PM7/13/16
to Apache Tajo 한국 사용자 그룹, jin...@gmail.com, topcl...@gmail.com
안녕하세요.

답변 감사드립니다. 역시 tsql에서는 1개의 세션으로 처리되는군요.

여러개의 쿼리를 한꺼번에 수행하게 하는 방법을 고민하다 우선 UNION ALL로 한 테이블에 넣는 것으로 해결했습니다.

System 개발 진행 과정 중 Tajo와 관련해서 의문이 들면 다시 공유드리겠습니다.

그럼 좋은 하루 되세요! 

2016년 7월 12일 화요일 오후 8시 4분 1초 UTC+9, Jinho Kim 님의 말:
Reply all
Reply to author
Forward
0 new messages