2017-02-22 28 views
1

Я пытаюсь запустить кластер с помощью AWS Cli. Я использую следующую команду:AWS EMR с использованием искровых шагов в режиме кластера. Приложение application_ завершено с неудачным состоянием

aws emr create-cluster --name "Config1" --release-label emr-5.0.0 --applications Name=Spark --use-default-role --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 add-steps --cluster-id ID_CLUSTER --region us-west-2 --steps Name=SparkSubmit,Jar="command-runner.jar",Args=[spark-submit,--deploy-mode,cluster,--master,yarn,--executor-memory,1G,--class,Traccia2014,s3://tracceale/params/scalaProgram.jar,s3://tracceale/params/configS3.txt,30,300,2,"s3a://tracceale/Tempi1"],ActionOnFailure=CONTINUE 

Через некоторое время шаг не удался. Это файл LOG:

17/02/22 11:00:07 INFO RMProxy: Connecting to ResourceManager at ip-172-31- 31-190.us-west-2.compute.internal/172.31.31.190:8032 
17/02/22 11:00:08 INFO Client: Requesting a new application from cluster with 2 NodeManagers 
17/02/22 11:00:08 INFO Client: Verifying our application has not requested 
Exception in thread "main" org.apache.spark.SparkException: Application application_1487760984275_0001 finished with failed status 
at org.apache.spark.deploy.yarn.Client.run(Client.scala:1132) 
at org.apache.spark.deploy.yarn.Client$.main(Client.scala:1175) 
at org.apache.spark.deploy.yarn.Client.main(Client.scala) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:729) 
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185) 
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210) 
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124) 
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 
17/02/22 11:01:02 INFO ShutdownHookManager: Shutdown hook called 
17/02/22 11:01:02 INFO ShutdownHookManager: Deleting directory /mnt/tmp/spark-27baeaa9-8b3a-4ae6-97d0-abc1d3762c86 
Command exiting with ret '1' 

локально (на SandBox Hortonworks HDP 2.5) Я бегу:

./spark-submit --class Traccia2014 --master local[*] --executor-memory 2G /usr/hdp/current/spark2-client/ScalaProjects/ScripRapportoBatch2.1/target/scala-2.11/traccia-22-ottobre_2.11-1.0.jar "/home/tracce/configHDFS.txt" 30 300 3 

и все работает отлично. Я уже прочитал что-то, связанное с моей проблемой, но я не могу понять это.

UPDATE

Проверено в Application Master, я получаю эту ошибку:

17/02/22 15:29:54 ERROR ApplicationMaster: User class threw exception: java.io.FileNotFoundException: s3:/tracceale/params/configS3.txt (No such file or directory) 

at java.io.FileInputStream.open0(Native Method) 
at java.io.FileInputStream.open(FileInputStream.java:195) 
at java.io.FileInputStream.<init>(FileInputStream.java:138) 
at scala.io.Source$.fromFile(Source.scala:91) 
at scala.io.Source$.fromFile(Source.scala:76) 
at scala.io.Source$.fromFile(Source.scala:54) 
at Traccia2014$.main(Rapporto.scala:40) 
at Traccia2014.main(Rapporto.scala) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:627) 
17/02/22 15:29:55 INFO ApplicationMaster: Final app status: FAILED, exitCode: 15, (reason: User class threw exception: java.io.FileNotFoundException: s3:/tracceale/params/configS3.txt (No such file or directory)) 

я прохожу путь упомянутый "s3: //tracceale/params/configS3.txt" от S3 до функция 'fromFile' следующим образом:

for(line <- scala.io.Source.fromFile(logFile).getLines()) 

Как я могу ее решить? Заранее спасибо.

ответ

0

Поскольку вы используете режим развертывания кластера, используемые вами журналы не являются полезными вообще. Они просто говорят, что приложение потерпело неудачу, но не стало причиной неудачи. Чтобы понять, почему это не удалось, вам, по крайней мере, нужно посмотреть журналы приложений мастера, так как именно там работает Spark-драйвер в режиме развертывания кластера, и, вероятно, он даст лучший намек на то, почему приложение не удалось.

Поскольку вы настроили свой кластер с помощью -log-uri, вы найдете журналы для мастера приложений под s3: // aws-logs-813591802533-us-west-2/elasticmapreduce/< CLUSTER ID>/container/< YARN Идентификатор приложения>/где идентификатор приложения YARN (на основе журналов, которые вы указали выше) application_1487760984275_0001, а идентификатор контейнера должен быть чем-то вроде container_1487760984275_0001_01_000001. (Первым контейнером для приложения является Application Master.)

+0

огромное спасибо, теперь я понял проблему. Я обновил свой ответ, проверьте это –

0

У вас есть URL-адрес хранилища объектов, доступный из API-интерфейсов файловой системы Hadoop, и трассировка стека из java.io.File, которая может Не читайте его, потому что он не ссылается ни на что на локальном диске.

Используйте SparkContext.hadoopRDD() как операцию, чтобы преобразовать путь в RDD

+0

ОК, я вхожу. Я пробую новую стратегию. Я помещаю файл в главный узел с командой «put». Он загружает файл в/home/hadoop /, но этот файл недоступен из подчиненных устройств, я думаю, infact я получаю ту же ошибку. –

+0

вам не нужно это делать, S3 будет работать как источник, просто используйте функцию hadoopRDD(), чтобы сказать, что это исходит из файловой системы, совместимой с hadoop –