복붙노트

[HADOOP] Flume HDFS 싱크는 작은 파일을 계속 롤링합니다.

HADOOP

Flume HDFS 싱크는 작은 파일을 계속 롤링합니다.

flume을 사용하여 hdfs로 트위터 데이터를 스트리밍하려고합니다. https://github.com/cloudera/cdh-twitter-example/

여기서 내가 시도해도 HDFS에서 크기가 1.5kB에서 15kB 범위 인 파일을 계속 생성하여 큰 파일 (64Mb)을보고 싶습니다. 다음은 에이전트 구성입니다.

TwitterAgent.sources = Twitter
TwitterAgent.channels = MemChannel
TwitterAgent.sinks = HDFS

TwitterAgent.sources.Twitter.type = com.cloudera.flume.source.TwitterSource
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sources.Twitter.consumerKey = xxxxxx
TwitterAgent.sources.Twitter.consumerSecret = xxxxxx
TwitterAgent.sources.Twitter.accessToken = xxxxx
TwitterAgent.sources.Twitter.accessTokenSecret = xxxxxxxx
TwitterAgent.sources.Twitter.keywords = test

TwitterAgent.sinks.HDFS.channel = MemChannel
TwitterAgent.sinks.HDFS.type = hdfs
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://localhost.localdomain:8020/user/flume/tweets/%Y/%m/%d/%H/
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text
TwitterAgent.sinks.HDFS.hdfs.batchSize = 10000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 67108864
TwitterAgent.sinks.HDFS.hdfs.rollCount = 0
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 0
TwitterAgent.sinks.HDFS.hdfs.idleTimeout = 0

TwitterAgent.channels.MemChannel.type = memory
TwitterAgent.channels.MemChannel.capacity = 10000
TwitterAgent.channels.MemChannel.transactionCapacity = 1000

편집 : 나는 로그 파일을 조사하고 이런 일이 항상 발견 :

해결법

  1. ==============================

    1.HDFS 복제 요소에 문제가있는 것처럼 보였습니다. 1 가상 데이터 노드가있는 가상 컴퓨터에서 작업 할 때 복제 요소를 1로 설정해야 예상대로 작동 할 수 있습니다.

    HDFS 복제 요소에 문제가있는 것처럼 보였습니다. 1 가상 데이터 노드가있는 가상 컴퓨터에서 작업 할 때 복제 요소를 1로 설정해야 예상대로 작동 할 수 있습니다.

  2. ==============================

    2.클러스터의 dfs.replication을 적절한 값으로 설정하십시오. 이 작업은 hdfs-site.xml 파일을 편집하여 수행 할 수 있습니다 (모든 클러스터 시스템에서). 그러나 이것은 충분하지 않습니다.

    클러스터의 dfs.replication을 적절한 값으로 설정하십시오. 이 작업은 hdfs-site.xml 파일을 편집하여 수행 할 수 있습니다 (모든 클러스터 시스템에서). 그러나 이것은 충분하지 않습니다.

    또한 flume 클래스 경로에 hdfs-site.xml 파일을 만들고 클러스터의 동일한 dfs.replication 값을 클러스터의 classpath에 넣어야합니다. Hadoop 라이브러리는 클러스터에서 작업을 수행하는 동안이 파일을보고 그렇지 않으면 기본값을 사용합니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>2</value>
        </property>
    </configuration>
    
  3. from https://stackoverflow.com/questions/22145899/flume-hdfs-sink-keeps-rolling-small-files by cc-by-sa and MIT license