Networking Hadoop节点在一段时间后死亡(崩溃)

Networking Hadoop节点在一段时间后死亡(崩溃),networking,ubuntu,hadoop,cluster-computing,Networking,Ubuntu,Hadoop,Cluster Computing,我有一个包含16个(ubuntu 12.04服务器)节点(1个主节点和15个从节点)的hadoop集群。它们通过专用网络连接,并且主机也有一个公共IP(它属于两个网络)。 当我运行小任务时,即使用小输入和小处理时间,一切正常。 但是,当我运行更大的任务时,即使用7-8GB的输入数据时,我的从属节点开始一个接一个地消亡 从web ui(http://master:50070/dfsnodelist.jsp?whatNodes=LIVE)我看到最后一个联系人开始增加,从我的群集提供商的web ui上

我有一个包含16个(ubuntu 12.04服务器)节点(1个主节点和15个从节点)的hadoop集群。它们通过专用网络连接,并且主机也有一个公共IP(它属于两个网络)。 当我运行小任务时,即使用小输入和小处理时间,一切正常。 但是,当我运行更大的任务时,即使用7-8GB的输入数据时,我的从属节点开始一个接一个地消亡

从web ui(
http://master:50070/dfsnodelist.jsp?whatNodes=LIVE
)我看到最后一个联系人开始增加,从我的群集提供商的web ui上,我看到节点已崩溃。以下是节点的屏幕截图(我无法向上滚动):

另一台计算机显示此错误,hadoop dfs正在运行,而没有作业正在运行:

BUG:软锁定-CPU#7卡27秒![java:4072]

这是另一个截图(我无法理解):

以下是崩溃数据节点的日志(IP 192.168.0.9):

以下是如何设置我的
mapred site.xml
文件:

<property>
    <name>mapred.child.java.opts</name>
    <value>-Xmx2048m</value>
</property>

<property>
    <name>mapred.tasktracker.map.tasks.maximum</name>
    <value>4</value>
</property>

<property>
    <name>mapred.tasktracker.reduce.tasks.maximum</name>
    <value>4</value>
</property>

mapred.child.java.opts
-Xmx2048m
mapred.tasktracker.map.tasks.max
4.
mapred.tasktracker.reduce.tasks.max
4.
每个节点有8个CPU和8GB的RAM。我知道我将
mapred.child.java.opts设置得太高了,但是使用这些设置和数据时,运行的作业是相同的。我已将reduce-slowstart设置为1.0,因此只有在所有映射程序完成后,才会启动reducer

ping一些节点会导致一小部分数据包丢失,ssh连接会冻结一段时间,但我不知道这是否相关。我在每个节点的
/etc/security/limits.conf
文件中添加了以下行:

hadoop硬文件16384

但这也不起作用

解决方案:看来这毕竟是一个内存错误。我有太多正在运行的任务,计算机崩溃了。在它们崩溃后,我重新启动了它们,hadoop作业没有正确运行,即使我设置了正确的映射器数量。解决方案是移除坏的数据节点(通过退役),然后再次包含它们。以下是我所做的一切,一切都很完美,没有丢失任何数据:


当然,设置正确的最大映射数并减少每个节点的任务。

这里,您的内存不足,因为每个映射都有2GB RAM,允许4个映射

请尝试使用1 GB xmx运行相同的作业,它肯定会成功

如果您想有效地使用集群,请根据文件的块大小设置xmx


如果块的大小为128 Mb,那么512 Mb就足够了。

作业是否在M和R之间有合并器步长?在占用大量内存的任务中,我遇到了高内存映射和合并同时发生在相同节点上的步骤的问题。如果在内存中有大型对象,那么在配置中,如果发生2个映射和2个组合,则可以使用8G ram。只是想一想。

stacktrace包含与内存相关的信息,因此可能您的内存不足。例如,您可以在循环中使用“free”来查看在计算过程中节点上的内存消耗是否失控。@teet我认为这不是内存错误。运行
free
,当机器无法响应master时,我发现只使用了50%或更少的内存。(我更改了设置,以便使用更少的内存,但问题仍然存在)。这可能是网络错误吗?在reduce阶段,复制速度似乎为0.33 MB/s!!!在使用
iperf
测试我的网络速度时,我看到了6.43 Gbits/秒的速度!我试过了,但没有成功(java堆是不够的)。1GB是不够的,因为我在内存中保留了一些输入组合。同样,以前运行过的程序,具有相同的设置和相同的输入。我也尝试使用较少的映射,但仍然得到相同的错误。我们可以将映射任务的数量减少到2吗?块大小和复制因子是多少?块大小是默认值(64MB),复制因子是3。看起来不错。。。所有从机都有datanode和task tracker吗?这一点很好,但是当我简单地启动datanode并且没有作业正在运行时,问题(长响应时间)也会出现,并且它也存在于有和没有合并器的两个作业中。当我有病毒扫描程序/安全软件(linux shield)问题时这是安装在节点上的…您是否使用类似于htop的方法观察节点,以了解其他进程在运行时会发生什么
2014-02-01 15:17:34,874 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Receiving blk_-2375077065158517857_1818 src: /192.168.0.7:53632 dest: /192.168.0.9:50010
2014-02-01 15:20:14,187 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in receiveBlock for blk_-2375077065158517857_1818 java.io.EOFException: while trying to read 65557 bytes
2014-02-01 15:20:17,556 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: PacketResponder blk_-2375077065158517857_1818 0 : Thread is interrupted.
2014-02-01 15:20:17,556 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: PacketResponder 0 for blk_-2375077065158517857_1818 terminating
2014-02-01 15:20:17,557 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: writeBlock blk_-2375077065158517857_1818 received exception java.io.EOFException: while trying to read 65557 bytes
2014-02-01 15:20:17,560 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(192.168.0.9:50010, storageID=DS-271028747-192.168.0.9-50010-1391093674214, infoPort=50075, ipcPort=50020):DataXceiver
java.io.EOFException: while trying to read 65557 bytes
    at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.readToBuf(BlockReceiver.java:296)
    at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.readNextPacket(BlockReceiver.java:340)
    at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:404)
    at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:582)
    at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:404)
    at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:112)
    at java.lang.Thread.run(Thread.java:744)
2014-02-01 15:21:48,350 INFO org.apache.hadoop.hdfs.server.datanode.DataNode.clienttrace: src: /192.168.0.9:50010, dest: /192.168.0.19:60853, bytes: 132096, op: HDFS_READ, cliID: DFSClient_attempt_201402011511_0001_m_000018_0_1657459557_1, offset: 0, srvID: DS-271028747-192.168.0.9-50010-1391093674214, blockid: blk_-6962923875569811947_1279, duration: 276262265702
2014-02-01 15:21:56,707 INFO org.apache.hadoop.hdfs.server.datanode.DataNode.clienttrace: src: /192.168.0.9:50010, dest: /192.168.0.19:60849, bytes: 792576, op: HDFS_READ, cliID: DFSClient_attempt_201402011511_0001_m_000013_0_1311506552_1, offset: 0, srvID: DS-271028747-192.168.0.9-50010-1391093674214, blockid: blk_4630218397829850426_1316, duration: 289841363522
2014-02-01 15:23:46,614 WARN org.apache.hadoop.ipc.Server: IPC Server Responder, call getProtocolVersion(org.apache.hadoop.hdfs.server.protocol.InterDatanodeProtocol, 3) from 192.168.0.19:48460: output error
2014-02-01 15:23:46,617 INFO org.apache.hadoop.ipc.Server: IPC Server handler 1 on 50020 caught: java.nio.channels.ClosedChannelException
    at sun.nio.ch.SocketChannelImpl.ensureWriteOpen(SocketChannelImpl.java:265)
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:474)
    at org.apache.hadoop.ipc.Server.channelWrite(Server.java:1756)
    at org.apache.hadoop.ipc.Server.access$2000(Server.java:97)
    at org.apache.hadoop.ipc.Server$Responder.processResponse(Server.java:780)
    at org.apache.hadoop.ipc.Server$Responder.doRespond(Server.java:844)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1472)
2014-02-01 15:24:26,800 INFO org.apache.hadoop.hdfs.server.datanode.DataNode.clienttrace: src: /192.168.0.9:50010, dest: /192.168.0.9:36391, bytes: 10821100, op: HDFS_READ, cliID: DFSClient_attempt_201402011511_0001_m_000084_0_-2100756773_1, offset: 0, srvID: DS-271028747-192.168.0.9-50010-1391093674214, blockid: blk_496206494030330170_1187, duration: 439385255122
2014-02-01 15:27:11,871 INFO org.apache.hadoop.hdfs.server.datanode.DataNode.clienttrace: src: /192.168.0.9:50010, dest: /192.168.0.20:32913, bytes: 462336, op: HDFS_READ, cliID: DFSClient_attempt_201402011511_0001_m_000004_0_-1095467656_1, offset: 19968, srvID: DS-271028747-192.168.0.9-50010-1391093674214, blockid: blk_-7029660283973842017_1326, duration: 205748392367
2014-02-01 15:27:57,144 INFO org.apache.hadoop.hdfs.server.datanode.DataNode.clienttrace: src: /192.168.0.9:50010, dest: /192.168.0.9:36393, bytes: 10865080, op: HDFS_READ, cliID: DFSClient_attempt_201402011511_0001_m_000033_0_-1409402881_1, offset: 0, srvID: DS-271028747-192.168.0.9-50010-1391093674214, blockid: blk_-8749840347184507986_1447, duration: 649481124760
2014-02-01 15:28:47,945 INFO org.apache.hadoop.hdfs.server.datanode.DataBlockScanner: Verification succeeded blk_887028200097641216_1396
2014-02-01 15:30:17,505 INFO org.apache.hadoop.hdfs.server.datanode.DataNode.clienttrace: src: /192.168.0.9:50010, dest: /192.168.0.8:58304, bytes: 10743459, op: HDFS_READ, cliID: DFSClient_attempt_201402011511_0001_m_000202_0_1200991434_1, offset: 0, srvID: DS-271028747-192.168.0.9-50010-1391093674214, blockid: blk_887028200097641216_1396, duration: 69130787562
2014-02-01 15:32:05,208 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(192.168.0.9:50010, storageID=DS-271028747-192.168.0.9-50010-1391093674214, infoPort=50075, ipcPort=50020) Starting thread to transfer blk_-7029660283973842017_1326 to 192.168.0.8:50010
2014-02-01 15:32:55,805 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(192.168.0.9:50010, storageID=DS-271028747-192.168.0.9-50010-1391093674214, infoPort=50075, ipcPort=50020) Starting thread to transfer blk_-34479901
<property>
    <name>mapred.child.java.opts</name>
    <value>-Xmx2048m</value>
</property>

<property>
    <name>mapred.tasktracker.map.tasks.maximum</name>
    <value>4</value>
</property>

<property>
    <name>mapred.tasktracker.reduce.tasks.maximum</name>
    <value>4</value>
</property>