특정 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 구성 참고 사항 |
---|---|
Spark |
기본이 아닌 Java 버전으로 Spark를 실행하려면 Spark 및 Hadoop을 모두 구성해야 합니다. 예시는 JVM 재정의 섹션을 참조하세요.
|
Spark RAPIDS |
구성된 Spark용 Java 버전으로 RAPIDS를 실행할 수 있습니다. |
Iceberg |
Iceberg를 사용하는 애플리케이션의 구성된 Java 버전으로 Iceberg를 실행할 수 있습니다. |
델타 |
Delta를 사용하는 애플리케이션의 구성된 Java 버전으로 Delta를 실행할 수 있습니다. |
Hudi |
Hudi를 사용하는 애플리케이션의 구성된 Java 버전으로 Hudi를 실행할 수 있습니다. |
Hadoop |
Hadoop용 JVM을 업데이트하려면 |
Hive |
Hive용 Java 버전을 11 또는 17로 설정하려면 Hadoop JVM 설정을 사용하려는 Java 버전으로 구성합니다. |
HBase |
HBase용 JVM을 업데이트하려면 |
Flink |
Flink용 JVM을 업데이트하려면 |
Oozie |
Java 11 또는 17에서 실행하도록 Oozie를 구성하려면 Oozie 서버, Oozie LauncherAM Launcher AM을 구성하고 클라이언트 측 실행 파일 및 작업 구성을 변경합니다. Java 17에서 실행하도록 |
Pig | Pig는 Java 8만 지원합니다. Java 11 또는 17을 Hadoop과 함께 사용하고 동일한 클러스터에서 Pig를 실행할 수 없습니다. |
JVM 재정의
Amazon EMR 릴리스의 JVM 설정을 재정의하려면(예: Amazon EMR 릴리스 6.12.0을 사용하는 클러스터에서 Java 17을 사용하는 경우) 해당 JAVA_HOME
설정을 환경 분류(Flink를 제외한 모든 애플리케이션에서
)에 제공합니다. Flink의 경우 환경 분류는 application
-envflink-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 서비스 포트입니다. 이러한 설정은 하둡 기본값을 반영합니다. 다른 방식으로 문서화되지 않은 한, 기타 애플리케이션 서비스는 기본 포트에서 호스팅됩니다. 자세한 내용은 애플리케이션의 프로젝트 설명서를 참조하십시오.
설정 | 호스트 이름/포트 |
---|---|
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
기본값( |
|
|
참고
emrDeterminedIP
는 Amazon EMR 컨트롤 플레인에서 생성된 IP 주소입니다. 최신 버전에서는 yarn.resourcemanager.hostname
및 fs.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