본문 바로가기

프로그래밍

logstash webhdfs 사용

반응형

logstash webhdfs 사용

logstash webhdfs사용에 대해 정리합니다.

 

webhdfs {
	host => "namenode 서버"
	port => 50070
	path => "/hdfs에 저장될 위치/.log"
	user => "username"
}

 

host : hadoop의 namenode 서버 IP

port : namenode port 주소 (디폴트)

paht : hdfs에 파일을 저장할 위치, 파일 명을 포함

user : hdfs에 파일을 저장하는 user 설정

 

지금 하고 있는 업무 중에 logstash를 사용해서 hdfs로 실시간 전송 하는 로직이 필요해서 적용해보게 되었습니다. 하둡에 실시간으로 데이터를 저장하는 게 1.x하둡에서는 hadoop에서 지원하지 않았습니다. 지금 2.7 버전의 하둡을 사용하는데 이 버전에서는 webhdfs를 사용해서 실시간 스트리밍을 저장할 수 있습니다. 

 

hadoop에서 실시간 처리? 라는 물음이 있었는데 실제 사용하고 보니 잘 동작했습니다. 준 실시간으로 데이터가 hdfs에 쌓이는 것을 볼 수 있고 문제없는 것을 볼 수 있었습니다. 간혹 webhdfs로 데이터를 저장하는 파일에 대해 블록 하나를 못 찾는 문제가 발생하긴 했는데요. 블록 복구를 통해 해결하고 있습니다. 한 달에 한번 정보 발생하는 거 같습니다만 실제 데이터 유실은 발행한 적이 없어서 잘 동작하고 있는 거 같습니다..

 

전송하는 데이터의 량은 많지 않습니다 시간당 2G 정도로 24시간 내내 보내고 있습니다. 

 

파일을 시간별로 쌓는 logstash설정입니다.

path => "/파일 위치/%{day_ymd}/%{day_h}/파일 이름-%{day_ymdh}.log"

 

파일을 쓸 때 폴더를 날짜 기준으로 저장하도록 지정하면 매시간마다 새로운 파일이 생기면서 알아서 저장해 줍니다. 파일 구분을 일/시간/으로 구분해 두어 추후 파일을 읽어 후처리 할 때 편하게 설정할 수 있습니다.

 

비슷한 기능으로 httpfs 기능이 있습니다. httpfs서버가 따로 있으며 이를 이용하면 http를 사용해서 hdfs의 데이터를 다룰 수 있었습니다. 외부에서 데이터를 읽고 쓸때 사용 했으며 http 이긴 하나 안정 적으로 사용했던 경험이 있습니다.

반응형