hadoop копирует результат из hdfs в S3 - PullRequest
0 голосов
/ 12 апреля 2019

Я успешно выполнил свою работу в Amazon EMR. Теперь я хочу скопировать результаты из HDFS в S3, но у меня возникла проблема

это код (--steps)

{
    "Name":"AAAAA",
    "Type":"CUSTOM_JAR",
    "Jar":"command-runner.jar",
    "ActionOnFailure":"CONTINUE",
    "Args": [
        "s3-dist-cp",
        "--src", "hdfs:///seqaddid_output",
        "--dest", "s3://wuda-notebook/seqaddid"
    ]  
}

это журналы:

2019-04-12 03: 01: 23,571 ИНФОРМАЦИЯ com.amazon.elasticmapreduce.s3distcp.S3DistCp (main): Запуск с аргументами: -libjars / usr / share / aws / emr / s3-dist-cp / lib / Обще-HttpClient-3.1.jar, / USR / доли / AWS / АЯ / s3-распред-ф / Lib / Обще-каротаж 1.0.4.jar, / USR / доли / AWS / АЯ / s3-распред-ф / Библиотека / гуава-18.0.jar, / USR / доли / AWS / АЯ / s3-расстояние-ф / Библиотека / s3-расстояние-ф-2.10.0.jar, / USR / доли / AWS / ЭЙ / s3-dist- cp / lib / s3-dist-cp.jar --src hdfs: /// seqaddid_output / --dest s3: // wuda-notebook / seqaddid 2019-04-12 03: 01: 24,196 ИНФОРМАЦИЯ com.amazon.elasticmapreduce.s3distcp.S3DistCp (main): S3DistCp args: --src hdfs: /// seqaddid_output / --dest s3: // wuda-notebook / seqaddid 2019-04-12 03: 01: 24,203 ИНФОРМАЦИЯ com.amazon.elasticmapreduce.s3distcp.S3DistCp (main): использование пути вывода 'hdfs: / tmp / 4f93d497-fade-4c78-86b9-59fc3da35b4e / output' 2019-04-12 03: 01: 24,263 ИНФОРМАЦИЯ com.amazon.elasticmapreduce.s3distcp.S3DistCp (main): GET http://169.254.169.254/latest/meta-data/placement/availability-zone результат: us-east-1f 2019-04-12 03: 01: 24 664 FATAL com.amazon.elasticmapreduce.s3distcp.S3DistCp (main): не удалось получить исходную файловую систему java.io.FileNotFoundException: файл не существует: hdfs: / seqaddid_output в org.apache.hadoop.hdfs.DistributedFileSystem $ 27.doCall (DistributedFileSystem.java:1444) в org.apache.hadoop.hdfs.DistributedFileSystem $ 27.doCall (DistributedFileSystem.java:1437) в org.apache.hadoop.fs.FileSystemLinkResolver.resolve (FileSystemLinkResolver.java:81) в org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus (DistributedFileSystem.java:1452) на com.amazon.elasticmapreduce.s3distcp.S3DistCp.run (S3DistCp.java:795) на com.amazon.elasticmapreduce.s3distcp.S3DistCp.run (S3DistCp.java:705) в org.apache.hadoop.util.ToolRunner.run (ToolRunner.java:76) в org.apache.hadoop.util.ToolRunner.run (ToolRunner.java:90) в com.amazon.elasticmapreduce.s3distcp.Main.main (Main.java:22) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:498) в org.apache.hadoop.util.RunJar.run (RunJar.java:234) в org.apache.hadoop.util.RunJar.main (RunJar.java:148)

1 Ответ

0 голосов
/ 12 апреля 2019

Похоже, что ошибка вызвана состоянием гонки, когда CopyFilesReducer использует несколько экземпляров CopyFilesRunable для загрузки файлов из S3.Проблема в том, что он использует один и тот же временный каталог в нескольких потоках, и потоки удаляют временный каталог, когда они сделаны.Следовательно, когда один поток завершает работу перед другим, он удаляет временный каталог, который все еще использует другой поток.

Я сообщил об этой проблеме в AWS, но в то же время вы можете обойти ошибку, принудительно применяя редуктор.использовать один поток, установив переменную s3DistCp.copyfiles.mapper.numWorkers в значение 1 в конфигурации вашей работы.

...