2016-10-24 4 views
0

나는 매시간 ~ 60GB의 데이터에 대해 Hadoop에 5 분 집계를 작성하는 로깅 시스템을 가지고 있습니다. 내 문제는 데이터를 검토 할 때 일부 피크 시간이 불완전한 것으로 보입니다 (로그의 일부만 비난받는 경우). 이 정보의 손실은 최고로드 기간과 일치합니다. 로그를보고 가능한 모든 추적을 읽고 있지만 문제가 무엇인지 정확히 알 수는 없습니다.Hadoop은 HDFS에 불완전한 파일을 작성합니다

일괄 처리는 Kafka의 많은 서버 로그 라인을 가져온 다음 HDFS의 파일을 열고 모든 행 (원본 서버 당 하나의 파일)에 기록하는 작성자 스레드에 해당 행을 대기시킵니다. 중간 하중에서 중간 하중까지 모두 괜찮습니다. 높은 워크로드가있는 경우, 로그는 약간의 오차가 침을 시작하고 경고 :

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입니다. 그렇지 않으면 부분적으로 만 쓰여지고 일부 데이터는 손실됩니다.

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 

에서, createBlockOutputStream 정보의 손실 상관 관계, 또한 보인다 HDFS에 WARN : 또한, HDFS는 그 상태를 기록합니다. 오류가있는 행이 많을 때마다 데이터가 손실됩니다.

내가 확인해야하는 로그가 있습니까? 어쩌면 하둡 튜닝일까요?

+0

2 개의 데이터 노드 중 2 개가 제외됩니다. 이 노드에는 충분한 저장 용량이 있습니까? (내부 및 외부 hdfs). 해결 방법은 당연히 1 분 단위를 사용하는 것입니다. –

답변

0

부분 응답으로, GC는 작업자 노드에서 6 시간 (미리 정의 된 GC 범위)마다 긴 일시 중지 (3 ~ 5 초)를 발생시키는 것으로 나타났습니다. 우리는 힙을 1GB에서 4GB로 늘렸고 해결 된 것 같습니다. 힙이 끊임없이 가득 차게되는 원인은 여전히 ​​열려있는 질문이지만이 내용의 범위를 벗어납니다. 힙이 증가한 후에는 로그에 더 이상 오류가 없습니다.

+0

이 문제가 해결되어서 어떤 힙 메모리를 증가 시켰는지 알려주실 수 있습니까? –

관련 문제