본문 바로가기
Big Data

pyflink 시작하기

by 유주원 2023. 11. 22.

회사 시스템을 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이 잘 동작되는지 확인하자!!