2014-10-15 3 views
0

나는 Flume (및 HDFS)에 처음이므로, 제 질문이 멍청하지 않기를 바랍니다.HDFS 싱크 : "영리한"폴더 라우팅

나는 멀티 테넌트 응용 프로그램을 보유하고 있습니다 (현재 의 고객은 약 100 명입니다). 16 가지 데이터 유형이 있습니다.

는 (생산, 우리는이 약 우리의 RabbitMQ를 통해 1,500 만 메시지/일.)

내가 HDFS이 같은 세입자, 데이터 유형, 및 날짜로 구분 내 모든 이벤트를, 쓰고 싶은

:

/data/{tenant}/{data_type}/2014/10/15/file-08.csv 

하나의 싱크 정의로 가능합니까? 나는 구성을 복제하고 싶지 않아, 새로운 클라이언트는 매주 도착 정도

이 문서에서, 나는

agent1.sinks.hdfs-sink1.hdfs.path = hdfs://server/events/%Y/%m/%d/%H/ 

이 가능한이 발생한다?

agent1.sinks.hdfs-sink1.hdfs.path = hdfs://server/events/%tenant/%type/%Y/%m/%d/%H/ 

들어오는 데이터에 따라 다른 폴더에 쓰고 싶습니다.

+0

[아파치 flume hdfs 싱크가 쓰기 동적 경로를 허용 할 수 있습니까?] (http://stackoverflow.com/questions/14830147/can-apache-flume-hdfs-sink-accept-dynamic-path-to- 쓰다) –

답변

1

아래 링크에 네이 실제로 가능하다 참조하십시오. 들어오는 데이터의 메타 데이터 또는 일부 필드를 사용하여 출력을 리디렉션 할 수 있습니다.

예를 들어, 제 경우에는 다른 유형의 로그 데이터를 얻고 있으며 그에 따라 각각의 폴더에 저장하려고합니다. 또한 내 경우에는 로그 라인의 첫 번째 단어가 파일 이름입니다. 다음은 동일한 설정 스 니펫입니다.

인터셉터 :

dataplatform.sources.source1.interceptors = i3 
dataplatform.sources.source1.interceptors.i3.type = regex_extractor 
dataplatform.sources.source1.interceptors.i3.regex = ^(\\w*)\t.* 
dataplatform.sources.source1.interceptors.i3.serializers = s1 
dataplatform.sources.source1.interceptors.i3.serializers.s1.name = filename 

HDFS 싱크

dataplatform.sinks.sink1.type = hdfs 
dataplatform.sinks.sink1.hdfs.path = hdfs://server/events/provider=%{filename}/years=%Y/months=%Y%m/days=%Y%m%d/hours=%H 

희망이 도움이됩니다.