

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 什么是 Amazon EMR on EKS？
<a name="emr-eks"></a>

Amazon EMR on EKS 为 Amazon EMR 提供了部署选项，可让您在 Amazon Elastic Kubernetes Service（Amazon EKS）上运行开源大数据框架。借助此部署选项，您可以专注于运行分析工作负载，同时 Amazon EMR on EKS 为开源应用程序构建、配置和管理容器。

如果您已经使用 Amazon EMR，您现在可以在同一 Amazon EKS 集群上使用其它类型的应用程序来运行基于 Amazon EMR 的应用程序。此部署选项还提高了资源利用率，并简化了跨多个可用区的基础设施管理。如果您已在 Amazon EKS 上运行大数据框架，您现在可以使用 Amazon EMR 自动调配和管理，并更快地运行 Apache Spark。

Amazon EMR on EKS 可让您的团队更加高效地协作，并以更轻松、经济实惠的方式来处理海量数据：
+ 您可以在公共资源池上运行应用程序，而无需预置基础设施。您可以使用 [Amazon EMR Studio](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio.html) 和软件开发 AWS 工具包，也可以 AWS CLI 开发、提交和诊断在 EKS 集群上运行的分析应用程序。您可以使用自行托管式 Apache Airflow 或 Amazon Managed Workflows for Apache Airflow（MWAA），在 Amazon EMR on EKS 上运行计划任务。
+ 基础设施团队可以集中管理通用计算平台，将 Amazon EMR 工作负载与其它基于容器的应用程序整合起来。您可以使用常用 Amazon EKS 工具简化基础设施管理，并利用共享集群来处理需要不同版本开源框架的工作负载。您还可以通过自动化 Kubernetes 集群管理和操作系统修补来减少运营开销。借助 Amazon EC2 和 AWS Fargate，您可以启用多个计算资源来满足性能、运营或财务要求。

下图展示了 Amazon EMR 的两种不同的部署模型。

![\[Amazon EMR 部署选项\]](http://docs.aws.amazon.com/zh_cn/emr/latest/EMR-on-EKS-DevelopmentGuide/images/emr-on-eks-deployment.png)


**Topics**
+ [Amazon EMR on EKS 架构](emr-eks-overview.md)
+ [了解 Amazon EMR on EKS 概念和术语](emr-eks-concepts.md)
+ [将工作提交到 Amazon EMR on EKS 虚拟集群时会发生什么](emr-eks-how.md)

# Amazon EMR on EKS 架构
<a name="emr-eks-overview"></a>

Amazon EMR on EKS 会松散地将应用程序与它们运行的基础设施结合起来。每个基础设施层都为后续层提供编排。向 Amazon EMR 提交任务时，您的任务定义将包含其所有特定于应用程序的参数。Amazon EMR 使用这些参数指示 Amazon EKS 要部署哪些 Pod 和容器。然后，Amazon EKS 将来自亚马逊的计算资源上线 EC2 ，这些资源是运行任务所 AWS Fargate 必需的。

通过这种松散的服务耦合，您可以同时运行多个安全隔离任务。您还可以使用不同的计算后端对同一任务进行基准测试，或将您的任务分布到多个可用区，以提高可用性。

下图说明了 EKS 上的 Amazon EMR 如何与其他 AWS 服务配合使用。

![\[Amazon EMR on EKS 架构\]](http://docs.aws.amazon.com/zh_cn/emr/latest/EMR-on-EKS-DevelopmentGuide/images/emr-on-eks-architecture.png)


# 了解 Amazon EMR on EKS 概念和术语
<a name="emr-eks-concepts"></a>

Amazon EMR on EKS 为 Amazon EMR 提供了部署选项，可让您在 Amazon Elastic Kubernetes Service（Amazon EKS）上运行开源大数据框架。本主题提供了一些常见术语的背景信息，包括命名空间、虚拟集群和作业运行，这些是提交进行处理的工作单元。

## Kubernetes 命名空间
<a name="emr-eks-concepts-namespace"></a>

Amazon EKS 使用 Kubernetes 命名空间在多位用户和多个应用程序之间划分集群资源。这些命名空间是多租户环境的基础。Kubernetes 命名空间可以使用 Amazon EC2 或 AWS Fargate 作为计算提供商。这种灵活度为您提供了不同的性能和成本选项，供您运行任务。

## 虚拟集群
<a name="emr-eks-concepts-virtual-cluster"></a>

虚拟集群是 Amazon EMR 注册的 Kubernetes 命名空间。Amazon EMR 使用虚拟集群运行任务和主机终端节点。同一个物理集群可以支持多个虚拟集群。但是，每个虚拟集群都映射到 EKS 集群上的命名空间。虚拟集群不会创建任何可增加您账单的活动资源，以及需要在服务之外进行生命周期管理的活动资源。

## 任务运行
<a name="emr-eks-concepts-job-run"></a>

作业运行是你在 EKS 上提交给 Amazon EMR 的一个工作单元，例如 Spark jar、 PySpark 脚本或 sparkSQL 查询。一个任务可以有多个任务运行。提交任务运行时，需要包括以下信息：
+ 任务运行时所在的虚拟集群。
+ 用来标识任务的任务名称。
+ 执行角色：一种范围限定 IAM 角色，可运行任务并允许您指定任务可以访问哪些资源。
+ Amazon EMR 发行版标注，可指定要使用的开源应用程序版本。
+ 提交任务时要使用的构件，例如 spark-submit 参数。

默认情况下，日志将上载到 Spark 历史记录服务器，并可通过 AWS 管理控制台访问。您还可以将事件日志、执行日志和指标推送到 Amazon S3 和 Amazon CloudWatch。

## Amazon EMR 容器
<a name="emr-eks-concepts-containers"></a>

Amazon EMR 容器是[在 Amazon EMR on EKS 的 API 名称](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/Welcome.html)。以下情况使用 `emr-containers` 前缀：
+ 用于 Amazon EMR on EKS 的 CLI 命令中的前缀。例如 `aws emr-containers start-job-run`。
+ 用于 Amazon EMR on EKS 的 IAM policy 操作之前的前缀。例如 `"Action": [ "emr-containers:StartJobRun"]`。有关更多信息，请参阅 [Amazon EMR on EKS 的策略操作](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies-actions)。
+ 在 Amazon EMR on EKS 服务终端节点中使用的前缀。例如 `emr-containers.us-east-1.amazonaws.com`。有关更多信息，请参阅 [Amazon EMR on EKS 服务终端节点](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/service-quotas.html#service-endpoints)。

# 将工作提交到 Amazon EMR on EKS 虚拟集群时会发生什么
<a name="emr-eks-how"></a>

使用 Kubernetes 命名空间在 Amazon EKS 上注册 Amazon EMR，以此创建虚拟集群。然后，Amazon EMR 可以在该命名空间上运行分析工作负载。当您使用 Amazon EMR on EKS 将 Spark 提交提交到虚拟集群时，Amazon EMR on EKS 会请求 Amazon EKS 上的 Kubernetes 计划程序来安排 Pod。

以下步骤和图说明了 Amazon EMR on EKS 工作流：
+ 使用现有的 Amazon EKS 集群，或通过使用 [eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) 命令行实用程序或 Amazon EKS 控制台来创建 Amazon EKS 集群。
+ 通过在 EKS 集群上使用命名空间注册 Amazon EMR 来创建虚拟集群。
+ 使用 AWS CLI 或 SDK 将您的任务提交到虚拟集群。

![\[Amazon EMR on EKS 任务\]](http://docs.aws.amazon.com/zh_cn/emr/latest/EMR-on-EKS-DevelopmentGuide/images/emr-on-eks-jobs.png)


对于您运行的每个任务，Amazon EMR on EKS 会创建包含 Amazon Linux 2 基础镜像、Apache Spark 和相关依赖项的容器。每个任务都在下载容器的 Pod 中运行，并开始运行 Pod。任务终止后，Pod 也会终止。如果容器的镜像之前已部署到节点，则会使用缓存镜像并绕过下载。日志或指标转发服务器等 Sidecar 容器可部署到 Pod 中。任务终止后，您仍可以使用 Amazon EMR 控制台中的 Spark 应用程序 UI 对其进行调试。