Я изо всех сил пытаюсь найти способ использования S3DistCp в моем кластере AWS EMR.Используйте S3DistCp для копирования файла с S3 в EMR
Некоторые старые примеры, показывающие, как добавить s3distcp в качестве шага EMR, используют команду elastic-mapreduce
, которая больше не используется.
Некоторые другие источники предлагают использовать команду s3-dist-cp
, которая не найдена в текущих кластерах EMR. Даже официальная документация (online и ОЕ руководство разработчика 2016 .pdf) Приведут пример, как это:
aws emr add-steps --cluster-id j-3GYXXXXXX9IOK --steps Type=CUSTOM_JAR,Name="S3DistCp step",Jar=/home/hadoop/lib/emr-s3distcp-1.0.jar,Args=["--s3Endpoint,s3-eu-west-1.amazonaws.com","--src,s3://mybucket/logs/j-3GYXXXXXX9IOJ/node/","--dest,hdfs:///output","--srcPattern,.*[azA-Z,]+"]
Но нет lib
папки в /home/hadoop
пути. Я нашел несколько библиотек хаопов в этой папке: /usr/lib/hadoop/lib
, но я не могу найти s3distcp
откуда угодно.
Затем я обнаружил, что в некоторых ведрах S3 есть некоторые библиотеки. Например, из этого question я нашел этот путь: s3://us-east-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar
. Это казалось шагом в правильном направлении, так как добавление нового шага к работающему кластеру EMR из интерфейса AWS с этими параметрами начало шаг (который он не делал с предыдущими попытками), но не удался после ~ 15 секунд:
JAR location: s3://us-east-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar
Main class: None
Arguments: --s3Endpoint s3-eu-west-1.amazonaws.com --src s3://source-bucket/scripts/ --dest hdfs:///output
Action on failure: Continue
Это привело к следующей ошибке:
Exception in thread "main" java.lang.RuntimeException: Unable to retrieve Hadoop configuration for key fs.s3n.awsAccessKeyId
at com.amazon.external.elasticmapreduce.s3distcp.ConfigurationCredentials.getConfigOrThrow(ConfigurationCredentials.java:29)
at com.amazon.external.elasticmapreduce.s3distcp.ConfigurationCredentials.<init>(ConfigurationCredentials.java:35)
at com.amazon.external.elasticmapreduce.s3distcp.S3DistCp.createInputFileListS3(S3DistCp.java:85)
at com.amazon.external.elasticmapreduce.s3distcp.S3DistCp.createInputFileList(S3DistCp.java:60)
at com.amazon.external.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:529)
at com.amazon.external.elasticmapreduce.s3distcp.S3DistCp.run(S3DistCp.java:216)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
at com.amazon.external.elasticmapreduce.s3distcp.Main.main(Main.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Я думал, что это может быть вызвано несовместимостью моего S3 местоположения (же в качестве конечной точки) и расположение сценария s3distcp, который был от нас -восток. Я заменил его на eu-west-1 и по-прежнему получил ту же ошибку об аутентификации. Я использовал аналогичную настройку для запуска сценариев scala (Custom jar type с скриптом «command-runner.jar» с первым аргументом «spark-submit» для запуска искровой работы, и это работает, у меня не было этой проблемы с аутентификация раньше.
Что самое простой способ для копирования файлов из S3 в кластер ОГО? либо путем добавления дополнительного шага ОГО с AWS SDK (для Go Ланга) или как-то внутри свеча сценария Scala? или . от интерфейса AWS ОГО, но не из CLI, как мне нужна, чтобы быть автоматизирована
Спасибо!Я использовал 'aws s3 cp' раньше, но я не знаю, как я не думал использовать его вместе с' command-runner.jar' :) –