在俄亥俄(us-east-2)区域运行spark-ec2-branch-2脚本建集群报错求助
看起来你遇到的核心问题是spark-ec2脚本没能成功建立与AWS俄亥俄区域(us-east-2)的API连接,导致conn对象为None,进而触发了AttributeError。结合你之前在其他区域成功的经验,我整理了几个针对性的排查和解决步骤:
问题回顾
你执行的创建命令:
./spark-ec2 --key-pair=ohio --identity-file=ohio.pem --region=us-east-2 --zone=us-east-2c --vpc-id=vpc-1906ca71 --subnet-id=subnet-26e2ae6b --instance-type=t2.micro -s 1 launch ohio_cluster
报错信息:
Setting up security groups...
Traceback (most recent call last):
File "./spark_ec2.py", line 1573, in
main()
File "./spark_ec2.py", line 1565, in main
real_main()
File "./spark_ec2.py", line 1394, in real_main
(master_nodes, slave_nodes) = launch_cluster(conn, opts, cluster_name)
File "./spark_ec2.py", line 523, in launch_cluster
master_group = get_or_make_group(conn, cluster_name + "-master", opts.vpc_id)
File "./spark_ec2.py", line 371, in get_or_make_group
groups = conn.get_all_security_groups()
AttributeError: 'NoneType' object has no attribute 'get_all_security_groups'
排查与解决步骤
1. 确认脚本是否支持us-east-2区域
俄亥俄区域(us-east-2)是2016年推出的,旧版本的spark-ec2-branch-2可能没把这个区域加入到内置的区域列表里。你可以:
- 升级脚本:切换到Spark 2.x分支的最新维护版本,官方后续更新的脚本已经添加了对us-east-2的支持。
- 手动修改脚本:如果不想升级,打开
spark_ec2.py找到定义AWS区域端点的字典(通常叫AWS_REGION_ENDPOINTS),添加us-east-2的条目:
保存后重新执行创建命令试试。AWS_REGION_ENDPOINTS = { # ... 保留其他已有的区域 'us-east-2': 'ec2.us-east-2.amazonaws.com', }
2. 验证AWS凭证对us-east-2的访问权限
虽然你在其他区域能用,但还是要确认凭证能访问us-east-2:
- 检查
~/.aws/config文件,确保默认区域或配置包含us-east-2:[default] region = us-east-2 - 用AWS CLI测试连接:
如果这个命令能正常返回结果,说明凭证和权限没问题;如果报错,就需要检查IAM角色权限或者凭证的有效性。aws ec2 describe-security-groups --region us-east-2
3. 核对VPC和子网参数的正确性
再仔细确认一遍VPC和子网的配置:
- 子网
subnet-26e2ae6b确实属于VPCvpc-1906ca71,且位于us-east-2c可用区 - 你的AWS账号在这个VPC下有创建安全组的权限
- 子网的网络ACL和关联的安全组允许出站HTTPS请求(脚本需要调用AWS API,依赖这个)
4. 临时 workaround:显式指定EC2端点
如果脚本还是识别不了us-east-2,可以在命令里直接指定区域的EC2端点:
./spark-ec2 --key-pair=ohio --identity-file=ohio.pem --region=us-east-2 --zone=us-east-2c --vpc-id=vpc-1906ca71 --subnet-id=subnet-26e2ae6b --instance-type=t2.micro -s 1 --ec2-endpoint=ec2.us-east-2.amazonaws.com launch ohio_cluster
内容的提问来源于stack exchange,提问作者user3086871

