Standalone
Standalone (스탠드얼론)
스탠드얼론 모드는 Flink를 배포하는 가장 기본적인 방식입니다. 배포 개요에 설명된 Flink 서비스들이 운영체제 위에서 단순히 프로세스로 실행됩니다.
출처: 문서
본문
시작하기 (Getting Started)
이 Getting Started 섹션은 Flink 클러스터의 로컬 설정(한 머신에서 별도 프로세스로 실행)을 안내합니다. 이는 reference section에서 설명하는 분산된 standalone 클러스터로 쉽게 확장할 수 있습니다.
소개 (Introduction)
standalone 모드는 Flink를 배포하는 가장 기본적인(barebone) 방식입니다. 배포 개요에서 설명한 Flink 서비스들이 운영체제 위에서 프로세스로 그냥 실행됩니다. Kubernetes나 YARN 같은 리소스 프로바이더로 Flink를 배포하는 것과 달리, 실패한 프로세스의 재시작이나 운영 중 리소스의 할당·해제를 직접 처리해야 합니다.
standalone 모드 리소스 프로바이더의 추가 하위 페이지에서는 standalone 모드를 기반으로 하는 추가 배포 방법을 설명합니다: Docker 컨테이너에서의 배포와 Kubernetes에서의 배포입니다.
사전 준비 (Preparation)
Flink는 모든 UNIX 계열 환경(예: Linux, Mac OS X, 그리고 Windows용 Cygwin)에서 동작합니다. 시스템 설정을 시작하기 전에 다음 요구 사항을 충족하는지 확인하세요.
- Java 1.8.x 이상이 설치되어 있고,
- 다운로드 페이지에서 최신 Flink 배포판을 다운로드하여 압축을 풀었습니다.
Standalone 클러스터 시작하기 (Session Mode)
다음 단계는 Flink standalone 클러스터를 실행하고 예제 job을 제출하는 방법을 보여줍니다:
# we assume to be in the root directory of the unzipped Flink distribution
# (1) Start Cluster
$ ./bin/start-cluster.sh
# (2) You can now access the Flink Web Interface on http://localhost:8081
# (3) Submit example job
$ ./bin/flink run ./examples/streaming/TopSpeedWindowing.jar
# (4) Stop the cluster again
$ ./bin/stop-cluster.sh
단계 (1)에서는 2개의 프로세스를 시작합니다: JobManager용 JVM과 TaskManager용 JVM입니다. JobManager는 localhost:8081에서 접근할 수 있는 웹 인터페이스를 제공합니다. 단계 (3)에서는 JobManager에 애플리케이션을 제출하는 Flink Client(수명이 짧은 JVM 프로세스)를 시작합니다.
배포 모드 (Deployment Modes)
애플리케이션 모드 (Application Mode)
애플리케이션 모드의 높은 수준의 직관에 대해서는 deployment mode 개요를 참고하세요.
내장 애플리케이션이 있는 Flink JobManager를 시작하려면 bin/standalone-job.sh 스크립트를 사용합니다. 단일 TaskManager에서 실행되는 TopSpeedWindowing.jar 예제를 로컬로 시작하여 이 모드를 시연합니다.
애플리케이션 jar 파일은 클래스패스에 있어야 합니다. 이를 달성하는 가장 쉬운 방법은 jar를 lib/ 폴더에 넣는 것입니다:
$ cp ./examples/streaming/TopSpeedWindowing.jar lib/
그런 다음 JobManager를 실행할 수 있습니다:
$ ./bin/standalone-job.sh start --job-classname org.apache.flink.streaming.examples.windowing.TopSpeedWindowing
웹 인터페이스는 이제 localhost:8081에서 사용할 수 있습니다.
또 다른 방법은 --jars 옵션을 통해 아티팩트 가져오기 메커니즘을 사용하는 것입니다:
$ ./bin/standalone-job.sh start -D user.artifacts.base-dir=/tmp/flink-artifacts --jars local:///path/to/TopSpeedWindowing.jar
이 CLI 옵션에 대해 더 읽으려면 여기를 참고하세요.
그러나 아직 실행 중인 TaskManager가 없으므로 애플리케이션은 시작할 수 없습니다:
$ ./bin/taskmanager.sh start
참고: 애플리케이션이 더 많은 리소스가 필요하면 여러 TaskManager를 시작할 수 있습니다.
스크립트를 통한 서비스 중지도 지원됩니다. 여러 인스턴스를 중지하려면 여러 번 호출하거나 stop-all을 사용하세요:
$ ./bin/taskmanager.sh stop
$ ./bin/standalone-job.sh stop
세션 모드 (Session Mode)
세션 모드의 높은 수준의 직관에 대해서는 deployment mode 개요를 참고하세요.
Session Mode의 로컬 배포는 위의 소개에서 이미 설명했습니다.
Standalone 클러스터 참조 (Standalone Cluster Reference)
설정 (Configuration)
사용 가능한 모든 설정 옵션은 configuration page에 나열되어 있으며, 특히 Basic Setup 섹션에 포트, 메모리, 병렬도 등을 구성하는 유용한 조언이 있습니다.
다음 스크립트들은 동적 프로퍼티를 통해 설정 파라미터를 설정할 수도 있습니다:
jobmanager.shstandalone-job.shtaskmanager.shhistoryserver.sh
예:
$ ./bin/jobmanager.sh start -D jobmanager.rpc.address=localhost -D rest.port=8081
동적 프로퍼티로 설정한 옵션은 Flink configuration file의 옵션을 덮어씁니다.
디버깅 (Debugging)
Flink가 예상치 못하게 동작한다면, 추가 조사의 출발점으로 Flink의 로그 파일을 보는 것을 권장합니다.
로그 파일은 logs/ 디렉터리에 있습니다. 이 머신에서 실행되는 각 Flink 서비스에 대한 .log 파일이 있습니다. 기본 설정에서 로그 파일은 Flink 서비스를 시작할 때마다 로테이션됩니다. 서비스의 이전 실행은 로그 파일에 숫자가 접미사로 붙습니다.
또는 Flink 웹 프론트엔드(JobManager와 각 TaskManager 모두)에서 로그를 확인할 수 있습니다.
기본적으로 Flink는 "INFO" 로그 레벨로 로깅하며, 이는 모든 명백한 문제에 대한 기본 정보를 제공합니다. Flink가 잘못 동작하는 것처럼 보이는 경우 로그 레벨을 "DEBUG"로 낮추는 것이 좋습니다. 로깅 레벨은 conf/log4.properties 파일로 제어됩니다. rootLogger.level = DEBUG로 설정하면 Flink가 DEBUG 로그 레벨로 시작됩니다.
Flink의 logging에 대한 전용 페이지가 있습니다.
컴포넌트 관리 스크립트 (Component Management Scripts)
클러스터 시작 및 중지 (Starting and Stopping a cluster)
bin/start-cluster.sh와 bin/stop-cluster.sh는 conf/masters와 conf/workers에 의존하여 클러스터 컴포넌트 인스턴스 수를 결정합니다.
나열된 머신에 대한 암호 없는 SSH 접근이 구성되어 있고 같은 디렉터리 구조를 공유한다면, 스크립트는 인스턴스를 원격으로 시작·중지하는 것도 지원합니다.
예제 1: 로컬에서 2개 TaskManager로 클러스터 시작 (Example 1)
conf/masters 내용:
localhost
conf/workers 내용:
localhost
localhost
예제 2: 분산 클러스터 JobManagers 시작 (Example 2)
네트워크로 서로 도달할 수 있는 4개의 머신(master1, worker1, worker2, worker3)이 있는 클러스터를 가정합니다.
conf/masters 내용:
master1
conf/workers 내용:
worker1
worker2
worker3
이것이 동작하려면 jobmanager.rpc.address 설정 키를 master1로 설정해야 합니다.
Standby JobManager가 있는 세 번째 예제는 high-availability section에서 보여줍니다.
Flink 컴포넌트 시작 및 중지 (Starting and Stopping Flink Components)
bin/jobmanager.sh와 bin/taskmanager.sh 스크립트는 각각 해당 데몬을 백그라운드(start 인자) 또는 포그라운드(start-foreground)로 시작하는 것을 지원합니다. 포그라운드 모드에서는 로그가 표준 출력으로 출력됩니다. 이 모드는 다른 프로세스가 Flink 데몬을 제어하는 배포 시나리오(예: Docker)에 유용합니다.
스크립트는 여러 번 호출할 수 있습니다(예: 여러 TaskManager가 필요한 경우). 인스턴스는 스크립트로 추적되며, 하나씩(stop) 또는 모두 함께(stop-all) 중지할 수 있습니다.
Windows Cygwin 사용자 (Windows Cygwin Users)
git 저장소에서 Flink를 설치하고 Windows git 셸을 사용한다면, Cygwin은 다음과 유사한 오류를 생성할 수 있습니다:
c:/flink/bin/start-cluster.sh: line 30: $'\r': command not found
이 오류는 Windows에서 실행 시 git이 UNIX 줄 끝을 Windows 스타일 줄 끝으로 자동 변환하기 때문에 발생합니다. 문제는 Cygwin이 UNIX 스타일 줄 끝만 처리할 수 있다는 것입니다. 해결책은 다음 세 단계를 따라 올바른 줄 끝을 처리하도록 Cygwin 설정을 조정하는 것입니다:
- Cygwin 셸을 시작합니다.
- 다음을 입력하여 홈 디렉터리를 확인합니다:
cd; pwd
이것은 Cygwin 루트 경로 아래의 경로를 반환합니다.
- NotePad, WordPad 또는 다른 텍스트 편집기를 사용해 홈 디렉터리에서
.bash_profile파일을 열고 다음을 추가합니다(파일이 없으면 생성해야 합니다):
$ export SHELLOPTS
$ set -o igncr
- 파일을 저장하고 새 bash 셸을 엽니다.
고가용성(HA) 설정 (Setting up High-Availability)
standalone 클러스터에 대해 HA를 활성화하려면 ZooKeeper HA services를 사용해야 합니다.
추가로, 여러 JobManager를 시작하도록 클러스터를 구성해야 합니다.
HA 클러스터를 시작하려면 conf/masters의 masters 파일을 구성합니다:
- masters 파일: masters 파일은 JobManager가 시작되는 모든 호스트와 웹 사용자 인터페이스가 바인딩되는 포트를 포함합니다.
master1:webUIPort1
[...]
masterX:webUIPortX
기본적으로 JobManager는 프로세스 간 통신을 위해 무작위 포트를 선택합니다. 이는 high-availability.jobmanager.port 키로 변경할 수 있습니다. 이 키는 단일 포트(예: 50010), 범위(50000-50025) 또는 둘의 조합(50010,50011,50020-50025,50050-50075)을 허용합니다.
예: 2개 JobManager를 가진 Standalone HA 클러스터 (Example)
- Flink configuration file에서 고가용성 모드와 ZooKeeper 쿼럼을 구성합니다:
high-availability.type: 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
conf/masters에서 masters를 구성합니다:
localhost:8081
localhost:8082
conf/zoo.cfg에서 ZooKeeper 서버를 구성합니다(현재 머신당 단일 ZooKeeper 서버만 실행 가능):
server.0=localhost:2888:3888
- ZooKeeper 쿼럼을 시작합니다:
$ ./bin/start-zookeeper-quorum.sh
Starting zookeeper daemon on host localhost.
- HA 클러스터를 시작합니다:
$ ./bin/start-cluster.sh
Starting HA cluster with 2 masters and 1 peers in ZooKeeper quorum.
Starting standalonesession daemon on host localhost.
Starting standalonesession daemon on host localhost.
Starting taskexecutor daemon on host localhost.
- ZooKeeper 쿼럼과 클러스터를 중지합니다:
$ ./bin/stop-cluster.sh
Stopping taskexecutor daemon (pid: 7647) on localhost.
Stopping standalonesession daemon (pid: 7495) on host localhost.
Stopping standalonesession daemon (pid: 7349) on host localhost.
$ ./bin/stop-zookeeper-quorum.sh
Stopping zookeeper daemon (pid: 7101) on host localhost.
사용자 jar와 클래스패스 (User jars & Classpath)
Standalone 모드에서는 다음 jar가 사용자 jar로 인식되어 사용자 클래스패스에 포함됩니다:
- Session Mode: 시작 명령에서 지정한 JAR 파일.
- Application Mode: 시작 명령에서 지정한 JAR 파일과 Flink의
usrlib폴더에 있는 모든 JAR 파일.
자세한 내용은 Debugging Classloading Docs를 참고하세요.