hadoop各种常见错误总结

错误一:Java.io.IOException: Incompatible clusterIDs 时常出现在namenode重新格式化之后

原因:每次namenode format会重新创建一个namenodeId,而data目录包含了上次format时的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空data下的所有目录.
解决办法:停掉集群,删除问题节点的data目录下的所有内容。即hdfs-site.xml文件中配置的dfs.data.dir目录。重新格式化namenode。
另一个更省事的办法:先停掉集群,然后将datanode节点目录/dfs/data/current/VERSION中的修改为与namenode一致即可。

错误二:org.apache.hadoop.yarn.exceptions.YarnException: Unauthorized request to start Container

问题原因:namenode,datanode时间同步问题

解决办法:多个datanode与namenode进行时间同步,在每台服务器执行:ntpdate time.nist.gov,确认时间同步成功。
最好在每台服务器的 /etc/crontab 中加入一行:”
0 2 * * * root ntpdate time.nist.gov && hwclock -w

错误三:java.net.SocketTimeoutException: 480000 millis timeout while waiting for channel to be ready for write

原因:IO超时

解决方法
修改Hadoop配置文件hdfs-site.xml,增加dfs.datanode.socket.write.timeout和dfs.socket.timeout两个属性的设置。

<span style="font-size:18px;"><code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">property</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">name</span>></span>dfs.datanode.socket.write.timeout<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">value</span>></span>6000000<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>

<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">name</span>></span>dfs.socket.timeout<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">value</span>></span>6000000<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span></code></span>

注意: 超时上限值以毫秒为单位。0表示无限制。

错误四:DataXceiver error processing WRITE_BLOCK operation

原因:文件操作超租期,实际上就是data stream操作过程中文件被删掉了。
解决办法
修改hdfs-site.xml (针对2.x版本,1.x版本属性名应该是:dfs.datanode.max.xcievers):

<span style="font-size:18px;"><code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">property</span>></span> 
        <span class="hljs-tag"><<span class="hljs-title">name</span>></span>dfs.datanode.max.transfer.threads<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">value</span>></span>8192<span class="hljs-tag"></<span class="hljs-title">value</span>></span> 
<span class="hljs-tag"></<span class="hljs-title">property</span>></span></code></span>

拷贝到各datanode节点并重启datanode即可

错误五:java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try.

原因:无法写入;我的环境中有3个datanode,备份数量设置的是3。在写操作时,它会在pipeline中写3个机器。默认replace-datanode-on-failure.policy是DEFAULT,如果系统中的datanode大于等于3,它会找另外一个datanode来拷贝。目前机器只有3台,因此只要一台datanode出问题,就一直无法写入成功。)

解决重点内容办法:修改hdfs-site.xml文件,添加或者修改如下两项:

<span style="font-size:18px;"><code class="hljs applescript has-numbering"><<span class="hljs-keyword">property</span>>
    <<span class="hljs-property">name</span>>dfs.client.block.<span class="hljs-command">write</span>.replace-datanode-<span class="hljs-function_start"><span class="hljs-keyword">on</span></span>-failure.enable</<span class="hljs-property">name</span>>
    <value><span class="hljs-constant">true</span></value>
</<span class="hljs-keyword">property</span>>
<<span class="hljs-keyword">property</span>>
    <<span class="hljs-property">name</span>>dfs.client.block.<span class="hljs-command">write</span>.replace-datanode-<span class="hljs-function_start"><span class="hljs-keyword">on</span></span>-failure.policy</<span class="hljs-property">name</span>>
    <value>NEVER</value>
</<span class="hljs-keyword">property</span>></code></span>

对于dfs.client.block.write.replace-datanode-on-failure.enable,客户端在写失败的时候,是否使用更换策略,默认是true没有问题。
对于,dfs.client.block.write.replace-datanode-on-failure.policy,default在3个或以上备份的时候,是会尝试更换结点尝试写入datanode。而在两个备份的时候,不更换datanode,直接开始写。对于3个datanode的集群,只要一个节点没响应写入就会出问题,所以可以关掉。

错误六:org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find any valid local directory for :

原因:两种可能,hadoop.tmp.dir或者data目录存储空间不足。
解决办法:看了一下我的dfs状态,data使用率不到40%,所以推测是hadoop.tmp.dir空间不足,导致无法创建Jog临时文件。查看core-site.xml发现没有配置hadoop.tmp.dir,因此使用的是默认的/tmp目录,在这目录一旦服务器重启数据就会丢失,因此需要修改。添加:

<span style="font-size:18px;"><code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">property</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">name</span>></span>hadoop.tmp.dir<span class="hljs-tag"></<span class="hljs-title">dir</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">value</span>></span>/data/tmp<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span></code></span>

然后重新格式化:hadoop namenode -format 重启。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值