我需要在Amazon上作为Map Reduce运行一个自定义C++作业,并打算为此使用Hadoop流。 C++映射器可执行文件依赖于数十个自定义库,其中一些构建耗时。
我希望EMR支持自定义AMI(已经构建了一个)。但是,仔细阅读文档后,似乎只能在预定义的图像上运行EMR:http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-cli-commands.html。
我想念什么吗?如果确实仅支持预定义的AMI,那么使它运行的最佳选择是什么?可执行文件显然在s3上,但是我是否可以将其捆绑在一起,使其完全不依赖共享库?
谢谢。
最佳答案
您是正确的,由于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快照和卷-但这的可行性实际上取决于您的用例。
关于c++ - 通过自定义AMI运行Amazon EMR吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20982439/