2016-10-24 8 views
0

私は、毎時60GB以上のデータをHadoopに5分間集計するログシステムを持っています。私の問題は、データを見直すと、いくつかのピーク時間が不完全に見える(ログの一部のみが叱られている)ときです。この情報の損失は、最高負荷時間と一致します。私はログをたどり、私ができるすべての痕跡を読んでいるが、正確に何が問題なのかを知ることはできない。HadoopがHDFSに不完全なファイルを書き込む

バッチプロセスでは、Kafkaの多くのサーバーのログ行が取得され、その行がHDFSのファイルを開いてすべての行(ソースサーバーごとに1つのファイル)に書き込むライタースレッドにキューイングされます。中負荷から中負荷まではすべてOKです。高いワークロードがある場合、ログにはいくつかのエラーを吐く始めると警告している:

2016-10-08 14:16:24 INFO Exception in createBlockOutputStream 
java.io.IOException: Got error, status message , ack with firstBadLink as <dnip>:50010 
     at org.apache.hadoop.hdfs.protocol.datatransfer.DataTransferProtoUtil.checkBlockOpStatus(DataTransferProtoUtil.java:140) 
     at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.createBlockOutputStream(DFSOutputStream.java:1397) 
     at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1299) 
     at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:464) 
2016-10-08 14:16:24 INFO Abandoning BP-1891784736-10.118.249.120-1467026091136:blk_1077950482_131390250 
2016-10-08 14:16:24 INFO Excluding datanode DatanodeInfoWithStorage[<dnip>:50010,DS-d1b79bfe-3ee8-4dba-b3a3-48e50a357b30,DISK] 

は、いくつかの秒後、新しいエラーが表示されます。

2016-10-08 14:17:34 INFO Exception in createBlockOutputStream 
java.net.SocketTimeoutException: 65000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel 

たエラーの後、バッチ処理は、ファイルを閉じ始めます。次に、一部のファイルについてのみ、新しいエラーがいくつかあります。

2016-10-08 14:17:34 WARN DataStreamer Exception 
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /my/log/path/log.gz could only be replicated to 0 nodes instead of minRep 
lication (=1). There are 2 datanode(s) running and 2 node(s) are excluded in this operation. 

この特定のファイルのサイズはceroです。それ以外の場合は、部分的にのみ書き込まれ、一部のデータは失われます。また、HDFSはその状態を記録します。

2016-10-08 14:21:22,789 WARN datanode.DataNode (BlockReceiver.java:receivePacket(694)) - Slow BlockReceiver write data to disk cost:2143ms (threshold=300ms) 

DataXceiver error processing WRITE_BLOCK operation 

は、すべてのログを見ると、HDFS上WARNは、情報の損失に、そしてまたcreateBlockOutputStreamに相関ようです。そのエラーのある行が多数ある場合は常に、データが失われます。

ログを確認する必要がありますか?たぶんHadoop tunning?

+0

2つのデータノードのうち2つが除外されていることが記載されています。これらのノードには十分な記憶容量がありますか? (内側と外側のhdfs)。回避策はもちろん、1分の集約を使用することです。 –

答えて

0

部分的な回答として、ワーカーノードでは、GCが6時間ごとに長い休止(3〜5秒)を引き起こしていることがわかりました(事前定義済みのGCスパン)。ヒープを1GBから4GBに増やしたように見えます。ヒープが絶えずいっぱいになっている原因は、未解決の問題ですが、この範囲を超えています。ヒープが増加した後、ログにはこれ以上のエラーはありません。

+0

この問題は、どのヒープメモリを増やしたか教えてください。 –

関連する問題