Агрегация журналов YARN в AWS EMR - UnsupportedFileSystemException

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

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

В разделе «Для агрегирования журналов в Amazon S3 с помощью интерфейса командной строки AWS».

Я проверил, что действие начальной загрузки hadoop-config помещает следующее в 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 без каких-либо изменений в поведении.

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


person mattwise    schedule 20.10.2014    source источник
comment
Похоже, что есть разница между интерфейсом AbstractFileSystem и интерфейсом FileSystem. Обычные параметры конфигурации т.е. fs.s3.impl и fs.s3n.impl настраивают реализации интерфейса FileSystem, но по какой-то причине yarn ищет реализации интерфейса AbstractFileSystem, который можно настроить с помощью fs.AbstractFileSystem.s3.impl.   -  person James Lim    schedule 21.10.2014
comment
См. hadoop.apache.org /docs/r2.5.1/hadoop-project-dist/hadoop-common/ и найдите AbstractFileSystem.   -  person James Lim    schedule 21.10.2014


Ответы (1)


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

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

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

Примеры см. В core-default.xml. из fs.AbstractFileSystem.hdfs.impl и т. д.

person James Lim    schedule 21.10.2014