在spark官网上有详细的在ec2上部署spark的教程。
在并发编程网上也有相关中文教程。
但是在使用情况下还是遇到了不少问题。
特别提醒,这种部署方式是要钱的!!!别问我是怎么知道,看着信用卡我吃土!官方文档没有说明收费问题,我当时也好奇免费套餐配置很低,这么配置后居然工作实例配置那么高,可惜我当时一股脑在解决问题上,没有细究,后来才知道配置过程中要你的身份验证文件就是为了无感申请有偿的服务器!~~~
首先,accessid和密钥对不是一个概念,我就是弄错了,所以一直登录不上。
然后,在运行脚本过程中,一些错误忘记记录了,主要是一个连接spark集群的错误:
Copying SSH key /home/tj/private/aws_spark.pem to master...
ssh: connect to host ec2-***-***-***-***.compute-1.amazonaws.com port 22: Connection refused
Error connecting to host Command 'ssh -t -o StrictHostKeyChecking=no -i /home/tj/private/aws_spark.pem root@ec2-***-***-***-***.compute-1.amazonaws.com 'mkdir -p ~/.ssh'' returned non-zero exit status 255, sleeping 300
ssh: connect to host ec2-***-***-***-***.compute-1.amazonaws.com port 22: Connection refused
Error connecting to host Command 'ssh -t -o StrictHostKeyChecking=no -i /home/tj/private/aws_spark.pem root@ec2-***-***-***-***.compute-1.amazonaws.com 'mkdir -p ~/.ssh'' returned non-zero exit status 255, sleeping 300
ssh: connect to host -***-***-***-***.compute-1.amazonaws.com port 22: Connection refused
Error connecting to host Command 'ssh -t -o StrictHostKeyChecking=no -i /home/tj/private/aws_spark.pem root@ec2-***-***-***-***.compute-1.amazonaws.com 'mkdir -p ~/.ssh'' returned non-zero exit status 255, sleeping 300
ssh: connect to host ec2-54-158-110-92.compute-1.amazonaws.com port 22: Connection refused
Traceback (most recent call last):
File "./spark_ec2.py", line 925, in
main()
File "./spark_ec2.py", line 766, in main
setup_cluster(conn, master_nodes, slave_nodes, zoo_nodes, opts, True)
File "./spark_ec2.py", line 406, in setup_cluster
ssh(master, opts, 'mkdir -p ~/.ssh')
File "./spark_ec2.py", line 712, in ssh
raise e
subprocess.CalledProcessError: Command 'ssh -t -o StrictHostKeyChecking=no -i /home/tj/private/aws_spark.pem root@ec2-***-***-***-***.compute-1.amazonaws.com 'mkdir -p ~/.ssh'' returned non-zero exit status 255
报错很清楚,就是无法连接到对应主机,我单独运行命令也的确不能ssh过去。
尝试多种方式,包括去除密码校验等,后来发现过一段时间就能ssh过去,就怀疑是实例启动后还有很多进程没起来。
然后就修改了对应的代码,主要是修改了部署脚本目录下的spark_ec2.py文件,将启动实例后等待的时间加长,如下两行命令,将原等待命令注释,增加修改。
575 ########################time.sleep(wait_secs)
576 time.sleep(600)
主要修改了wait_for_cluster函数中,将本来等待wait_secs数值改为600,也就是10分钟。
果然就部署成功了。