2014-10-20 2 views
5

Я изо всех сил пытаюсь включить агрегирование журнала YARN для своего кластера EMR Amazon. Я выполняю эту документацию для конфигурации:Агрегация журнала YARN на AWS EMR - UnsupportedFileSystemException

http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-debugging.html#emr-plan-debugging-logs-archive

В разделе под названием: «Для того, чтобы агрегировать журналы в Amazon S3 с помощью AWS CLI».

Я проверил, что самозагрузки действие Hadoop-конфигурация помещает следующее yarn-site.xml

<property><name>yarn.log-aggregation-enable</name><value>true</value></property> 
<property><name>yarn.log-aggregation.retain-seconds</name><value>-1</value></property> 
<property><name>yarn.log-aggregation.retain-check-interval-seconds</name><value>3000</value></property> 
<property><name>yarn.nodemanager.remote-app-log-dir</name><value>s3://mybucket/logs</value></property> 

Я могу запустить задание образца (pi от hadoop-examples.jar) и вижу, что она успешно завершена ГИП ResourceManager в.

Он даже создает папку под номером s3://mybucket/logs с именем приложения. Но папка пуста, и если я бегу yarn logs -applicationID <applicationId>, я получаю трассировку стека:

14/10/20 23:02:15 INFO client.RMProxy: Connecting to ResourceManager at /10.XXX.XXX.XXX:9022 
Exception in thread "main" org.apache.hadoop.fs.UnsupportedFileSystemException: No AbstractFileSystem for scheme: s3 
    at org.apache.hadoop.fs.AbstractFileSystem.createFileSystem(AbstractFileSystem.java:154) 
    at org.apache.hadoop.fs.AbstractFileSystem.get(AbstractFileSystem.java:242) 
    at org.apache.hadoop.fs.FileContext$2.run(FileContext.java:333) 
    at org.apache.hadoop.fs.FileContext$2.run(FileContext.java:330) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548) 
    at org.apache.hadoop.fs.FileContext.getAbstractFileSystem(FileContext.java:330) 
    at org.apache.hadoop.fs.FileContext.getFSofPath(FileContext.java:322) 
    at org.apache.hadoop.fs.FSLinkResolver.resolve(FSLinkResolver.java:85) 
    at org.apache.hadoop.fs.FileContext.listStatus(FileContext.java:1388) 
    at org.apache.hadoop.yarn.logaggregation.LogCLIHelpers.dumpAllContainersLogs(LogCLIHelpers.java:112) 
    at org.apache.hadoop.yarn.client.cli.LogsCLI.run(LogsCLI.java:137) 
    at org.apache.hadoop.yarn.client.cli.LogsCLI.main(LogsCLI.java:199) 

Что это не имеет никакого смысла для меня; Я могу запустить hdfs dfs -ls s3://mybucket/, и он просто отображает содержимое. Машины получают учетные данные от ролей AWS IAM, я пробовал добавить fs.s3n.awsAccessKeyId и т. Д. К core-site.xml без изменений в поведении.

Любые советы очень ценятся.

+0

Оказывается, что существует разница между 'AbstractFileSystem' интерфейсом и интерфейсом' FileSystem'. Обычные параметры конфигурации _i.e._ 'fs.s3.impl' и' fs.s3n.impl' настраивают реализации интерфейса 'FileSystem', но по какой-то причине пряжа ищет реализации интерфейса' AbstractFileSystem', который можно настроить с помощью 'fs.AbstractFileSystem.s3.impl'. –

+0

См. Https://hadoop.apache.org/docs/r2.5.1/hadoop-project-dist/hadoop-common/core-default.xml и найдите «AbstractFileSystem». –

ответ

5

Hadoop предоставляет два интерфейса fs - FileSystem и AbstractFileSystem. В большинстве случаев мы работаем с FileSystem и используем параметры конфигурации, такие как fs.s3.impl, чтобы предоставить пользовательские адаптеры.

yarn logs, однако использует интерфейс AbstractFileSystem.

Если вы можете найти реализацию для S3, вы можете указать его, используя fs.AbstractFileSystem.s3.impl.

См core-default.xml примеры fs.AbstractFileSystem.hdfs.impl и т.д.

Смежные вопросы