Flume을 사용하여 HDFS에 Twitter 트윗 쓰기

5570 단어 flumehadoop
지난번은 Flume을 사용하여 Mac에서 Twitter 트윗을 로컬 파일에 저장하는 방법을 설명했습니다.
이번에는 Mac상의 로컬 파일 시스템이 아닌 외부 Hadoop 클러스터의 HDFS에 쓰는 방법을 소개한다.



환경


  • Flume 버전: CDH 5.4.2 (1.5.0 기반)
  • OS: Mac OS X 10.10.3

  • 준비



    전제 조건



  • Flume에서 로컬 파일 시스템에 쓰기 설정이 완료되었습니다.
  • Cloudera Manager를 사용하여 외부 Hadoop 클러스터 구축이 완료되었습니다. 환경이 없는 경우는 Quickstart VM 설정 을 바탕으로 구축하는 것. 아래의 기사에서는 외부 Hadoop 클러스터로서 Quickstart VM을 이용하고 있다.

  • 아래의 기사에서 사용하는 전제를 재게재한다.
    Flume のホームディレクトリ = ~/lib/flume
    

    Hadoop 클라이언트 다운로드 (Mac 측 설정)



    Cloudera 리포지토리에서 Hadoop의 tar.gz를 가져옵니다. 최신 버전에 대한 링크
    적절한 장소에 Hadoop을 설치하고 배포합니다. 나는 ~/lib/hadoop에 있어.

    flume-env.sh 만들기(Mac 측 설정)


    ~/lib/flume/conf/flume-env.sh.template를 기반으로 flume-env.sh를 만들고 다음 설정을 추가합니다.
    export JAVA_OPTS="-Xms100m -Xmx1000m -Dcom.sun.management.jmxremote"
    export HADOOP_HOME=~/lib/hadoop
    

    Hadoop 설정 파일 가져 오기 (Mac 측 설정)



    Cloudera Manager 홈페이지를 Mac 브라우저에서 엽니다. 주소는 http://<CMのアドレス>:7180/입니다.

    아래 그림과 같이 메뉴에서 클라이언트 설정을 다운로드합니다.





    다운로드한 hdfs-clientconfig.zip~/lib/hadoop 아래로 확장하고 conf로 이름을 바꿉니다.

    설정 파일 생성 (Mac 측 설정)



    알맞은 파일을 만든다. 여기에서는 ~/etc/flume/twitter-hdfs.conf로 한다.
    다음 정보를 입력합니다.

    twitter-hdfs.conf
    # Name the components on this agent
    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1
    
    # Describe/configure the source
    a1.sources.r1.type = org.apache.flume.source.twitter.TwitterSource
    a1.sources.r1.channels = c1
    a1.sources.r1.consumerKey = YOUR_CONSUMER_KEY
    a1.sources.r1.consumerSecret = YOUR_CONSUMER_KEY_SECRET
    a1.sources.r1.accessToken = YOUR_ACCESS_TOKEN
    a1.sources.r1.accessTokenSecret = YOUR_ACCESS_TOKEN_SECRET
    a1.sources.r1.maxBatchSize = 50000
    a1.sources.r1.maxBatchDurationMillis = 100000
    
    # Describe the sink
    a1.sinks.k1.type = hdfs
    a1.sinks.k1.channel = c1
    a1.sinks.k1.hdfs.path = hdfs://<NameNodeのアドレス>/user/flume/tweets/%y-%m-%d
    a1.sinks.k1.hdfs.useLocalTimeStamp = true
    a1.sinks.k1.hdfs.fileType = DataStream
    a1.sinks.k1.hdfs.inUseSuffix = 
    a1.sinks.k1.hdfs.inUsePrefix = _
    
    a1.sinks.k1.hdfs.writeFormat = Text
    a1.sinks.k1.hdfs.batchSize = 1000
    
    a1.sinks.k1.hdfs.rollSize = 0
    a1.sinks.k1.hdfs.rollCount = 0
    a1.sinks.k1.hdfs.rollInterval = 600
    
    a1.sinks.k1.hdfs.round = true
    a1.sinks.k1.hdfs.roundValue = 10
    a1.sinks.k1.hdfs.roundUnit = minute
    
    a1.sinks.k1.hdfs.serializer = avro_event
    a1.sinks.k1.hdfs.serializer.compressionCodec = snappy
    
    # Use a channel which buffers events in memory
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 10000
    a1.channels.c1.transactionCapacity = 1000
    
    # Bind the source and sink to the channel
    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1
    
    

    이전 예제와 달리 Sink를 file_roll에서 hdfs로 변경했습니다. 이렇게하면 HDFS에 로그를 내보낼 수 있습니다.

    디렉토리를 %y-%m-%d 로 지정하는 것으로, 「년-월-일」이라고 하는 디렉토리에 써내게 된다. 날짜가 변경되면 다른 디렉토리를 만듭니다.

    데이터 저장 디렉토리 만들기 (Hadoop 클러스터 측 설정)



    이 예에서는 HDFS의 /user/flume에 데이터를 저장하므로 디렉토리를 만듭니다.
    HDFS 클러스터에 로그인하고 다음 명령을 실행합니다.
    권한을 777로 설정했지만 쓰기가 가능하면 모든 권한을 사용할 수 있습니다.
    $ sudo -u hdfs hdfs dfs -mkdir /user/flume
    $ sudo -u hdfs hdfs dfs -chmod 777 /user/flume
    

    로그 검색 및 탐색



    Flume 시작(Mac 측 설정)



    Mac에서 ~/lib/flume로 이동하여 다음 명령을 실행하면 로그 수집이 시작됩니다.
    $ bin/flume-ng agent -n a1 -c conf -f ~/etc/flume/twitter-hdfs.conf -Dflume.root.logger=INFO,console
    

    hdfs dfs -text로 로그 보기(Mac 측 설정)


    hdfs dfs -text는 Avro 형식을 볼 수 있습니다. Mac에서 ~/lib/hadoop로 이동하여 다음 명령을 실행하면 로그 파일을 볼 수 있습니다.dfs -ls 명령으로 파일 이름을 확인하고 dfs -text로 파일을 지정하십시오.
    $ bin/hdfs dfs -ls hdfs://172.16.146.148/user/flume/tweets/
    $ bin/hdfs dfs -text hdfs://172.16.146.148/user/flume/tweets/15-05-29/FlumeData.XXXXX
    

    참고



    Flume 사용자 가이드: HDFS Sink

    좋은 웹페이지 즐겨찾기