티스토리 뷰

반응형

High-Availabily 를 이용하기 위해서 다음과 같이 설정을 하고 YARN 에서 클러스터를 구성하면 이상하게 1개 이상의 클러스터를 띄울수 없어서 삽질하게된 후기를 알려주고자 한다.

 

Flink 의 주키퍼를 이용한 HA

쿠퍼네티스는 configMap 을 이용해서 HA 의 정보를 전달하지만, 일반적인 케이스에서는 Zookeeper를 이용해서 HA를 구성한다. 문서에서 보면 다음과 같은 예시가 있고 이렇게 설정이 되어야 마스터 노드 하나가 죽었을때, 대기중인 마스터노드가 active로 바뀌고 기존에 실행했던 정보를 이어서 실행할 수 있다.

high-availability: zookeeper
high-availability.zookeeper.quorum: localhost:2181
high-availability.zookeeper.path.root: /flink
high-availability.cluster-id: /cluster_one # important: customize per cluster
high-availability.storageDir: hdfs:///flink/recovery

위 설정의 의미는 JobManager 의 active/standby 노드가 뭔지 Zookeeper 의 /flink/cluster_one 경로에 저장할것이고, 실행중인 작업의 정보는 "hdfs:///flink/recoverry" 에 저장해서 마스터노드가 바뀌면 이 경로의 파일을 읽어서 재실핼 할수 있도록 하겠다는 의미다.

 

Yarn에서 N대의 클러스터문제 

YARN 에서 N대의 Flink 클러스터를 사용할때, "high-availabillity.cluster-id" 설정이 있으면 문제가 된다.

flink-con.yaml 에 세팅한후, Application Mode 로 application 을 실행시도하면 이상하게 첫번째는 실행에 성공하고, 두번재 프로그램을 실행못하고 계속 대기만 하는 상황에 빠진다.

https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/deployment/resource-providers/yarn/

 

그 이유는 뭘까?

yarn 기반으로 실행할때는 yarn 컨테이너의 id 를 "high-availabillity.cluster-id" 라고 가정된 상태로 구현이 되어있다. 그런데 그 값을 사용자가 지정해버리면 모든 작업은 해당 아이디의 클러스터에만 요청되려고 시도한다.

 

문제는 이름이 모두 동일하니까, 첫번째 실행된게 active 노드로 생각하고, 두번째 실행된건 standby 노드로 판단해서 실행못되고 대기만 하는 상황이 발생하는것이다.

 

그럼 설정을 빼면 끝일까?

YARN 기반에서 세션클러스터를 N대 운영하거나, Application Mode 를 가볍게 테스트할때 flink-conf.yaml 에서 해당 설정을 제거하는게 가장 속편하다. 기동될때 자동으로 yarn 의 applicaiton id 로 클러스터 아이디가 할당되니 중복될 우려도 없다. 그리고, 디폴트로 그렇게 된걸로 가정되어 있기 때문에, sql-client.sh 를 통해 sql로 로직을 만들어 실행할때 기본설정이 잘 연결되서 쿼리돌리는것도 수월하다.

 

문제는 정말 없을까?

사실 클러스터를 구분하는 클러스터 아이디가 죽었다 띄울때 매번 바뀐다는말은 주키퍼의 노드도 기존정보를 보는게 아니라 새로운 노드를 만들기 때문에 죽기전에 돌리던 JOB의 이력정보를 모르는 상황이 된다는것이다.

아마 Session Mode 형태로 여러대의 flink 클러스터를 기동하고 싶다면 기존 실행정보가 유지되는걸 원할 수 도 있을것이다. 하지만 이러면 기본 세팅을 벗어나기 때문에 application job 을 submit 하거나 sql-client.sh 에서 쿼리를 날릴때 어떤 클러스터에서 실행될지 세팅을 해줘야 하는 번거로움은 있다.

 

YARN 에서 N대의 flink 클러스터 기동된 상태에서 클러스터를 지정해서 쿼리를 날리는건 아랫 글을 참고하자.

https://ngela.tistory.com/33

 

[FLINK] yarn 세션 모드 : 클러스터 N대로 sql-client 접속하는 방법

Flink 에서 세션모드로 application 이나 sql-client.sh 를 사용하려고 했는데, 이런 오류가 발생했다. 참고로 N대의 세션 클러스터를 기동하기위해 주키퍼 노드 관련 옵션을 추가해서 기동했다. 다음과

ngela.tistory.com

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함