0

Spring Data Hadoop名前空間を使用してリソースを指定すると、アプリケーションによって、IOException指定されたファイルをロードするときにがスローされます。ファイルは確実に存在し、有効な形式です。

Spring Data Hadoop XML構成:

起動時のスタックトレース:

Caused by: java.lang.RuntimeException: java.io.IOException: Stream closed
    at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:1231)
    at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:1103)
    at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:1037)
    at org.apache.hadoop.conf.Configuration.get(Configuration.java:415)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:860)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1380)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:66)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1404)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:254)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:123)
    at com.mendeley.swets.config.HdfsConfig.fileSystem(HdfsConfig.java:28)
    at com.mendeley.swets.config.HdfsConfig$$EnhancerByCGLIB$$38b1feb7.CGLIB$fileSystem$0(<generated>)
    at com.mendeley.swets.config.HdfsConfig$$EnhancerByCGLIB$$38b1feb7$$FastClassByCGLIB$$3c3c119d.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:280)
    at com.mendeley.swets.config.HdfsConfig$$EnhancerByCGLIB$$38b1feb7.fileSystem(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:149)
    ... 41 more
Caused by: java.io.IOException: Stream closed
    at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:145)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:189)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager$RewindableInputStream.read(XMLEntityManager.java:2932)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:704)
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:772)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:124)
    at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:1162)
    ... 61 more
4

2 に答える 2

1

クリスは実際に正しいです。同様の問題(IOException:ストリームが閉じられました)が発生しました。この問題は、古いストリームからの読み取りが原因で発生します。ディージェイ、クラスパスからカスタムリソースを読み取るために、これらの線に沿って何かを使用していると思います。

<hdp:configuration resources="classpath:/custom-site.xml"/>

、次にファイルシステムをとして取得しますFileSystem.get(conf)

ConfigurationFactoryBeanデバッガーでしばらく過ごした後、問題はSpringとApacheHadoopのConfigurationオブジェクトの組み合わせが原因であるように見えます。githubでSpringHadoopのソースコードを見ると(はい、そこで入手できます)、SpringHadoopはSpring設定とその下のApacheHadoopAPIの組み合わせのように見えます。

入力ストリームは、カスタムリソースを解析するためにSpringで開かれ、それを読み取った後に閉じられます。その後、メソッドgetfromFileSystemは、すでに閉じられている同じストリームをリロードし、再度読み取りを行ってエラーをスローしIOException: stream closedます。

回避策は、githubの例と同様に、SpringプロパティとSpEl(Spring Expression Language)を使用して、必要なフィールドに必要な構成を置き換えることです。もう1つのオプションは、既存のインスタンスを親として使用し、リソースをURLとして追加する、独自のインスタンスをConfigurationFactoryBean作成することです。Configuration

これがいくらか役立つことを願っています。

于 2012-03-28T16:14:24.650 に答える
1

これはトランクで修正されており、次のマイルストーンで利用できるようになります。詳細については、春のフォーラム投稿[1]を参照してください。

[1] http://forum.springsource.org/showthread.php?123777-IOException-when-using-lt-hadoop-configuration-resources-quot

于 2012-04-08T11:28:08.033 に答える