使用自定义AMI运行Amazon EMR

Running Amazon EMR with a custom AMI?

本文关键字:Amazon EMR 运行 AMI 自定义      更新时间:2023-10-16

我需要在亚马逊上运行一个自定义的C++作业作为Map Reduce,并计划使用Hadoop流。C++映射程序可执行文件依赖于数十个自定义库,其中一些库的构建非常耗时。

我期望EMR支持自定义AMI(已经构建了一个)。但是,仔细查看文档后,似乎只能在预定义的图像上运行EMR:http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-cli-commands.html.

我是不是错过了什么?如果确实只支持预定义的AMI,那么让它运行的最佳选项是什么?很明显,可执行文件在s3上,但我真的能把它捆绑起来,让它完全不依赖于共享的lib吗?

谢谢。

您是对的,因为Hadoop集群节点上需要许多软件工具和配置,所以EMR上只允许使用Amazon提供的AMI。http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-ami.html

您可以使用标准的引导技术来安装在集群上运行所需的任何其他软件。看见http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-bootstrap.html以了解有关引导操作的更多信息。

回到您的用例:为什么在您的用例中引导要花这么长时间?因为有很多包裹?因为你是从源代码编译的?

在后一种情况下,构建.deb包并从自定义存储库中安装它们以加快引导过程可能是值得的。

如果只是因为你有很多软件包要安装,恐怕今天还没有明显的解决方案。我可以考虑在引导过程中创建和连接EBS快照和卷,但其可行性实际上取决于您的用例。

Custom AMI确实是一个非常有趣的用例。您的一个选择是使用Qubole,它为自定义构建的AMI提供内置支持,在您的情况下,安装所有必要的库,再加上Qubole的所有酷功能,如对自动缩放、点实例等的支持!

免责声明:我为Qubole。

我也在调查这件事。在第一次查看文档的基础上,实现这一点的最佳选择是通过自定义引导选项。

http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-bootstrap.html

然而,对我们来说,运行自定义脚本需要15-20分钟。我希望有一种方法可以定制AMI并将所需的软件添加到AMI中,而不是在每个节点上安装它。