특정 Java 가상 머신을 사용하도록 애플리케이션 구성 - Amazon EMR

특정 Java 가상 머신을 사용하도록 애플리케이션 구성

Amazon EMR 릴리스에는 다양한 기본 Java 가상 머신(JVM) 버전이 있습니다. 이 페이지에서는 다양한 릴리스 및 애플리케이션에 대한 JVM 지원을 설명합니다.

고려 사항

애플리케이션에 지원되는 Java 버전에 대한 자세한 내용은 Amazon EMR 릴리스 안내서의 애플리케이션 페이지를 참조하세요.

  • Amazon EMR은 클러스터에서 하나의 런타임 버전만 실행할 수 있으며, 동일한 클러스터의 다른 런타임 버전에서 다른 노드 또는 애플리케이션 실행을 지원하지 않습니다.

  • Amazon EMR 7.x의 경우 Apache Livy를 제외하고 Java 17을 지원하는 애플리케이션에 대한 기본 JVM(Java Virtual Machine)은 Java 17입니다. 애플리케이션에 지원되는 JDK 버전에 대한 자세한 내용은 Amazon EMR 릴리스 안내서의 해당 릴리스 페이지를 참조하세요.

  • Amazon EMR 7.1.0부터 Flink에서 지원하며 기본적으로 Java 17로 설정됩니다. 다른 버전의 Java 런타임을 사용하려면 flink-conf의 설정을 재정의합니다. Java 8 또는 Java 11을 사용하도록 Flink를 구성하는 방법에 대한 자세한 내용은 Java 11과 함께 실행하도록 Flink 구성을 참조하세요.

  • Amazon EMR 5.x 및 6.x의 경우 기본 JVM(Java Virtual Machine)은 Java 8입니다.

    • Amazon EMR 릴리스 6.12.0 이상의 경우 일부 애플리케이션은 Java 11 및 17도 지원합니다.

    • Amazon EMR 릴리스 6.9.0 이상의 경우 Trino는 Java 17을 기본으로 지원합니다. Trino를 사용하는 Java 17에 대한 자세한 내용은 Trino 블로그에서 Trino updates to Java 17을 참조하세요.

런타임 버전을 선택할 때는 다음과 같은 애플리케이션별 고려 사항에 주의합니다.

애플리케이션별 Java 구성 참고 사항
애플리케이션 Java 구성 참고 사항

Spark

기본이 아닌 Java 버전으로 Spark를 실행하려면 Spark 및 Hadoop을 모두 구성해야 합니다. 예시는 JVM 재정의 섹션을 참조하세요.

  • 기본 인스턴스 프로세스의 Java 런타임을 업데이트하도록 spark-env에서 JAVA_HOME을 구성합니다. 예를 들어, spark-submit, spark-shell, Spark 기록 서버가 이에 해당합니다.

  • Hadoop 구성을 수정하여 Spark 실행기와 YARN ApplicationMaster의 Java 런타임을 업데이트합니다.

Spark RAPIDS

구성된 Spark용 Java 버전으로 RAPIDS를 실행할 수 있습니다.

Iceberg

Iceberg를 사용하는 애플리케이션의 구성된 Java 버전으로 Iceberg를 실행할 수 있습니다.

델타

Delta를 사용하는 애플리케이션의 구성된 Java 버전으로 Delta를 실행할 수 있습니다.

Hudi

Hudi를 사용하는 애플리케이션의 구성된 Java 버전으로 Hudi를 실행할 수 있습니다.

Hadoop

Hadoop용 JVM을 업데이트하려면 hadoop-env를 수정합니다. 예시는 JVM 재정의 섹션을 참조하세요.

Hive

Hive용 Java 버전을 11 또는 17로 설정하려면 Hadoop JVM 설정을 사용하려는 Java 버전으로 구성합니다.

HBase

HBase용 JVM을 업데이트하려면 hbase-env를 수정합니다. 기본적으로 Amazon EMR은 hbase-env에서 설정을 재정의하지 않는 한 Hadoop용 JVM 구성을 기반으로 HBase JVM을 설정합니다. 예시는 JVM 재정의 섹션을 참조하세요.

Flink

Flink용 JVM을 업데이트하려면 flink-conf를 수정합니다. 기본적으로 Amazon EMR은 flink-conf에서 설정을 재정의하지 않는 한 Hadoop용 JVM 구성을 기반으로 Flink JVM을 설정합니다. 자세한 내용은 Java 11과 함께 실행하도록 Flink 구성 단원을 참조하십시오.

Oozie

Java 11 또는 17에서 실행하도록 Oozie를 구성하려면 Oozie 서버, Oozie LauncherAM Launcher AM을 구성하고 클라이언트 측 실행 파일 및 작업 구성을 변경합니다. Java 17에서 실행하도록 EmbeddedOozieServer를 구성할 수도 있습니다. 자세한 내용은 Oozie용 자바 버전 구성 단원을 참조하십시오.

Pig

Pig는 Java 8만 지원합니다. Java 11 또는 17을 Hadoop과 함께 사용하고 동일한 클러스터에서 Pig를 실행할 수 없습니다.

JVM 재정의

Amazon EMR 릴리스의 JVM 설정을 재정의하려면(예: Amazon EMR 릴리스 6.12.0을 사용하는 클러스터에서 Java 17을 사용하는 경우) 해당 JAVA_HOME 설정을 환경 분류(Flink를 제외한 모든 애플리케이션에서 application-env)에 제공합니다. Flink의 경우 환경 분류는 flink-conf입니다. Flink를 사용하여 Java 런타임을 구성하는 단계는 Java 11과 함께 실행하도록 Flink 구성 섹션을 참조하세요.

Apache Spark로 JVM 설정 재정의

Amazon EMR 릴리스 6.12 이상에서 Spark를 사용하는 경우, 클러스터 모드에서 제출용 드라이버를 작성하면 드라이버는 Java 8을 사용하지만 실행기가 Java 11 또는 17을 사용하도록 환경을 설정할 수 있습니다. 또한 5.x 미만의 Amazon EMR 릴리스에서 Spark를 사용하고 클러스터 모드에서 제출용 드라이버를 작성하는 경우 드라이버는 Java 7을 사용합니다. 하지만 실행기에서 Java 8을 사용하도록 환경을 설정할 수 있습니다.

Spark용 JVM을 재정의하려면 Hadoop 및 Spark 분류를 모두 설정하는 것이 좋습니다.

{ "Classification": "hadoop-env", "Configurations": [ { "Classification": "export", "Configurations": [], "Properties": { "JAVA_HOME": "/usr/lib/jvm/java-1.8.0" } } ], "Properties": {} }, { "Classification": "spark-env", "Configurations": [ { "Classification": "export", "Configurations": [], "Properties": { "JAVA_HOME": "/usr/lib/jvm/java-1.8.0" } } ], "Properties": {} }

Apache HBase로 JVM 설정 재정의

Java 11을 사용하도록 HBase를 구성하려면 클러스터를 시작할 때 다음 구성을 설정하면 됩니다.

[ { "Classification": "hbase-env", "Configurations": [ { "Classification": "export", "Configurations": [], "Properties": { "JAVA_HOME": "/usr/lib/jvm/jre-11" } } ], "Properties": {} } ]

Apache Hadoop 및 Hive로 JVM 설정 재정의

다음 예제에서는 Hadoop 및 Hive용 JVM을 버전 17로 설정하는 방법을 보여줍니다.

[ { "Classification": "hadoop-env", "Configurations": [ { "Classification": "export", "Configurations": [], "Properties": { "JAVA_HOME": "/usr/lib/jvm/jre-17" } } ], "Properties": {} } ]

서비스 포트

다음은 YARN 및 HDFS 서비스 포트입니다. 이러한 설정은 하둡 기본값을 반영합니다. 다른 방식으로 문서화되지 않은 한, 기타 애플리케이션 서비스는 기본 포트에서 호스팅됩니다. 자세한 내용은 애플리케이션의 프로젝트 설명서를 참조하십시오.

YARN 및 HDFS에 대한 포트 설정
설정 호스트 이름/포트

fs.default.name

기본값(hdfs://emrDeterminedIP:8020)

dfs.datanode.address

기본값(0.0.0.0:50010)

dfs.datanode.http.address

기본값(0.0.0.0:50075)

dfs.datanode.https.address

기본값(0.0.0.0:50475)

dfs.datanode.ipc.address

기본값(0.0.0.0:50020)

dfs.http.address

기본값(0.0.0.0:50070)

dfs.https.address

기본값(0.0.0.0:50470)

dfs.secondary.http.address

기본값(0.0.0.0:50090)

yarn.nodemanager.address

기본값(${yarn.nodemanager.hostname}:0)

yarn.nodemanager.localizer.address

기본값(${yarn.nodemanager.hostname}:8040)

yarn.nodemanager.webapp.address

기본값(${yarn.nodemanager.hostname}:8042)

yarn.resourcemanager.address

기본값(${yarn.resourcemanager.hostname}:8032)

yarn.resourcemanager.admin.address

기본값(${yarn.resourcemanager.hostname}:8033)

yarn.resourcemanager.resource-tracker.address

기본값(${yarn.resourcemanager.hostname}:8031)

yarn.resourcemanager.scheduler.address

기본값(${yarn.resourcemanager.hostname}:8030)

yarn.resourcemanager.webapp.address

기본값(${yarn.resourcemanager.hostname}:8088)

yarn.web-proxy.address

기본값(no-value)

yarn.resourcemanager.hostname

emrDeterminedIP

참고

emrDeterminedIP는 Amazon EMR 컨트롤 플레인에서 생성된 IP 주소입니다. 최신 버전에서는 yarn.resourcemanager.hostnamefs.default.name 설정을 제외하고 이 규칙이 제거되었습니다.

애플리케이션 사용자

애플리케이션은 프로세스를 고유의 사용자로 실행합니다. 예를 들어, Hive JVM은 사용자 hive로 실행되고 MapReduce JVM은 mapred로 실행됩니다. 다음의 프로세스 상태 예제에서 이 과정을 볼 수 있습니다.

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND hive 6452 0.2 0.7 853684 218520 ? Sl 16:32 0:13 /usr/lib/jvm/java-openjdk/bin/java -Xmx256m -Dhive.log.dir=/var/log/hive -Dhive.log.file=hive-metastore.log -Dhive.log.threshold=INFO -Dhadoop.log.dir=/usr/lib/hadoop hive 6557 0.2 0.6 849508 202396 ? Sl 16:32 0:09 /usr/lib/jvm/java-openjdk/bin/java -Xmx256m -Dhive.log.dir=/var/log/hive -Dhive.log.file=hive-server2.log -Dhive.log.threshold=INFO -Dhadoop.log.dir=/usr/lib/hadoop/l hbase 6716 0.1 1.0 1755516 336600 ? Sl Jun21 2:20 /usr/lib/jvm/java-openjdk/bin/java -Dproc_master -XX:OnOutOfMemoryError=kill -9 %p -Xmx1024m -ea -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -Dhbase.log.dir=/var/ hbase 6871 0.0 0.7 1672196 237648 ? Sl Jun21 0:46 /usr/lib/jvm/java-openjdk/bin/java -Dproc_thrift -XX:OnOutOfMemoryError=kill -9 %p -Xmx1024m -ea -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -Dhbase.log.dir=/var/ hdfs 7491 0.4 1.0 1719476 309820 ? Sl 16:32 0:22 /usr/lib/jvm/java-openjdk/bin/java -Dproc_namenode -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop-hdfs -Dhadoop.log.file=hadoop-hdfs-namenode-ip-10-71-203-213.log -Dhadoo yarn 8524 0.1 0.6 1626164 211300 ? Sl 16:33 0:05 /usr/lib/jvm/java-openjdk/bin/java -Dproc_proxyserver -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop-yarn -Dyarn.log.dir=/var/log/hadoop-yarn -Dhadoop.log.file=yarn-yarn- yarn 8646 1.0 1.2 1876916 385308 ? Sl 16:33 0:46 /usr/lib/jvm/java-openjdk/bin/java -Dproc_resourcemanager -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop-yarn -Dyarn.log.dir=/var/log/hadoop-yarn -Dhadoop.log.file=yarn-y mapred 9265 0.2 0.8 1666628 260484 ? Sl 16:33 0:12 /usr/lib/jvm/java-openjdk/bin/java -Dproc_historyserver -Xmx1000m -Dhadoop.log.dir=/usr/lib/hadoop/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/usr/lib/hadoop