我有一个CPU密集型数据处理应用程序,我想运行很多(〜100,000)input文件。 应用程序需要一个大的(〜20GB)数据文件才能运行。 我想要做的是
我很难找出确保每个实例都可以访问大型数据文件的最佳方法。 数据文件太大,不适合AMI的根文件系统。 我可以使用块存储,但给定的块存储卷只能连接到一个实例,所以我需要100个克隆。
有什么方法可以创build一个自定义的图像,在根filsystem有更多的空间,以便我可以包含我的大型数据文件? 还是有更好的方法来解决这个问题?
如果数据不变,请将其放在EBS卷中并对其进行快照。 当您启动每个新节点时,请根据快照创build一个新卷并装入它。 制作快照是一个相当缓慢的过程,但基于快照创build卷的速度惊人的快!
如果你的数据有点变化,把它放到S3中是一个更简单的过程来维护,数百个节点可以一次拉动数据而不会明显降低速度(相比于单个节点拉下数据)。 总的来说,这将比上面的EBS方法慢,但实现和维护会更简单。
把你的数据文件在S3中。
创build一个基于EBS的“主”实例:
创build实例的AMI并从AMI启动100个实例。
这样做的好处是每个实例都有自己的本地数据副本,您不会花费金钱在EBS卷上存储多个数据副本。 缺点是在启动时从S3复制数据文件,但一旦复制,处理文件应该是快速的,因为它是本地的。
选项:
使用S3存储区来存储您的input数据。 将其安装在多个工作者实例上。
创build一个“主”实例,与您的工作者实例共享来自EBS卷(例如通过NFS)的input文件。