LabHub
学习 学习路径 课程

Apache Flink — 스트림을 엔진으로 돌린다 · 실행 계획 읽기 · 测验

퀴즈: 실행 계획·체이닝·두 단계 집계

在 LabHub 中继续学习

6道题. 完成作答后会显示正确答案和解析。

  1. 스트리밍 GROUP BY 의 EXPLAIN 실행 계획에서 `Exchange(distribution=[hash[page]])` 는 무엇을 뜻하는가?

    1. page 값의 해시로 행을 서브태스크에 나눠 보내는 네트워크 섞기 자리
    2. page 열에 해시 인덱스를 만들어 조회를 빠르게 하는 연산자
    3. page 별 결과를 해시 표에 모아 싱크로 한 번에 쓰는 버퍼
    4. page 값이 같은 행을 하나만 남기는 중복 제거 단계
  2. JSON 실행 계획에 연산자가 5개, 전달이 FORWARD·HASH·FORWARD·FORWARD 로 적혀 있다. 체이닝을 켠 채 돌린 잡의 정점 수는?

    1. 1개 — 한 잡은 한 태스크로 돈다
    2. 2개 — HASH 를 경계로 앞뒤가 각각 체인이 된다
    3. 4개 — 전달 하나마다 정점이 하나씩 생긴다
    4. 5개 — 연산자마다 정점이 하나씩 생긴다
  3. `pipeline.operator-chaining.enabled = false` 로 같은 잡을 돌렸다. 달라지는 것은?

    1. 집계 결과가 달라진다 — 체인이 없으면 행 순서가 바뀐다
    2. Exchange 가 더 생겨 모든 연산자 사이가 HASH 로 바뀐다
    3. 연산자마다 정점(태스크)이 생겨 태스크 사이 넘김이 늘어난다
    4. 병렬도가 연산자 수만큼 자동으로 늘어난다
  4. mini-batch 세 설정을 켠 뒤 EXPLAIN 했더니 `GlobalGroupAggregate ← Exchange ← LocalGroupAggregate` 가 나왔다. 이 배치가 한 키에 몰린 자료에 도움이 되는 이유는?

    1. Exchange 가 사라져 네트워크를 전혀 쓰지 않기 때문이다
    2. Global 단계가 키를 여러 서브태스크에 무작위로 흩기 때문이다
    3. Local 단계가 상태 없이 동작해 체크포인트가 가벼워지기 때문이다
    4. 섞기 전에 Local 이 같은 키를 미리 합쳐 Exchange 를 건너는 양이 줄기 때문이다
  5. `table.optimizer.distinct-agg.split.enabled` 를 켜고 `COUNT(DISTINCT user_id)` 를 EXPLAIN 하면 계획에 나타나는 것은?

    1. GroupAggregate 가 PARTIAL·FINAL 두 층이 되고, 아래 층이 MOD(HASH_CODE(user_id), 버킷 수) 를 키에 더해 섞는다
    2. LocalGroupAggregate 와 GlobalGroupAggregate 가 생기고 MiniBatchAssigner 가 붙는다
    3. Deduplicate 노드가 user_id 로 중복을 먼저 지운 뒤 COUNT 가 돈다
    4. Exchange 가 사라지고 원천에서 곧바로 distinct 를 센다
  6. EXPLAIN 의 실행 계획에서 원천 줄이 `TableSourceScan(table=[[…, clicks, filter=[>(amount, 0)], project=[page, amount], …]])` 이다. 읽을 수 있는 것은?

    1. WHERE 가 무시되어 모든 행이 집계에 들어간다
    2. WHERE 조건과 필요한 열 선택이 원천까지 내려갔다
    3. amount 가 0 인 행이 원천에서 오류로 거부된다
    4. 원천이 amount 로 정렬되어 읽힌다