使用命令 spark-ec2
,我在 AWS-EC2 上的虚拟私有(private)云 (vpc) 内创建了一个名为“ruofan-large-cluster”的集群。该集群包含1个主节点和2个从节点,并且运行良好。现在我想停止集群一段时间,然后重新启动它。但是,当我输入 bash 命令时,如下所示:
$ ./spark-ec2 --region=us-east-1 停止 ruofan-large-cluster
它显示了以下输出:
Are you sure you want to stop the cluster ruofan-large-cluster?
DATA ON EPHEMERAL DISKS WILL BE LOST, BUT THE CLUSTER WILL KEEP USING SPACE ON
AMAZON EBS IF IT IS EBS-BACKED!!
All data on spot-instance slaves will be lost.
Stop cluster ruofan-large-cluster (y/N): y
Searching for existing cluster ruofan-large-cluster in region us-east-1...
Stopping master...
Stopping slaves...
而且它根本没有停止集群...我确信包括我的集群名称和集群区域在内的信息都是正确的,并且我还尝试了以下命令来停止集群:
./spark-ec2 -k <key-file-name> -i <key-file> -r us-east-1 --vpc-id=<my-vpc-id> --subnet-id=<my-subnet-id> stop ruofan-large-cluster
它仍然显示相同的输出,并且没有停止任何集群。真不知道集群为什么不停止。如果有人帮助我解决问题,我将不胜感激。谢谢!
最佳答案
@DanielDarabos 感谢您的评论!我花了几个小时研究这个问题,现在才发现这个bug。实际上,我认为 Spark 官方代码 spark-ec2.py
在识别集群名称方面存在错误,因此我无法停止集群。我使用的是 spark-1.4.0
,在大多数情况下,如果我直接在没有 vpc 子网的 AWS 上启动集群,spark-ec2.py
效果很好。但是,如果我在 AWS 上的 vpc 的子网上启动集群,则 spark-ec2.py
无法找到该集群,因此我无法停止
该集群。具体来说,在spark-ec2.py
中,有一小段代码如下:
conn = ec2.connect_to_region(opts.region)
每当我们执行启动、登录、停止或销毁集群等操作时,spark-ec2
都会首先使用上述代码连接到指定区域,然后通过获取所有满足的实例>reservations =conn.get_all_reservations(filter={一些条件})
。如果我直接启动没有 vpc 子网的集群,效果会非常好。如果我的集群位于 vpc 的子网中,则 conn.get_all_reservations()
什么也得不到。刚才我用 `conn = ec2.connect_to_region(opts.region, aws_access_key_id="my_aws_access_key_id", aws_secret_access_key="my_aws_secret_access_key") 修改了原始代码,并且停止、登录、销毁等一切工作都很完美。我仍在弄清楚此修改有效的进一步原因:)
关于amazon-web-services - Spark-EC2无法停止正在运行的集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31910660/