近些天来,一直使用AWS的相关产品,从最开始用EC2,后来到EMR,也遇到一些坑,整理下,作为记录。
最开始的aws配置就不讲了。 不会的话就
aws help
aws ec2 help
aws emr ls help
首先下面这段代码终端里肯定是不能跑的,我只是为了好看,才这样放的。而且不一定要从终端的方式,python
可以用boto3
, 其他编程语言也提供了相应的SDK,可以操作。
1 | $ aws emr create-cluster |
这基本是一份完整的配置,可以从命令行直接启动(去除里面的换行符),现在只是为了有个全局观,然后来分析一下相关的知识。
最简单的我们可以看到,存储使用的是aws s3,那么ok,我们来看下s3的相关操作吧(当然一切的前提都是在你配置好aws configure
之后,输入你的id, key,region之后),配置好之后就可以操作ec2,emr所有的aws相关的产品。
1 |
|
ok,s3创建完毕,我们看看最简单的选项 --applications Name=Ganglia Name=Spark Name=Zeppelin
当然其实很明显了,就是你创建的EMR里面需要包括什么组件,直接写到Name里面就行了(前提是aws有的才行)。
下面接着分析选项;
--service-role EMR_DefaultRole
对应的Role有对应的安全组规则EMR是在运行在EC2实例上的,所以可以看到下面对应的属性,需要设置EC2的相关信息。, 而
KeyName
则是代表了日后你ssh进去的时候后所需的pem文件名,例如我是crawl-beijing,那我就应该用ssh -i ~/crawl-beijing.pem aws-ec2.publicip.com
,当然awscli
里面自带的也有ssh工具,aws emr ssh --cluster-id j-3NJ4N3NZCMMT4 --key-pair-file ./crawl-beijing.pem
,cluster-id是通过aws emr --listculsters
来查看的。
1
2
3
4
5
6
7
8 --ec2-attributes
'{
"KeyName": "crawl-beijing",
"InstanceProfile": "EMR_EC2_DefaultRole",
"SubnetId": "subnet-61528516",
"EmrManagedSlaveSecurityGroup": "sg-ee6e828a",
"EmrManagedMasterSecurityGroup": "sg-ed6e8289"
}'
- –steps 里面是可以设置相应的操作步骤,步骤完成之后,自动终止EMR集群,不过要加
--auto-terminate
选项,这样的话就会在执行完成之后终止集群,并将相应的数据保存到之前设定的S3数据桶中。而在step中的操作,则要涉及到对应程序的使用了,例如我用spark跑一个wordcount,如果是pig程序,那就是类似这样的
1 | --steps Type=PIG,Name="Pig Program",ActionOnFailure=CONTINUE, |
如果我跑的是个python代码或者java代码,又有不同的方式,需要用spark-submit
1 | ./bin/spark-submit \ |
来提交,不过无论是哪种程序,都要顾及到代码本身的选项输入输出,然后写在spark-submit
中,就像之前的这种
1 | { |
--instance-groups
很明显这是为了EMR做EC2初始化类型和数目的限定
1 | [ |
让我们把他变得简单点,起码看着简单点。
我们可以把相应的配置参数放在文件中,然后通过file://
来读取
1 | $ aws emr create-cluster |
Other:
基本上就是这样,详细了解的话。AWS EMR的文档要看。相关还有hadoop和spark相关。
- windows/mac 下有个s3 brower程序可以用
- 应该在本地做好实验,然后再放在aws上跑
- 多使用help命令,然后阅读文档的时候,有pdf格式的,多语言里面选择中文,即可。
- 启动之后是不能直接访问的,需要手动配置对应安全组的出入站协议,不开相应端口(选择相应的协议)的话是不能访问的,当初用EMR的时候就是这样的,惨痛的教训,根本连接不到主节点。