本文介绍写入文件提示DataXceiver Premature EOF from inputStream异常的解决方案。
具体报错
DataXceiver error processing WRITE_BLOCK operation src: /10.*.*.*:35692 dst: /10.*.*.*:50010 java.io.IOException: Premature EOF from inputStream
问题原因
通常为了不断地向HDFS写入新的数据,作业会打开较多的HDFS文件写入流(Stream)。但HDFS允许同时打开的文件数量是有限的,受限于DataNode参数,超过限制就会出现DataXceiver Premature EOF from inputStream异常。
解决方案
查看DataNode日志,参见HDFS服务日志,一般会有如下报错。
java.io.IOException: Xceiver count 4097 exceeds the limit of concurrent xcievers: 4096
at org.apache.hadoop.hdfs.server.datanode.DataXceiverServer.run(DataXceiverServer.java:150)
如果存在报错,可通过以下方式解决:
在顶部菜单栏处,根据实际情况选择地域和资源组。
进入HDFS服务的配置页面。
在集群管理页面,单击目标集群操作列的集群服务。
在集群服务页面,单击HDFS服务区域的配置。
在配置搜索区域,搜索参数dfs.datanode.max.transfer.threads,并适当地调大该参数值,一般建议翻倍增加,例如8192、16384。
说明dfs.datanode.max.transfer.threads参数表示DataNode处理读写数据流的线程池大小,默认值为4096个。
文档内容是否对您有帮助?