2017-09-08 4 views
2

flume을 사용하는 로컬 시스템에서 hdfs에서 파일을 이동하려고하지만 내 flume을 실행할 때 많은 작은 파일이 생성됩니다. 내 원본 파일의 크기는 154 - 500KB이지만 내 HDFS에서는 크기가 4-5kb 인 많은 파일을 만듭니다. 나는 수색을하고 rollSizerollCount을 변경하면 값이 증가하지만 여전히 동일한 문제가 발생하고 있음을 알았습니다. 또한 나는 아래 오류 받고있다.작은 파일을 생성하는 flume

오류 : 내가 HDFS-site.xml의의 변화를 할 조금 무서워

ERROR hdfs.BucketWriter: Hit max consecutive under-replication rotations (30); will not continue rolling files under this path due to under-replication

내가 클러스터에서 작업하고있다. HDFS에 원본 파일을 옮기거나 크기가 작은 파일을 만들기 위해 할 수있는 일을 제안하십시오 (4-5kb 대신 50-60kb로 만드십시오).

다음은 나의 구성입니다.

구성 :

agent1.sources = source1 
agent1.sinks = sink1 
agent1.channels = channel1 
agent1.sources.source1.channels = channel1 
agent1.sinks.sink1.channel = channel1 
agent1.sources.source1.type = spooldir 
agent1.sources.source1.spoolDir = /root/Downloads/CD/parsedCD 
agent1.sources.source1.deletePolicy = immediate 
agent1.sources.source1.basenameHeader = true 
agent1.sinks.sink1.type = hdfs 
agent1.sinks.sink1.hdfs.path = /user/cloudera/flumecd 
agent1.sinks.sink1.hdfs.fileType = DataStream 
agent1.sinks.sink1.hdfs.filePrefix = %{basename} 
agent1.sinks.sink1.hdfs.rollInterval = 0 
agent1.sinks.sink1.hdfs.batchsize= 1000 
agent1.sinks.sink1.hdfs.rollSize= 1000000 
agent1.sinks.sink1.hdfs.rollCount= 0 
agent1.channels.channel1.type = memory 
agent1.channels.channel1.maxFileSize =900000000 

답변

2

난 당신이 게시하는 오류가 충분히 명확하다고 생각 : 작성중인 파일을 작성중인 파일의 블록을 의미한다 (복제 아래-, 그리고있는 클러스터를 따라 분산되어 복제 인수보다 복제본이 적습니다 (일반적으로 3-). (파일을 롤 할 때마다 새로운 복제본 파일이 만들어지고 최대 허용치 인 -30에 도달하기 때문에) 상황이 계속되는 동안 롤이 더 이상 수행되지 않습니다.

파일이 왜 복제되지 않았는지 확인하는 것이 좋습니다. 이는 클러스터의 디스크가 부족하거나 클러스터가 최소 노드 수 (예 : -i.e)로 설정 되었기 때문일 수 있습니다. 3 노드 - 하나는 다운됩니다. 2 개의 데이터 노드 만이 살아 있고 복제 계수는 3-로 설정됩니다.

다른 옵션 (권장하지 않음)은 복제 계수를 1-로 줄이는 것입니다. 또는 복제가 허용되지 않는 롤 수를 늘리십시오. (그러한 일이 가능한지는 모르겠지만 가능하더라도 결국 동일한 오류가 다시 발생합니다.)

+0

감사합니다. 자세한 설명을 위해 :) – Ironman