在 Amazon EMR 上部署

Amazon Elastic MapReduce (EMR) 是一个用于创建云托管 Hadoop 集群的 Web 服务。

Dask-Yarn 在 Amazon EMR 上可即开即用,按照快速入门中的说明进行操作即可顺利运行。我们建议将安装步骤作为引导操作的一部分。

对于精选安装,我们还提供了一个示例引导操作,用于在集群启动时安装 Dask 和 Jupyter。此脚本包含详细注释,如果您需要更自定义的安装,可以将其用作示例。

在这里,我们将简要介绍在 Amazon EMR 上部署 Dask 时我们发现有用的工作流程

配置 EMR 集群

EMR 文档包含一个示例,展示了如何配置和启动 EMR 集群。我们建议参考他们的文档。以下是一些推荐设置的注意事项

  • 如果您打算使用引导操作,则需要在 创建集群 页面上点击 转到高级选项 链接 - 此功能在 快速选项 下不可用。
  • 在选择要安装的应用时,dask-yarn 只需要 Hadoop 安装,其他所有应用都取决于您的工作流程,是可选的。

虽然此配置可能需要一些时间和思考,但下次您想在 EMR 上启动 Dask 集群时,您可以克隆此集群以重复使用配置。

添加引导操作

为了在新集群上更轻松地进行安装,我们建议将安装脚本化,作为引导操作的一部分。对于精选安装,我们提供了一个可使用的示例引导操作。此脚本执行以下操作

  • 安装 miniconda
  • 安装 daskdistributeddask-yarnpyarrows3fs。可以使用 --conda-packages 标志扩展此软件包列表。
  • 使用 conda-pack 打包环境以分发给工作节点。
  • (可选)安装并启动运行在端口 8888 上的 Jupyter Notebook 服务器。可以使用 --no-jupyter 标志禁用此功能。可以使用 --password 选项设置 notebook 服务器的密码,默认值为 dask-user

如果您需要比这更自定义的安装,您可以考虑提供自己的脚本。示例脚本包含详细注释,希望能为您提供足够的参考。

要使用此脚本,请按照 AWS 关于使用引导操作的文档进行操作。您需要先将脚本上传到项目可访问的 S3 存储桶。

启动 EMR 集群

完成集群配置后,您可以使用 创建集群 按钮启动它。这可能需要一些时间(约 10 分钟),具体取决于您的设置。

连接到 EMR 集群

集群运行后,您会想要连接到它。根据您的 EC2 安全组 设置,您可能可以直接访问集群,或者您可能需要启动 SSH 隧道(默认)。对于这两种情况,您都需要知道主节点的公共 DNS 名称。此地址类似于 ec2-###-##-##-###.compute-1.amazonaws.com,可以通过遵循AWS 文档找到。

直接访问

如果您可以直接访问集群,您应该能够通过 <public-dns-name>:8088 访问 resource-manager WebUI。如果您使用了我们提供的引导操作,Jupyter Notebook 应该可以通过 <public-dns-name>:8888 访问。

使用 SSH 隧道

如果您没有直接访问权限,您需要启动 SSH 隧道来访问 Web UI 或 Jupyter Notebook。有关更多信息,请参阅AWS 文档

如果您使用了我们提供的引导操作,Jupyter Notebook 应该可以通过 <public-dns-name>:8888 访问,可以通过以下方式启动 SSH 隧道来访问它:

$ ssh -i ~/mykeypair.pem -L 8888:<public-dns-name>:8888 hadoop@<public-dns-name>

其中 ~/mykeypair.pem 是您的 .pem 文件,<public-dns-name> 是您主节点的公共 DNS 名称。

创建 Dask 集群

此时您应该能够访问正在运行的 EMR 集群,并且已经安装了 Dask 及其依赖项。要在 EMR 集群内部创建新的 Dask 集群,请创建一个 YarnCluster 的实例。如果您没有使用我们的引导操作,您还需要提供打包环境的路径(有关更多信息,请参阅管理 Python 环境)。

from dask_yarn import YarnCluster
from dask.distributed import Client

# Create a cluster
cluster = YarnCluster()

# Connect to the cluster
client = Client(cluster)

默认情况下,创建集群时不会启动任何 worker。要更改 worker 数量,请使用 YarnCluster.scale() 方法。扩展时,将向 YARN 请求新的 worker。缩减时,将智能选择 worker 并优雅地缩减,释放资源。

# Scale up to 10 workers
cluster.scale(10)

# ...

# Scale back down to 2 workers
cluster.scale(2)

如果您正在 Jupyter Notebook 中交互式工作,您也可以使用提供的图形界面来更改集群大小。

Cluster widget in a Jupyter Notebook

如果您使用了我们的引导操作,dask dashboard 也将可用,并且链接会包含在上面的集群小部件中。

关闭 EMR 集群

您可以在一个 EMR 集群内启动、扩展和停止多个 Dask 集群。当您最终完成工作时,您会想要关闭整个 EMR 集群以节省资源。有关更多信息,请参阅AWS 文档