Flume을 사용하여 HDFS에 Twitter 트윗 쓰기
이번에는 Mac상의 로컬 파일 시스템이 아닌 외부 Hadoop 클러스터의 HDFS에 쓰는 방법을 소개한다.
환경
준비
전제 조건
Flume에서 로컬 파일 시스템에 쓰기 설정이 완료되었습니다.
아래의 기사에서 사용하는 전제를 재게재한다.
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
Reference
이 문제에 관하여(Flume을 사용하여 HDFS에 Twitter 트윗 쓰기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shiumachi/items/818ac7fb8e03d3db8ec2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ bin/flume-ng agent -n a1 -c conf -f ~/etc/flume/twitter-hdfs.conf -Dflume.root.logger=INFO,console
$ 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
Reference
이 문제에 관하여(Flume을 사용하여 HDFS에 Twitter 트윗 쓰기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shiumachi/items/818ac7fb8e03d3db8ec2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)