AWS EMR - 将文件上载到应用程序主文件中

时间:2017-02-23 15:23:11

标签: apache-spark aws-cli amazon-emr

我正在使用aws cli并使用以下命令启动Cluster:

aws emr create-cluster --name "Config1" --release-label emr-5.0.0 --applications Name=Spark --use-default-role --ec2-attributes KeyName=ChiaveEMR --log-uri 's3://aws-logs-813591802533-us-west-2/elasticmapreduce/' --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m1.medium InstanceGroupType=CORE,InstanceCount=2,InstanceType=m1.medium

之后,我将一个文件放入主节点:

 aws emr put --cluster-id j-NSGFSP57255P --key-pair-file "ChiaveEMR.pem" --src "./configS3.txt"

该文件位于/home/hadoop/configS3.txt中。 然后我启动了一步:

aws emr add-steps --cluster-id ID_CLUSTER --region us-west-2 --steps Type=Spark,Name=SparkSubmit,Args=[--deploy-mode,cluster,--master,yarn,--executor-memory,1G,--class,Traccia2014,s3://tracceale/params/traccia-22-ottobre_2.11-1.0Ale.jar,/home/hadoop/configS3.txt,30,300,2,"s3a://tracceale/Tempi1"],ActionOnFailure=CONTINUE

但是我收到了这个错误:

17/02/23 14:49:51 ERROR ApplicationMaster: User class threw exception: java.io.FileNotFoundException: /home/hadoop/configS3.txt (No such file or directory)
java.io.FileNotFoundException: /home/hadoop/configS3.txt (No such file or directory)

可能是因为'configS3.txt'位于主服务器上,而不是位于服务器上。 我怎么能将'configS3.txt'传递给spark-submit脚本?我也尝试过S3,但它不起作用。有解决方案吗提前致谢

2 个答案:

答案 0 :(得分:0)

由于您使用的是“--deploy-mode cluster”,因此驱动程序在CORE / TASK实例而不是MASTER实例上运行,所以是的,这是因为您将文件上传到MASTER实例,但后来又尝试了代码访问该文件未在MASTER实例上运行。

鉴于您遇到的错误是FileNotFoundException,听起来您的应用程序代码试图直接打开它,这意味着您当然不能直接使用S3路径。 (你不能做新文件(“s3:// bucket / key”)之类的东西,因为Java不知道如何处理这个问题。)我的假设可能是错误的,因为你没有包含你的应用程序代码或解释了你的内容正在使用此configS3.txt文件。

答案 1 :(得分:0)

Maurizio:您仍在尝试修复your previous problem

在分布式系统上,您需要在所有计算机上可见的文件(s3:// filestore提供),并使用可处理分布式文件系统数据的API。 sed -n '/<body>/,/<\/body>/p'提供的内容。通过尝试如何将文件放到每个VM的本地磁盘上,您无法到达任何地方,因为这不是您需要解决的问题:它是如何获得的您的代码从共享对象库中读取数据。

抱歉