Data/Flink

[Flink] Flink Run

코딩콩 2025. 7. 18. 10:47

Flink Run

flink run은 Flink 애플리케이션을 클러스터에 제출하고 실행하는 통합 스크립트입니다. 모든 클러스터 매니저(Standalone, YARN, Kubernetes)에서 일관된 인터페이스를 제공합니다.

$FLINK_HOME/bin/flink run

기본 문법과 구조

./bin/flink run \
  --target <target-type> \
  --class <main-class> \
  --jobmanager <jobmanager-address> \
  --parallelism <parallelism> \
  --savepoint <savepoint-path> \
  --allowNonRestoredState \
  --detached \
  <application-jar> \
  [application-arguments]

주요 옵션들

필수 옵션

옵션 설명 예시
--target 실행 대상 local, yarn-cluster, kubernetes-cluster
--class 메인 클래스 com.example.flink.UserFeatureJob
<jar-file> 애플리케이션 JAR 파일 target/my-app.jar

클러스터 관련 옵션

옵션 설명 기본값 예시
--jobmanager JobManager 주소 localhost:8081 yarn-cluster
--parallelism 병렬 처리 수준 1 4
--detached 백그라운드 실행 false --detached

복구 관련 옵션

옵션 설명 예시
--savepoint 복구할 세이브포인트 경로 /tmp/savepoints/savepoint-123
--allowNonRestoredState 복구 불가능한 상태 허용 --allowNonRestoredState

리소스 관련 옵션

옵션 설명 예시
--yarncontainer YARN 컨테이너 수 --yarncontainer 4
--yarnjobManagerMemory JobManager 메모리 --yarnjobManagerMemory 1024m
--yarntaskManagerMemory TaskManager 메모리 --yarntaskManagerMemory 2048m

의존성 관리 옵션

옵션 설명 예시
--classpath 추가 클래스패스 --classpath /path/to/deps

실제 사용 예시

1. 로컬 실행

flink run \
  --class com.example.flink.UserFeatureJob \
  target/flink-ecommerce-features-1.0-SNAPSHOT.jar

2. YARN 클러스터 실행

flink run \
  --target yarn-cluster \
  --class com.example.flink.UserFeatureJob \
  --parallelism 4 \
  --detached \
  target/flink-ecommerce-features-1.0-SNAPSHOT.jar

3. 세이브포인트에서 복구

flink run \
  --target yarn-cluster \
  --savepoint hdfs://namenode:port/savepoints/savepoint-123 \
  --allowNonRestoredState \
  --class com.example.flink.UserFeatureJob \
  target/flink-ecommerce-features-1.0-SNAPSHOT.jar

4. Kubernetes 클러스터 실행

flink run \
  --target kubernetes-cluster \
  --class com.example.flink.UserFeatureJob \
  --parallelism 8 \
  --detached \
  target/flink-ecommerce-features-1.0-SNAPSHOT.jar

Flink Run 작동 방식

1. flink run을 통해 Flink 애플리케이션을 실행/제출한다.

2. Target에 따라:

  • Local: 로컬 미니 클러스터에서 실행
  • YARN: YARN 클러스터에 JobManager/TaskManager 할당 요청
  • Kubernetes: K8s 클러스터에 Pod 생성 요청

3. JobManager가 생성되고 JobGraph를 분석한다.

4. JobManager가 TaskManager들에게 작업 할당을 요청한다.

5. TaskManager들이 실제 데이터 처리를 수행한다.

6. 결과가 지정된 Sink로 출력된다.

Spark Submit vs Flink Run 비교

구분 spark submit flink run
기본 명령어 spark-submit flink run
클러스터 지정 --master --target
배포 모드 --deploy-mode --detached
병렬 처리 --executor-cores --parallelism
복구 없음 --savepoint