-
Apache Tez란?Data 2021. 9. 2. 23:18반응형
주요개념
- 빠르게 확장성있고 효율적인 데이터 플로우 중심 엔진 개발을 목적으로 함.
- 조금 학술적인 개념을 많이 사용하였고 그것이 코드에 반영되어 있음
- DAG: Directed Acyclic Graph로 데이터 프로세싱 워크플로우를 나타냄. 데이터는 edge의 방향으로 흐름.
- Vertex: 프로세싱의 논리적인 흐름을 나타냄. 프로세싱 스텝은 애플리케이션에서 제공된 코드를 통해 데이터를 변경함.
- Logical DAG: 논리적 DAG은 vertices 세트로 구성되며 각 vertex는 특정 컴퓨팅 스텝을 나타냄.
- Task: vertex 내에서 한 단위의 프로세싱을 나타냄. 분산 프로세싱에서 하나의 vertex로 나타내어지는 논리적 work는 물리적으로 여러 기기에서 실행되는 tasks들로 구성됨
- Physical DAG: 물리적 DAG는 논리적 DAG의 vertices를 확장하여 실질적인 task로 대체하며 구성되게 됨
- Edge: 프로듀서와 컨슈머 간의 데이터 이동을 나타냄. 논리적 DAG의 vertices 간의 edge는 데이터 의존성을 나타내고, 물리적 DAG의 vertices 간의 edge는 데이터 전송을 나타냄.
내부구조
- 논리적 DAG는 각 Vertex에 Input, Processor, Output로 이뤄진 task로 구성되며 물리적 DAG를 만듬
- DAG 구성 시에 각 Vertex는 VertexManager와 관계를 맺음
- VertexManager는 DAG 실행 중 vertex 재설정, vertex 병렬화를 담당함
실행최적화
- Container reuse
- YARN에 의해 할당된 컨테이너 안에서 Taks가 실행됨
- Task가 종료되고 나서 App Master는 사용하던 container를 반납하고 다음 task를 위해 새로운 container를 요청하게 되는데, 이러한 리소스 재요청에서 오버헤드가 발생하기에 컨테이너를 다음 task 실행에 재사용하여 최적화 할 수 있음(특정 조건이 맞는다면)
- 이러한 긴 시간의 컨테이너 실행은 Java Optimizer에게 많은 learning time을 제공하는 장점도 존재함
- 다른 dag이 컨테이너를 재사용하는 케이스 (다음에 나올 Session mode가 적용된 상태)
- Session
- 컨테이너 재사용 개념에서 한발 더 나아가 App Master가 session 모드로 실행되며 클라이언트에서 요청받은 DAG들을 하나의 세션에서 실행함
- 여러 DAG들의 task들이 컨테이너를 재사용하고 더 높은 효율화를 이룸
- 실제 task 실행 전에 AM에게 컨테이너를 요청하여 task 전에 pre-warmed 될 수 있으며 이 부분에서 몇몇의 JVM 최적화가 적용되도록 하는 코드 실행이 가능
- Shared objects registry
- task에 의해 발생하는 객체에 대한 인메모리 캐싱을 지원
- 하나의 vertex, DAG 또는 session 레벨의 캐싱 가능
Reference
[1] http://web.eecs.umich.edu/~mosharaf/Readings/Tez.pdf
[2] https://tsktech.medium.com/apache-tez-2fd0d6a1d4e3
반응형'Data' 카테고리의 다른 글
맵리듀스의 제약과 Apache Tez (0) 2021.09.02 맵리듀스 처리 흐름 알아보기 (MapReduce Phases) (0) 2021.09.01 맵리듀스 작업 개선을 위한 추가적인 사항들 (2) 2021.08.28 맵리듀스란? (Hadoop MapReduce) (2) 2021.08.22 CDC(Change Data Capture)란? (0) 2021.07.16 Apache Spark(아파치 스파크) Web UI 관찰하기 (2) 2021.07.01 Apache Spark(아파치 스파크) 학습을 위한 도커 환경 셋업하기 (feat. Zeppelin) (0) 2021.06.20 Databricks(데이터브릭스) Platform 아키텍쳐 및 주요개념 살펴보기 (2) 2021.06.12