이제 대충 감을 잡았으니까.
하둡과 연계해서 간단한 프로그램을 작성해봐야겠다.
전달되는 로그들을 HDFS에 저장하고 저장된 로그를 맵리듀스를 이용해서 분석하는 정도? 현재 Flume은 하둡 0.20.2, 0.23를 지원한다.
우선 확인해볼 것이 있다. 배치형식의 로그파일을 전달하는 것이아니라 실시간으로 생성되는 로그를 Flume은 어떻게 전달하고 있는지 확인해 봐야겠다. 아니면 별도로 구현을 해야하는 지 여부도~~
지원하는 source 들을 살펴봐야 보면~~
아직까지는 직접 지원해주는 것은 없는 듯하다.
tail을 사용해서 로그파일에 새로운 데이터가 들어오면 이를 전달하도록 해서 비슷하게 동작하도록 해봐야겠다.
source 타입에 exec 을 이용해서 tail -F 로 로그파일을 모니터링 한다.
foo.sources.tailSrc.type = exec
foo.sources.tailSrc.command = tail -F /var/log/apache2/access.log
foo.sources.tailSrc.channels = MemoryChannel
foo.sinks.hdfsSink.type = hdfs
foo.sinks.hdfsSink.hdfs.path = hdfs://master:9000/flume #하둡의 core-site.xml에 설정되어 있는 네임노드 설정에 맞게 입력한다.
파일 타입은 디폴트가 SequenceFile이다. 우선 바로바로 생성되는 것을 확인하기 위해서 디폴트를 그대로 사용하는 것이 나을 듯 하다.
#foo.sinks.hdfsSink.hdfs.fileType = DataStream
이미 하둡 설치와 실행이 가능한 상태라고 하면, 우선 HDFS에 정상적으로 로그가 저장되는지 확인해야겠다. 별도로 콘솔에서도 확인이 가능하지만 Web UI를 쓰면 좀 더 쉽게 확인할 수 있다. (디폴트 포트 50070)
http://master:50070/dfshealth.jsp
HDFS 기본 접근제어 때문에 동일한 계정으로 Flume도 실행해야만 한다. 아니면 HDFS 설정에서 ACL을 없애도 된다.
지금은 'hadoop'이라는 계정으로 하둡과 플룸을 모두 실행시켰다.
access.log 파일에 새로운 데이터 10개가 들어오면 새로운 파일을 생성할 것이다. ( 디폴트 hdfs.rollCount = 10 )
아직 DataStream이 어떻게 동작하는지 확인이 안됨.
소스를 살펴봐야할 듯하다. 우선 SequenceFile로 저장해서 처리~