Apache Hadoop — HDFS 와 YARN 을 한 파드에 세우고 운영한다 · Hadoop Streaming · 퀴즈
퀴즈: 스트리밍의 계약
6문항. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
스트리밍 맵퍼가 탭 문자가 없는 줄 `GET /index.html 200` 을 표준 출력에 썼다. 프레임워크는 이 줄을 어떻게 받는가?
- 첫 공백 앞의 GET 이 키, 나머지가 값이 된다
- 형식이 틀린 줄로 보고 버린 뒤 카운터를 올린다
- 줄 전체가 키가 되고 값은 비어 있는 쌍이 된다
- 태스크가 실패로 처리되어 다시 시도된다
자바 리듀서와 달리 스트리밍 리듀서 스크립트가 반드시 직접 해야 하는 일은?
- 입력 줄을 키로 다시 정렬하는 일
- 앞 줄의 키를 기억해 키가 바뀌는 경계를 찾는 일
- 다른 리듀서와 통신해 같은 키를 넘겨받는 일
- 맵 출력 파일을 HTTP 로 직접 받아 오는 일
접근 로그의 깨진 줄을 세면서도 잡은 끝까지 돌게 하는 방법으로 옳은 것은?
- 깨진 줄을 만나면 stderr 에 reporter:counter:logs,malformed,1 을 쓰고 건너뛴다
- 깨진 줄을 만나면 stdout 에 reporter:counter:logs,malformed,1 을 쓰고 건너뛴다
- 깨진 줄을 만나면 종료 코드 1 로 끝내 프레임워크가 그 줄만 건너뛰게 한다
- 깨진 줄을 만나면 예외를 던지고 재시도 4번 안에 통과되기를 기다린다
키가 `날짜.상태코드` 모양일 때 같은 날짜의 줄을 모두 같은 리듀서로 보내고, 그 안에서는 전체 키로 정렬되게 하려면?
- 리듀서 수를 날짜 수와 똑같이 맞추면 저절로 날짜별로 나뉜다
- 컴바이너를 걸어 날짜별 소계를 맵 쪽에서 미리 만들어 둔다
- stream.map.output.field.separator 만 . 으로 바꾸면 날짜로 나뉜다
- KeyFieldBasedPartitioner 에 -k1,1 을 주고 키 필드 수를 2로 둔다
기본 설정에서 한 맵 태스크의 스크립트가 매번 0 아닌 종료 코드로 끝난다. 잡은 어떻게 되는가?
- 종료 코드는 무시되고 그때까지의 출력으로 태스크가 성공한다
- 그 맵 태스크만 건너뛰고 나머지 맵으로 잡이 성공한다
- 태스크가 실패로 처리되어 재시도되고, 4번 실패하면 잡이 실패한다
- ResourceManager 가 스크립트를 다른 언어로 바꿔 다시 돌린다
스트리밍 명령에서 `-files map.py,reduce.py` 를 `-mapper` 와 `-reducer` 뒤에 두었더니 명령이 실패했다. 이유는?
- -files 는 하나의 파일만 받아 쉼표 목록을 넘기면 실패한다
- -files 같은 일반 옵션은 스트리밍 옵션보다 앞에 와야 하기 때문이다
- -files 로 넘긴 파일은 HDFS 에 먼저 올라가 있어야 하기 때문이다
- -mapper 로 준 파일은 -files 로 넘기면 안 되고 -file 만 써야 한다