본문 바로가기

춤추는 프로그래머/Big Data

flume-hdfs-sink / flume-hdfs-conf.properties




Flume을 이용해 수집한 데이터를 HDFS로 저장하고 싶을때... 

flume-hdfs-sink를 이용한다. 


Flume의 lib폴더에 flume-hdfs-sink.jar파일을 넣어준다. 나는 커스텀하여 다시 묶어서 넣었다. 


$ bin/flume-ng agent --conf conf --conf-file conf/flume-hdfs-conf.properties -n source -Dflume.root.logger=DEBUG,console


한번 써 봤다... Flume 실행시키는 커맨드이다. 옵션 별 설명은 딴데서 찾아봐... 검색하면 나옴 ㅎㅎㅎ(ㅈㅅ..ㄱㅊ)




conf/flume-hdfs-conf.properties 를 반영하여 실행시키도록 해 놨으니 저 파일의 구성을 보면...

앞뒤 다 짤르고 그냥 이 sink 부분만 올려보겠다. 

Flume 설명 보면 다 나와있ㅇㅁ...



1
2
3
4
5
6
7
8
9
10
11
#Sinks
source.sinks = hdfs-sink0
source.sinks.hdfs-sink0.type=hdfs
source.sinks.hdfs-sink0.hdfs.fileType=DataStream
#source.sinks.hdfs-sink0.hdfs.filePrefix=backupTest
source.sinks.hdfs-sink0.hdfs.path=/user/hadoop/flume/test
source.sinks.hdfs-sink0.hdfs.writeFormat=Text
 
#HDFSSink-MemChannel Connection
source.sinks.hdfs-sink0.channel = memoryChannel0
 



읽어온 데이터를 Text형식으로 저 /user/hadoop/flume/test 란 디렉토리 안에다가 저장해 준다. 


디폴트 싱크로는 주석처리한 저 filePrefix 정보가 없으면 구리게도 FlumeData인가? 그런 단어를 앞에 붙여준다.

그리고 그 단어 뒤로는 "."+"현재시간long타입으로바꾼거" 가 들어간다. 




근데 나는 어떠케 해야되냐!!!!!! 자...

여러 원시 파일이 한 소스에서 (한 flume thread에서) hdfs로 들어간다. 

여러개의 원시 파일이 동시에 저 하나의 설정파일을 타고 들어간다는 얘기다. 

근데 또 그게 따로따로 쪼개져서 들어간다. 순차적으로 저장되긴 하나... 하둡에 저장된 파일이름으로도 정렬이 가능 하긴하나...(시간정보가 뒤에 붙으니까.) 하둡 상의 어떤 어떤 파일이 어떤 하나의 원시파일을 가르키는지... 알 도리가 없다. 

참나. 


다행히 방법은 아주 쉬웠다. 


Tailing 하는 소스에서 넘겨주는 event 정보에 원시 파일의 이름이 들어간다. 

그래서 그냥 sink 소스를 받아서 저렇게 하둡에 저장되는 데이터의 이름을 정해주는 부분을 수정하였다. 

(HDFSEventSink에 있다.)



그리하야... 내 싱크를 거쳐 들어간 파일은 모두 그네들의 본래 이름.시간정보 의 이름을 갖게 되었다. 

그래서 읽을때 파일 이름으로 나눠진 걸 모두 찾아서 전체를 concat 하여 보여주기로 하였다. 



근데 또 문제점이 있다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

버그가 없으면 코딩초딩이 아니지 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


예를 들어, filename.log라는 원시파일과 filename.logging 이라는 원시파일이 있어서 그걸 hdfs에 저장을 했다. 

근데 filename.log를 보고싶어서 그렇게 검색을 했다?

나는 검색할따 filename.log로 시작하는 하둡 내 파일을 모두 가져와 시간순으로 concat 할 것이다. 

그럼 filename.logging이라는 파일의 내용도 함께 들어오겠찌? 

왓더................................................................................ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


차차 생각해 보자. 어떠케 할지. ㅋㅋㅋㅋ 배고파서 머리가 안돔. ㅋㅋㅋ 벌써 여덟시 넘음 ㅋㅋㅋㅋㅋㅋ

나 빨리 밥먹으러 가야겠음. 슝~~~~~~~~~~~~~~~~





덧붙임)

밥먹으러 가고 집에 가서 자고 인나서 아침에 출근하는데 어제 왜 저거때매 고민했지? 난 바보야. 를 백만번 외쳤따. 

.... .startsWith(filename+".") 해주면 간단.