View a markdown version of this page

為 EMR Serverless 應用程式設定 IPv6 子網路 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

為 EMR Serverless 應用程式設定 IPv6 子網路

使用 Amazon EMR Serverless,您可以在 Amazon Virtual Private Cloud (Amazon VPC) 中透過 IPv6 執行 Apache Spark 和 Apache Hive 任務。如果您提供雙堆疊 (IPv4 和 IPv6) IPv6-only 的子網路,EMR Serverless 會使用這些子網路的定址模式來執行您的任務。然後,您的任務可以到達 VPC 中的 IPv6 端點和外部 IPv6 端點。IPv6-only 的子網路會自動透過 IPv6 執行。對於雙堆疊子網路,您可以使用組態屬性啟用 IPv6,如中所述設定 IPv6 屬性。

了解主要優點

透過 IPv6 執行 EMR Serverless 應用程式可提供下列優點。

  • 較大的地址空間 – IPv6 提供比 IPv4 更大的地址空間,這可協助您避免執行許多工作者VPCs 和子網路中的 IPv4 地址耗盡。

  • 雙堆疊和IPv6-only的聯網 – 在同時使用 IPv4 和 IPv6 的雙堆疊子網路或IPv6-only的子網路上執行任務,以滿足針對 IPv6 呼叫的聯網標準和合規要求。

  • 與 IPv6 端點的連線 – 您的 Spark 和 Hive 任務可以連接 VPC 和外部 IPv6 端點中的 IPv6 端點和服務。

  • 彈性啟用 – IPv6-only 的子網路會自動透過 IPv6 執行。對於雙堆疊子網路,您可以使用單一組態屬性啟用 IPv6,以便控制何時套用 IPv6。

EMR Serverless 如何決定定址模式

EMR Serverless 會從您提供的子網路決定應用程式的定址模式。

  • IPv4-only 子網路 – 應用程式執行IPv4-only 的子網路,與之前完全相同。現有應用程式沒有行為變更。

  • 雙堆疊子網路 – 除非您使用中所述的組態屬性啟用 IPv6,否則應用程式IPv4-only設定 IPv6 屬性。當您啟用 IPv6 時,應用程式可以同時使用 IPv4 和 IPv6。

  • IPv6-only 子網路 – 應用程式執行IPv6-only。這適用於所有發行版本。

當您提供多個子網路時,EMR Serverless 會以集合中每個子網路支援的定址模式執行整個應用程式。如果子網路沒有共用通用模式,EMR Serverless 會拒絕請求。下列案例說明集合可以包含的任何數量和組合的子網路類型。

  • IPv4-only IPv6-only – EMR Serverless 拒絕具有驗證錯誤的集合。

  • IPv6-only 和雙堆疊 – 集合執行IPv6-only,包括集合中的任何雙堆疊子網路。請確定集合中的每個子網路,包括任何雙堆疊子網路,都符合 中的先決條件符合 VPC 和子網路先決條件。

  • IPv4-only 和雙堆疊 – 集合執行IPv4-only,包括集合中的任何雙堆疊子網路。

每次應用程式啟動時,EMR Serverless 都會從目前的子網路和組態評估定址模式。執行中的應用程式會保留其啟動的模式,因此變更在下一次啟動之前不會生效。

如需IPv4-only、雙堆疊和IPv6-only 子網路的定義,請參閱《Amazon Virtual Private Cloud 使用者指南》中的 VPC 的子網路。

符合 VPC 和子網路先決條件

您有責任設定 VPC 和子網路,以便 IPv6 流量可以到達您的資料存放區和任務使用 AWS 的服務。在執行 IPv6 任務之前,在您自己的 VPC 中設定下列項目。

如需step-by-step說明,請使用 Amazon Virtual Private Cloud 使用者指南。

  • 將 IPv6 無類別網域間路由 (CIDR) 區塊與子網路建立關聯。每個雙堆疊或IPv6-only的子網路都必須具有 IPv6 CIDR 區塊。請參閱《Amazon Virtual Private Cloud 使用者指南》中的從您的子網路新增或移除 IPv6 CIDR 區塊,以及 VPC 的 IPv6 支援。 Amazon Virtual Private Cloud

  • 開啟子網路的自動指派 IPv6 地址。子網路必須自動指派 IPv6 地址,您的應用程式才能接收 IPv6 連線。請參閱《Amazon Virtual Private Cloud 使用者指南》中的修改子網路的 IP 定址屬性。

  • 在子網路上啟用 DNS64 (DNS 型 IPv6-to-IPv4 轉譯),並提供傳出 NAT64 (從 IPv6 到 IPv4 的網路位址轉譯) 路徑 (僅限 IPv6)。僅限 IPv6-only 的應用程式需要此操作才能到達IPv4-only的端點 (例如,尚未發佈 IPv6 地址的服務)。在子網路上啟用 DNS64,並透過執行 NAT64 的 NAT 閘道路由合成的64:ff9b::/96流量。雙堆疊應用程式可以透過 IPv4-only IPv4 的端點,不需要這樣做。請參閱《Amazon Virtual Private Cloud 使用者指南》中的 DNS64 和 NAT64 和 NAT 閘道。

  • 為私有傳出 IPv6 流量提供輸出限定網際網路閘道。若要允許私有子網路啟動傳出 IPv6 連線,而不接受來自網際網路的傳入連線,請新增輸出限定網際網路閘道和::/0路由。請參閱《Amazon Virtual Private Cloud 使用者指南》中的使用輸出限定網際網路閘道啟用傳出 IPv6 流量。

  • 在安全群組中允許任務所需的傳出 IPv6 流量。適用現有的 EMR Serverless 安全群組規則。如需一般 VPC 和安全群組設定,請參閱 設定 EMR Serverless 應用程式的 VPC 存取以連線至資料。

為您的應用程式設定 IPv6

您可以在建立應用程式時設定 IPv6,或稍後更新現有的應用程式進行變更。在這兩種情況下,EMR Serverless 都會從 中的子網路衍生定址模式--network-configuration,如中所述EMR Serverless 如何決定定址模式。對於雙堆疊子網路,您也可以使用中所述的 屬性啟用 IPv6設定 IPv6 屬性;對於IPv6-only 的子網路,不需要 屬性。

建立應用程式

下列程序會建立使用雙堆疊子網路並啟用 IPv6 的 Spark 應用程式。開始之前,請確定您計劃使用的每個子網路都符合 中的要求符合 VPC 和子網路先決條件。

下列 AWS CLI 命令會建立具有雙堆疊子網路的 Spark 應用程式,並啟用 IPv6:

aws emr-serverless create-application \ --type SPARK \ --name my-application-name \ --release-label emr-7.14.0 \ --network-configuration '{ "subnetIds": ["subnet-id-1", "subnet-id-2"], "securityGroupIds": ["security-group-id"] }' \ --runtime-configuration '[ { "classification": "spark-defaults", "properties": { "spark.emr-serverless.networking.ipv6.enabled": "true" } } ]' \ --region AWS_REGION

取代以下的值:

  • my-application-name – 您要提供應用程式的名稱。

  • subnet-id-1, subnet-id-2 – 您要使用的雙堆疊子網路 IDs。

  • security-group-id – 您要連接的安全群組 ID。

  • AWS_REGION – 您要建立應用程式的 AWS 區域 。

在雙堆疊子網路上,任務預設使用 IPv4。若要讓 Spark 偏好 IPv6,請設定中所述的引擎偏好屬性設定 IPv6 屬性。對於 Hive 應用程式,請使用 、 --type HIVEhive-site分類和 hive.emr-serverless.networking.ipv6.enabled 屬性。

注意

對於IPv6-only 的子網路,省略 --runtime-configuration。應用程式會自動透過 IPv6 執行,而且您不會設定啟用或引擎偏好設定屬性。

更新現有的應用程式

  1. 如果應用程式正在執行,請停止應用程式。

  2. 在應用程式處於 CREATED或 STOPPED 狀態時更新應用程式。在 中提供您想要的子網路--network-configuration,對於雙堆疊子網路,則包含 中的啟用屬性--runtime-configuration。您未包含的參數會保留其目前值。

    下列 AWS CLI 命令會使用新的子網路和啟用屬性更新應用程式:

    aws emr-serverless update-application \ --application-id application-id \ --network-configuration '{ "subnetIds": ["subnet-id-1", "subnet-id-2"], "securityGroupIds": ["security-group-id"] }' \ --runtime-configuration '[ { "classification": "spark-defaults", "properties": { "spark.emr-serverless.networking.ipv6.enabled": "true" } } ]' \ --region AWS_REGION

    取代以下的值:

    • application-id – 您要更新的應用程式 ID。

    • subnet-id-1, subnet-id-2 – 您要使用的子網路 IDs。

    • security-group-id – 您要連接的安全群組 ID。

    • AWS_REGION – AWS 區域 應用程式的 。

  3. 啟動應用程式。EMR Serverless 會在開始時套用定址模式。

設定 IPv6 屬性

下列屬性會控制應用程式和任務的 IPv6。在 中的應用程式層級設定啟用屬性runtimeConfiguration。在任務層級、sparkSubmitParametersSpark 的 或 Hive --hiveconf的 中設定引擎偏好屬性。

引擎 屬性 您設定的位置 預設 適用對象 備註
Spark spark.emr-serverless.networking.ipv6.enabled spark-defaults (應用程式 runtimeConfiguration) false 雙堆疊 在雙堆疊子網路上啟用 IPv6。
Spark spark.emr-serverless.driverEnv.SPARK_PREFER_IPV6 sparkSubmitParameters (任務) false 雙堆疊 (選用) 讓 Spark 驅動程式偏好 IPv6。在IPv6-only的子網路上自動設定 。請勿在IPv4-only 的子網路上設定 。
Spark spark.executorEnv.SPARK_PREFER_IPV6 sparkSubmitParameters (任務) false 雙堆疊 (選用) 讓 Spark 執行器偏好 IPv6。在IPv6-only的子網路上自動設定 。請勿在IPv4-only 的子網路上設定 。
Hive hive.emr-serverless.networking.ipv6.enabled hive-site (應用程式 runtimeConfiguration) false 雙堆疊 與適用於 Hive 應用程式的 Spark 啟用屬性相同。
Hive JAVA_TOOL_OPTIONS=-Djava.net.preferIPv6Addresses=true --hiveconf (工作) 未設定 雙堆疊 (選用) 讓 Hive 偏好 IPv6。在IPv6-only的子網路上自動設定 。請勿在IPv4-only 的子網路上設定 。

在雙堆疊子網路上,IPv4 和 IPv6 皆可使用,且引擎預設會使用 IPv4。若要讓引擎偏好 IPv6,請為您的引擎設定引擎偏好屬性。在IPv6-only 的子網路上,EMR Serverless 會為您設定 IPv6 偏好設定,因此您不會設定這些屬性。在IPv4-only 的子網路上,請勿設定引擎偏好屬性;沒有可用的 IPv6,因此偏好 IPv6 會導致任務失敗。

下列範例將 Spark 引擎設定為在任務的 中偏好 IPv6sparkSubmitParameters。

--conf spark.emr-serverless.driverEnv.SPARK_PREFER_IPV6=true --conf spark.executorEnv.SPARK_PREFER_IPV6=true
重要

請勿在任何定址模式中強制 JVM 中的 IPv4 堆疊 (例如,在 spark.driver.extraJavaOptions或 -Djava.net.preferIPv4Stack=true中設定 spark.executor.extraJavaOptions)。

如需在runtimeConfiguration應用程式層級宣告的詳細資訊,請參閱 EMR Serverless 的預設應用程式組態。如需傳遞引擎組態的詳細資訊,請參閱在執行 EMR Serverless 任務時使用 Spark 組態,以及在執行 EMR Serverless 任務時使用 Hive 組態。

考量和限制

  • 無法透過 API 設定定址模式。若要變更它,請變更子網路 (或雙堆疊子網路的選擇spark.emr-serverless.networking.ipv6.enabled加入屬性) 並重新啟動應用程式。

  • IPv4-only IPv6-only 的子網路不能混合在一個應用程式中。

  • 當應用程式執行僅限 IPv6 時,您的任務程式碼及其使用的任何 SDKs、驅動程式或端點都必須支援 IPv6。 IPv6-only 透過 EMR Serverless,您可以取得 IPv6 連線;它不會修改您的應用程式碼或第三方端點。

疑難排解

本主題可協助您診斷和解決 EMR Serverless 應用程式的常見 IPv6 網路問題,包括 DNS 解析失敗、缺少自動指派的 IPv6 地址、非預期的 IPv4 使用量和子網路驗證錯誤。以下是您在執行 IPv6 任務時可能看到的症狀,以及每個任務的處理方式。

DNS 解析錯誤 (UnknownHostException)

當子網路缺少 DNS64 或 NAT64 傳出路徑時,這可能會發生在IPv6-only6 的應用程式上,因此任務無法到達所需的端點。啟用 DNS64,並在應用程式的每個子網路上提供 NAT64 的 NAT 閘道,如本主題先前在 下所述符合 VPC 和子網路先決條件。

雙堆疊子網路不會自動指派 IPv6 地址

當子網路具有相關聯的 IPv6 CIDR 區塊,但未自動指派 IPv6 地址時,可能會發生這種情況,因此應用程式不會收到預期的 IPv6 連線。開啟子網路的自動指派 IPv6 地址,如本主題先前所述,然後啟動新任務。此設定僅適用於變更後建立的資源。

在雙堆疊應用程式上透過 IPv4 執行任務

在雙堆疊子網路上,這可能有兩個原因之一。首先,您沒有使用組態屬性啟用 IPv6,因此應用程式執行IPv4-only。其次,您啟用 IPv6,但未將引擎設定為偏好,因此引擎使用 IPv4。在 中確認啟用屬性和引擎偏好設定屬性設定 IPv6 屬性。

UnresolvedAddressException 的任務失敗

當任務在 JVM 中強制 IPv4 堆疊時,可能會發生這種情況。從任務組態中移除 -Djava.net.preferIPv4Stack=true(和任何同等設定),然後重新提交任務。請參閱 設定 IPv6 屬性。

請求失敗,並出現不相容的子網路驗證錯誤

當您提供無法一起執行的子網路時,例如IPv4-only 的子網路與IPv6-only的子網路混合,或當應用程式包含IPv4-only子網路true時spark.emr-serverless.networking.ipv6.enabled,選擇加入屬性設定為 時,就會發生這種情況。針對 檢閱子網路EMR Serverless 如何決定定址模式、調整子網路或選擇加入屬性,然後重試請求。