使用命令spark-ec2,我在AWS-EC2上的虚拟私有云(vpc)中创建了一个名为"ruofan-large- cluster“的集群。集群包含一个主节点和两个从节点,运行良好。现在,我想停止集群一段时间,然后重新启动它。但是,当我键入bash命令时,如下所示:
$ ./spark-ec2 --region=us-east-1 stop 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它仍然显示相同的输出,并且没有停止任何集群。我真的不知道集群为什么没有停止。如果有人能帮我解决这个问题,我将不胜感激。谢谢!
发布于 2015-08-11 10:41:43
@DanielDarabos感谢您的评论!我在这个问题上花了几个小时,刚刚发现了bug。实际上,我认为官方的Spark代码spark-ec2.py有一个识别集群名称的bug,所以我不能停止集群。我使用的是spark-1.4.0,在大多数情况下,如果我在没有vpc子网的情况下直接在AWS上启动集群,spark-ec2.py会工作得很好。但是,如果我在AWS上的vpc子网上启动我的集群,则spark-ec2.py无法找到该集群,因此我无法对该集群执行stop操作。具体地说,在spark-ec2.py中有一小段代码,如下所示:
conn = ec2.connect_to_region(opts.region)当我们执行启动、登录、停止或销毁集群等操作时,spark-ec2会先使用上述代码连接到指定的地域,然后通过reservations =conn.get_all_reservations(filter={some conditions})获取所有满意的实例。如果没有私有网络的子网,直接启动我的集群,效果会很好。如果我的集群在私有网络的子网内,则conn.get_all_reservations()什么也得不到。刚才我修改了原始代码` `conn = ec2.connect_to_region(opts.region,aws_access_key_id="my_aws_access_key_id",`conn和停止,登录,销毁等一切都很完美。我仍然在找出这种修改有效的进一步原因:)
https://stackoverflow.com/questions/31910660
复制相似问题