☆☆☆★☆☆☆

唯有努力才能活成自己想要活成的样子

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

java.io.IOException: Filesystem closed错误

1.往集群提交任务的时候,需要使用多线程在hdfs上面读取一个资源文件。在读取该资源文件的时候,代码爆出如下异常:

复制代码
java.io.IOException: Filesystem closed
at org.apache.hadoop.hdfs.DFSClient.checkOpen(DFSClient.java:470)
at org.apache.hadoop.hdfs.DFSInputStream.readWithStrategy(DFSInputStream.java:743)
at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:830)
at java.io.DataInputStream.read(DataInputStream.java:149)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at com.txj.query.orcutil.OrcThreadsWriter.parseFileToOrc(OrcThreadsWriter.java:86)
at com.txj.query.orcutil.OrcThreadsWriter.run(OrcThreadsWriter.java:52)
at java.lang.Thread.run(Thread.java:748)
复制代码

2.原因:

当任务提交到集群上面以后,多个datanode在getFileSystem过程中,由于Configuration一样,会得到同一个FileSystem。如果有一个datanode在使用完关闭连接,其它的datanode在访问就会出现上述异常。

3.缓存FileSystem实例:

1)FileSystem类中可以通过"fs.%s.impl.disable.cache"来指定是否缓存FileSystem实例(其中%s替换为相应的scheme,比如hdfs、local等)

2)创建了相应的FileSystem实例,这个实例将会保存在缓存中,此后每次get都会获取同一个实例

代码在获取Configuration时需要加入该项配置,保存缓存。

conf.setBoolean("fs.hdfs.impl.disable.cache", true);

 

posted on   Yr-Zhang  阅读(1466)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示