제플린 실행 프로세스
제플린이 실행될 때 여러 개의 프로세스가 작동하면서 사용자의 데이터 분석을 위해 인터렉션할 수 있는 환경을 설정함.
이 과정에서 가장 중요한 부분은 제플린 서버의 구동과 인터프리터 프로세스의 실행 및 관리임.
1. 제플린 서버 프로세스 시작
아파치 제플린의 실행은 제플린 서버 프로세스부터 시작됨.
이 프로세스는 자바로 작성된 메인 애플리케이션으로, 아파치 제플린의 핵심 기능들을 관리함.
1. 제플린 메인 프로세스 시작
사용자는 bin/zeppelin.sh start 명령어를 통해 제플린 서버를 시작함.
이 명령어는 기본적으로 제플린이 설치된 위치에서 ZeppelinServer 라는 Java 애플리케이션을 시작하게 함.
2. JVM 프로세스 실행
ZeppelinServer는 JVM 위에서 동작함.
이 JVM 프로세스는 제플린 웹 서버 기능과 REST API 서버를 포함하고 있으며, 사용자의 요청을 처리하는 역할을 담당함.
이 단계에서 제플린 서버는 설정 파일 zeppelin-site.xml 을 읽어 설정된 포트에서 REST API 서버와 웹 서버를 시작함.
기본적으로 웹 인터페이스는 localhost:8080 에서 접근할 수 있음.
2. 제플린 웹 서버와 REST API 서버 시작
1. Jetty 기반 웹 서버
제플린은 Jetty를 기반으로 웹 서버를 구동함.
이 웹 서버는 사용자의 브라우저 요청을 처리하고, 인터페이스를 통해 노트북, 설정, 인터프리터 등을 관리할 수 있게 함.
2. REST API 서버
제플린의 웹 서버는 RESTful API를 제공함.
웹 UI에서 사용자 명령을 처리하는 역할을 함.
REST API는 노트북 관리, 인터프리터 설정, 사용자 인증 등을 처리하며, 클라이언트와 서버 간의 데이터를 주고받는 중간 다리 역할을 함.
3. 인터프리터 인스턴스 및 프로세스 시작
아파치 제플린의 큰 특징 중 하나는 다양한 언어와 데이터 엔진을 지원하는 인터프리터를 관리하는 능력임.
사용자가 노트북에서 특정 엔진을 사용할 때 인터프리터가 이 역할을 수행함.
1. 인터프리터 로딩
제플린 서버가 시작되면, 설정된 인터프리터를 로드하고, 인터프리터의 설정을 기반으로 실행 가능한 상태로 준비함.
인터프리터는 제플린 서버와 독립적인 프로세스에서 실행될 수 있도록 설계됨.
2. 인터프리터 프로세스 분리
인터프리터는 다음 두 가지 방식으로 실행됨.
2-1. Embedded Mode
인터프리터가 제플린 서버의 JVM 내에서 직접 실행됨.
이 방식은 빠른 통신이 가능하지만, 인터프리터에 문제가 발생할 경우 제플린 서버 전체에 영향을 줄 수 있음.
2-2. Isolated Mode
인터프리터가 별도의 JVM 프로세스로 실행됨.
인터프리터의 자원 사용량과 오류가 제플린 서버에 영향을 주지 않도록 격리된 환경에서 동작함.
이 모드에서는 인터프리터와 제플린 서버 간의 통신이 네트워크를 통해 이루어짐.
3. 인터프리터 생명주기 관리
제플린 서버는 각 인터프리터의 생명주기를 관리함.
필요 시 인터프리터 프로세스를 시작하거나 종료할 수 있으며, 설정에 따라 인터프리터 프로세스가 유지되거나 자동으로 종료될 수 있음.
4. 사용자 요청 처리 및 작업 실행
1. 사용자 요청 수신
사용자가 Zeppelin UI를 통해 코드를 작성하고 실행을 요청하면, 이 요청은 REST API를 통해 서버로 전달됨.
2. 작업 라우팅 및 인터프리터 호출
제플린 서버는 요청된 코드의 타입(%spark, %python)을 파악한 후 적절한 인터프리터로 해당 작업을 라우팅함.
이 과정에서 인터프리터가 이미 실행 중인지 확인하고, 필요하면 새로운 인터프리터 인스턴스를 생성함.
3. 인터프리터와의 통신
인터프리터가 독립된 프로세스로 실행되는 경우, 제플린 서버는 ZeroMQ와 같은 네트워크 라이브러리를 사용하여 인터프리터와 데이터를 주고받음.
이를 통해 코드 실행 요청을 전달하고, 실행 결과를 받아오는 과정을 거침.
5. 작업 결과 반환 및 시각화 처리
1. 결과 수신 및 캐싱
인터프리터가 작업을 완료하면, 그 결과는 제플린 서버로 반환됨.
이 데이터는 제플린 서버에 의해 캐싱되어 사용자의 다음 요청에 빠르게 응답할 수 있도록 저장됨.
2. 시각화 처리
사용자가 요청한 결과가 그래프나 표와 같은 시각화 결과라면, 제플린은 이를 사용자 인터페이스에 렌더링함.
자바스크립트 기반의 시각화 라이브러리 등을 사용하여 인터랙티브한 결과를 사용자에게 보여줌.
6. 노트북 및 데이터 관리
1. 노트북 데이터 저장
사용자가 제플린에서 작성한 노트북은 기본적으로 로컬 파일 시스템에 JSON 포맷으로 저장됨.
이 파일들은 노트북의 코드, 결과, 시각화 설정 등을 포함하며, 필요 시 HDFS, S3, Git과 같은 외부 저장소로의 저장을 설정할 수 있음.
2. 버전 관리
Git과 연동하여 노트북의 변경 사항을 버전 관리할 수 있음.
이를 통해 사용자는 과거의 변경 사항을 추적하고, 이전 버전으로 쉽게 복원할 수 있음.
7. 자원 관리 및 로그 모니터링
1. 로그 관리
제플린 서버와 각 인터프리터는 실행 과정에서 생성된 로그를 관리함.
이 로그들은 logs 디렉토리에 저장되며, 실행 중 발생한 오류나 성능 문제를 추적하는 데 사용됨.
2. 자원 모니터링
제플린은 JVM 기반이므로, Java 옵션을 통해 메모리 사용량 등을 조절할 수 있음.
특히 인터프리터가 별도의 JVM에서 실행될 경우 각 JVM의 메모리 제한 등을 설정하여 자원을 효율적으로 사용할 수 있음.
8. 제플린 종료 시 프로세스 처리
1. 프로세스 종료
사용자가 bin/zeppelin-daemon.sh stop 명령어를 통해 제플린 서버를 종료하면, 제플린 서버는 현재 실행 중인 모든 인터프리터 프로세스와 연결을 끊고 프로세스를 종료함.
2. 인터프리터 종료
인터프리터가 독립된 JVM에서 실행 중일 경우 제플린 서버는 각 인터프리터 JVM에 종료 신호를 보내고, 모든 인터프리터 프로세스를 종료한 뒤 서버를 완전히 중지함.
3. 리소스 정리
종료 시 제플린은 캐싱된 데이터와 메모리 자원을 해제하고, 시스템 로그를 정리하여 이후의 재시작 시 문제없이 구동될 수 있도록 준비함.
제플린 실행 프로세스 정리
아파치 제플린의 실행 과정은 단순한 웹 애플리케이션 서버의 실행에서 시작돼, 복잡한 인터프리터 관리 및 사용자 요청 처리까지 이어짐.
이 과정에서 핵심은 제플린 서버 프로세스가 다양한 인터프리터와 통신하여 사용자에게 일관된 데이터 분석 환경을 제공하는 것임.
제플린은 이러한 프로세스들을 격리하고 관리함으로써, 안정적이고 확장 가능한 데이터 분석 환경을 유지함.
'Data Engineering > Zeppelin' 카테고리의 다른 글
[Zeppelin] Zeppelin에서 Flink를 사용하는 방법 (1) | 2024.10.17 |
---|---|
[Zeppelin] Apache livy (0) | 2024.10.17 |
[Zeppelin] 분산 시스템 (4) | 2024.10.11 |
[Zeppelin] Helium (1) | 2024.10.02 |
[Zeppelin] 앵귤러와 리액트 (2) | 2024.09.29 |