Крис на самом деле прав.Я столкнулся с подобной проблемой (IOException: поток закрыт), и проблема вызвана чтением из устаревшего потока.Я предполагаю, Диджей, что вы используете что-то вроде этих строк для чтения пользовательского ресурса из вашего classpath:
<hdp:configuration resources="classpath:/custom-site.xml"/>
, а затем получаете FileSystem как FileSystem.get(conf)
.
После расходовиногда с отладчиком похоже, что проблема вызвана комбинацией ConfigurationFactoryBean
Spring и Apache Hadoop Configuration
объектов.Если вы посмотрите на исходный код Spring Hadoop на github (да, он там доступен), Spring Hadoop будет выглядеть как комбинация Spring Settings и Apache Hadoop API.
Поток ввода открывается в Spring дляпарсит пользовательский ресурс и закрывается после прочтения.Метод get
из FileSystem
впоследствии перезагружает тот же поток, который уже закрыт, и снова читает, выдавая ошибку IOException: stream closed
.
Обходной путь, похожий на примеры на github, заключается в использовании свойств Spring и SpEl (Spring Expression Language) для замены необходимых вам конфигураций на необходимые поля.Другой вариант - написать свой собственный ConfigurationFactoryBean
, который создаст новый экземпляр Configuration
, используя существующий в качестве родительского и добавив ресурсы в качестве URL-адресов.
Надеюсь, это несколько поможет.