首页 文章

spark-ec2无法停止运行集群

提问于
浏览
2

使用命令 spark-ec2 ,我在AWS-EC2上的虚拟私有 Cloud (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

它仍然显示相同的输出,并没有停止任何群集 . 我真的不知道为什么集群没有停止 . 如果有人帮助我解决问题,我将不胜感激 . 谢谢!

1 回答

  • 4

    @DanielDarabos感谢您的评论!我花了几个小时来解决这个问题,刚才发现了这个bug . 实际上,我认为官方Spark代码 spark-ec2.py 有一个用于识别群集名称的错误,因此我无法阻止群集 . 我正在使用 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}) 获取所有满足的实例 . 如果我直接启动没有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")修改了原始代码,并且诸如停止,登录,销毁等所有内容都很完美 . 我还在弄清楚为什么这个修改工作的进一步原因:)

相关问题