프로그램 패키징과 분산 실행
프로그램 패키징과 분산 실행 (Program Packaging and Distributed Execution)
앞서 설명한 대로 Flink 프로그램은 remote environment 를 사용해 클러스터에서 실행할 수 있습니다. 또는 프로그램을 JAR 파일(Java Archive)로 패키징해 실행할 수도 있습니다. 프로그램을 패키징하는 것은 명령줄 인터페이스 를 통해 실행하기 위한 전제 조건입니다.
출처: 문서
본문
앞서 설명한 대로 Flink 프로그램은 remote environment 를 사용해 클러스터에서 실행할 수 있습니다. 또는 프로그램을 JAR 파일(Java Archive)로 패키징해 실행할 수도 있습니다. 프로그램을 패키징하는 것은 명령줄 인터페이스 를 통해 실행하기 위한 전제 조건입니다.
프로그램 패키징 (Packaging Programs)
패키징된 JAR 파일을 통해 명령줄이나 웹 인터페이스에서 실행을 지원하려면 프로그램이 StreamExecutionEnvironment.getExecutionEnvironment() 로 얻은 환경을 사용해야 합니다. 이 환경은 JAR 가 명령줄 또는 웹 인터페이스에 제출될 때 클러스터의 환경으로 동작합니다. Flink 프로그램이 이러한 인터페이스와 다른 방식으로 호출된다면 환경은 로컬 환경처럼 동작합니다.
프로그램을 패키징하려면 관련된 모든 클래스를 JAR 파일로 내보내면 됩니다. JAR 파일의 매니페스트(manifest) 는 프로그램의 진입점(entry point) 을 포함하는 클래스(public main 메서드가 있는 클래스)를 가리켜야 합니다. 가장 간단한 방법은 main-class 항목을 매니페스트에 넣는 것입니다(예: main-class: org.apache.flinkexample.MyProgram). main-class 속성은 java -jar pathToTheJarFile 명령으로 JAR 파일을 실행할 때 Java Virtual Machine 이 main 메서드를 찾는 데 사용하는 것과 같은 속성입니다. 대부분의 IDE 는 JAR 파일을 내보낼 때 이 속성을 자동으로 포함하는 기능을 제공합니다.
요약 (Summary)
패키징된 프로그램을 호출하는 전체 절차는 두 단계로 구성됩니다:
- JAR 의 매니페스트에서 main-class 또는 program-class 속성을 검색합니다. 두 속성이 모두 있으면 program-class 속성이 main-class 속성보다 우선합니다. 명령줄과 웹 인터페이스 모두 JAR 매니페스트에 어느 속성도 없을 경우 진입점 클래스 이름을 수동으로 전달하는 매개변수를 지원합니다.
- 시스템이 해당 클래스의 main 메서드를 호출합니다.