2012-09-26 5 views
7

나는 Storm으로 놀고 있는데 집계 할 때 Storm이 (가능한 경우) 텀블링/슬라이딩 창 크기를 지정하는 곳인지 궁금합니다. 예 : 트위터에서 지난 1 시간 동안의 트렌드 주제를 찾고 싶다면 볼트가 1 시간마다 결과를 반환하도록 지정하려면 어떻게해야합니까? 이것은 각 볼트 안에 프로그래밍 방식으로 수행됩니까? 아니면 "창"을 지정하는 방법입니까?(Twitter) 집계시 폭풍우 창

답변

17

면책 조항 : 폭풍과 함께 트렌드 주제를 작성했습니다 (gakhov in his answer above 참조).

나는 이른바 tick tuples in Storm 0.8+을 사용하는 것이 가장 좋습니다. 이것들을 이용하여 특정 시간 간격 (예, 매 10 초마다 또는 매분마다)으로 통보되도록 자신 만의 스파우트/볼트를 구성 할 수 있습니다. 여기

는 틱 튜플 10 초마다받을 문제의 구성 요소를 구성하는 간단한 예제 :

// in your spout/bolt 
@Override 
public Map<String, Object> getComponentConfiguration() { 
    Config conf = new Config(); 
    int tickFrequencyInSeconds = 10; 
    conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, tickFrequencyInSeconds); 
    return conf; 
} 

그런 다음 "정상"들어오는 튜플을 구분하기 위해 당신의 분출/볼트의 execute() 방법 조건부 스위치를 사용할 수 있습니다 특별한 진드기 튜플에서. 예를 들어 :

// in your spout/bolt 
@Override 
public void execute(Tuple tuple) { 
    if (isTickTuple(tuple)) { 
     // now you can trigger e.g. a periodic activity 
    } 
    else { 
     // do something with the normal tuple 
    } 
} 

private static boolean isTickTuple(Tuple tuple) { 
    return tuple.getSourceComponent().equals(Constants.SYSTEM_COMPONENT_ID) 
     && tuple.getSourceStreamId().equals(Constants.SYSTEM_TICK_STREAM_ID); 
} 

다시 말하지만, 나는 gakhov는 지적 며칠 전 폭풍이 일에 대해 꽤 detailed blog post을 썼다 (뻔뻔한 플러그를!).

+0

집계 함수 (볼트)를 "트리거링"하기 위해 진드기 튜플을 사용했습니다. 고마워요 =) – gronnbeck

+0

당신은 오신 것을 환영합니다. :) –

+0

안녕 마이클, 나는 이것에 대해 궁금해 : 폭풍이 실행되는 동안, 어떻게 든 틱 튜플의 빈도를 변경할 수 있습니까? 가능한 경우 폭풍이 추세 결과의 로그를 쓰는 빈도를 변경하거나 폭풍우가 주제 추세를 계산하는 창 크기를 변경할 수 있습니다. 감사! – user2895478

1

평행도가 1 인 새 주둥이를 추가하고 다음 신호가있을 때까지 빈 신호를 내 보낸 다음 다음에 Utils.sleep을 보냅니다. (모두 nextTuple에서 완료됩니다.) 그런 다음 모든 그룹화를 사용하여 모든 관련 볼트를 해당 스파우트에 연결하면 모든 인스턴스에 동일한 신호가 수신됩니다.