Apache Zeppelin 내부 통신
Apache Zeppelin은 다양한 언어 인터프리터와 통합하여 데이터 분석 작업을 수행할 수 있는 오픈 소스 노트북 애플리케이션임.
이 과정에서 Zeppelin은 내부적으로 다양한 통신 메커니즘을 사용하여 여러 구성 요소 간에 데이터를 교환함.
Zeppelin의 내부 통신을 이해하기 위해서는 다음의 주요 요소들을 이해해야 함.
인터프리터와 인터프리터 프로세스
Apache Zeppelin의 가장 중요한 기능 중 하나는 다양한 언어(파이썬, 스칼라, SQL 등)를 지원하는 인터프리터임.
각 언어마다 별도의 인터프리터가 존재하며, 이러한 인터프리터는 Zeppelin 인터프리터 프로세스 내에서 실행됨.
이 프로세스는 사용자가 제출한 코드를 해당 언어로 실행하고 결과를 반환하는 역할을 함.
인터프리터 프로세스
Apache Zeppelin은 각 인터프리터를 독립된 프로세스로 실행할 수 있음.
이를 통해 각 인터프리터가 독립적으로 실행되며, 프로세스 간 격리를 통해 안정성과 보안성을 높일 수 있음.
인터프리터 프로세스는 Zeppelin 서버와 네트워크 소켓을 통해 통신함.
Zeppelin 서버와 인터프리터 간 통신
Apache Zeppelin 서버는 사용자가 웹 인터페이스를 통해 실행하는 명령을 수신하고, 이를 적절한 인터프리터에 전달함.
이 과정에서 Zeppelin은 두 가지 주요 통신 방법을 사용함.
RPC(Remote Procedure Call)
Zeppelin 서버와 인터프리터 프로세스 간의 통신은 주로 RPC를 통해 이루어짐.
Zeppelin은 이 과정에서 Thrift와 같은 프로토콜을 사용함.
Thrift 기반 RPC
Thrift는 아파치 재단에서 개발한 RPC 프레임워크로, 인터프리터 간의 효율적인 통신을 위해 사용됨.
Thrift는 서버와 클라이언트 간에 정의된 인터페이스를 통해 메서드를 호출하고 결과를 전달하는 방식으로 동작함.
인터프리터 프로세스는 Thrift 서버로서 동작하고, Zeppelin 서버는 Thrift 클라이언트로 동작하여 명령을 전달함.
WebSocket
Apache Zeppelin의 웹 인터페이스와 Zeppelin 서버 간의 실시간 통신은 WebSocket을 통해 이루어짐.
WebSocket은 양방향 통신이 가능하며, 사용자가 입력한 명령과 실행 결과를 실시간으로 교환하는 데 사용됨.
실시간 피드백
사용자가 Zeppelin 노트북에서 코드를 실행하면, WebSocket을 통해 사용자의 브라우저와 Zeppelin 서버 간에 통신이 이루어 짐.
이 통신을 통해 사용자는 코드 실행 결과를 실시간으로 확인할 수 있음.
Py4J를 통한 JVM과 Python 간 통신
Python 인터프리터는 JVM에서 실행되는 Zeppelin 서버와 Python 프로세스 간의 통신을 위해 Py4J를 사용함.
Py4J
Py4J는 파이썬에서 JVM 객체를 호출하거나 반대로 JVM에서 파이썬 객체를 호출할 수 있도록 해주는 라이브러리임.
Zeppelin은 Py4J를 사용하여 Python 인터프리터와 ZeppelinContext 간의 상호작용을 지원함.
이를 통해 Zeppelin의 Java 기반 구조에서 Python의 데이터 구조와 메서드를 직접 사용할 수 있음.
ZeppelinContext 와의 상호작용
ZeppelinContext는 Zeppelin 내부의 중요한 구성 요소임.
각 언어 인터프리터와 통합되어 사용자에게 데이터 교환, 시각화 및 다양한 헬퍼 기능을 제공함.
ZeppelinContext는 인터프리터 간의 통신을 원활하게 하고, 데이터를 공유할 수 있도록 도움.
ZeppelinContext 역할
사용자가 각 셀에서 실행한 코드는 ZeppelinContext를 통해 다른 셀이나 다른 인터프리터로 전달될 수 있음.
예를 들어, Python 셀에서 생성한 데이터를 Scala 셀에서 재사용할 수 있는 기능을 제공함.
인터프리터 간 통신 및 데이터 공유
Zeppelin은 다양한 언어를 지원함.
각 언어 인터프리터는 독립된 프로세스로 실행되지만, ZeppelinContext를 통해 데이터와 상태를 공유할 수 있음.
이를 통해 사용자는 동일한 노트북에서 여러 언어를 혼합하여 사용할 수 있음.
Interprocess Communication(IPC)
인터프리터 간의 통신은 IPC 메커니즘을 통해 이루어질 수 있음.
Zeppelin은 이를 통해 언어 간 데이터 공유를 지원함.
예를 들어, 파이썬에서 계산된 결과를 R 인터프리터에서 사용할 수 있음.
Apache Zeppelin 내부 통신 정리
Apache Zeppelin의 내부 통신 구조는 복잡하면서도 강력한 기능을 제공함.
Zeppelin 서버는 Thrift 기반의 RPC와 WebSocket을 활용해 인터프리터와의 통신을 관리하며, Py4J를 통해 JVM과 Python 간의 통신을 지원함.
ZeppelinContext는 이러한 통신을 원활하게 하고, 여러 언어 간의 데이터 공유를 가능하게 함.
이러한 통신 메커니즘은 Zeppelin이 다중 언어 지원과 대규모 데이터 분석을 효과적으로 수행할 수 있게 하는 핵심 요소임.
'Data Engineering > Zeppelin' 카테고리의 다른 글
[Zeppelin] 아파치 제플린과 웹소켓 (0) | 2024.08.26 |
---|---|
[Zeppelin] 아파치 제플린의 ZeppelinConfiguration (0) | 2024.08.25 |
[Zeppelin] zeppelin/python/src/main/java/org/apache/zeppelin/python/PythonUtils.java 분석 (0) | 2024.08.21 |
[Zeppelin] zeppelin/python/src/main/java/org/apache/zeppelin/python/PythonZeppelinContext.java 분석 (0) | 2024.08.21 |
[Zeppelin] zsh: command not found: docker-compose (0) | 2024.08.17 |