在 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。
- 安装
dask
、distributed
、dask-yarn
、pyarrow 和 s3fs。可以使用--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 中交互式工作,您也可以使用提供的图形界面来更改集群大小。

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