Big Data

pyflink 시작하기

유주원 2023. 11. 22. 16:23

회사 시스템을 flink로 변경해야 하는 이슈가 있어서 겸사겸사 pyflink를 사용해 보기로 했다.

 

아래는 flink docker file로 안내되어 있는 flink homepage

 

https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/resource-providers/standalone/docker/#using-flink-python-on-docker

 

Docker

Docker Setup # Getting Started # This Getting Started section guides you through the local setup (on one machine, but in separate containers) of a Flink cluster using Docker containers. Introduction # Docker is a popular container runtime. There are offici

nightlies.apache.org

 

FROM flink:1.18.0

# install python3: it has updated Python to 3.9 in Debian 11 and so install Python 3.7 from source
# it currently only supports Python 3.6, 3.7 and 3.8 in PyFlink officially.
RUN apt-get update -y && \
apt-get install -y python3 python3-pip python3-dev && rm -rf /var/lib/apt/lists/*

RUN ln -s /usr/bin/python3 /usr/bin/python
RUN pip3 install apache-flink==1.18.0

 

하지만... 저대로 하면 아래와 같은 에러가 발생한다.

 

 

아래의 에러 메시지가 확 눈에 들어온다.

 

Include folder should be at '/opt/java/openjdk/include' but doesn't exist.

 

docker file 내에 명령어 중 pemja라는 패키지를 설치해야 하는 단계가 있는데, 이 단계에서 /opt/java/openjdk/include 폴더가 없어서 에러가 발생하는 것 같다.

 

그래서 docker file 내의 pip3 install apache-flink==1.18.0 부분을 주석처리하고 이미지 생성 후에 컨테이너로 직접 들어가봤다.

 

해당 위치를 보니 include 폴더 자체가 안보였다.

 

 

flink base image 자체가 openjdk jre만 지원을 하는 듯 했다. 

그래서 해당 위치를 지우고 openjdk-jdk를 다시 설치하도록 docker file을 수정했다. 물론 JAVA_HOME도 다시 설정해줬다.

 

FROM flink:1.18.0

# install python3: it has updated Python to 3.9 in Debian 11 and so install Python 3.7 from source
# it currently only supports Python 3.6, 3.7 and 3.8 in PyFlink officially.
RUN apt-get update -y && \
apt-get install -y python3 python3-pip python3-dev openjdk-11-jdk && rm -rf /var/lib/apt/lists/*

# JAVA_HOME 재설정
RUN rm -rf /opt/java
ENV JAVA_HOME="/usr/lib/jvm/java-11-openjdk-arm64"

RUN ln -s /usr/bin/python3 /usr/bin/python
RUN pip3 install apache-flink==1.18.0

 

docker build가 잘 된다!!! 성공!!!

이제 jobmanager와 taskmanager를 띄워보자.

 

$> docker run -d --name flink-jobmanager -e JOB_MANAGER_RPC_ADDRESS=jobmanager -p 8081:8081 pyflink:1.18 jobmanager
$> docker run -d --name flink-taskmanager --link flink-jobmanager:jobmanager -e JOB_MANAGER_RPC_ADDRESS=jobmanager pyflink:1.18 taskmanager

 

잘 띄웠다면, http://127.0.0.1:8081로 접근해서 flink ui가 제대로 뜨는지 확인하자.

 

 

 python 코드가 잘 동작되는지도 확인해 보자. job manager 컨테이너로 들어가자.

 

$> docker exec -it flink-jobmanager bash

 

컨테이너 내에 들어갔다면 아래와 같이 예제 프로그램을 실행하자.

 

$> flink run --python examples/python/table/word_count.py

 

job이 submit 됐다는 output이 나오면 flink ui에서 해당 job이 잘 동작되는지 확인하자!!