예전에 구현한 pseudo-MR 이 몇몇 테스트에서 FAIL 을 발생시켜서 내용을 조사. 


기본적으로 기존 jobClose 는 parent operator 의 상태와 관계없이 child 에게 전부 전파하는 방식으로 구현되어 있었는데, 우리는 이걸 partially jobClose 를 할 필요가 있으므로 모든 parent 들이 jobClose 된 상태인 경우에만 전파하게 하였다. 8시간짜리 테스트를 돌려서 결과를 보니 auto_join, bucket_mapjoin 등의 결과가 누락되는 문제 발생. 웃긴건 실제 환경에서는 아무 문제가 없는데 qtest 에서만 문제가 생김.

1. mapper 가 수행되기 전에 기존 root-operator 들을 MapOperator 라는 runtime operator 의 child 로 등록을 하는데, in-memory 상황에서는 이것이 그대로 남다보니 jobClose 가 아예 전파되지 않음.
2. 몇몇 top operator 들은 MapWork 의 aliasToWork mapping 에 존재하지 않음. 이들에 대해서 jobClose 가 전파되지 않음.
3. reducer operator 의 parents 들의 children 은 null 로 setting 되는데, reducer operator 의 parent 는 null setting 되지 않고 남은 상태 이므로 reducer 에 대해 호출된 jobClose 가 전파되지 않음.

벼라별 삽질 끝에, ExecDriver 에서 jobClose 를 호출하기 전에 전체를 싹 다 뒤져서 top-operator 를 추출하고 순서대로 jobClose 를 호출하게 수정. 오늘밤 테스트 예정.

추가

4. MapOperator 에서는 필요한 input 에 해당하는 operator 들만 자신의 child 로 등록을 하는데, 여기에 해당하지 않는 operator 들의 parent 로도 자신을 등록을 하여 jobClose 가 되지 않는다. 

신고
Posted by navis94

카테고리

분류 전체보기 (31)
Apache Hive (29)

최근에 달린 댓글

최근에 받은 트랙백

태그목록

달력

«   2017/11   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

티스토리 툴바