나는 Storm으로 놀고 있는데 집계 할 때 Storm이 (가능한 경우) 텀블링/슬라이딩 창 크기를 지정하는 곳인지 궁금합니다. 예 : 트위터에서 지난 1 시간 동안의 트렌드 주제를 찾고 싶다면 볼트가 1 시간마다 결과를 반환하도록 지정하려면 어떻게해야합니까? 이것은 각 볼트 안에 프로그래밍 방식으로 수행됩니까? 아니면 "창"을 지정하는 방법입니까?(Twitter) 집계시 폭풍우 창
7
A
답변
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을 썼다 (뻔뻔한 플러그를!).
1
평행도가 1 인 새 주둥이를 추가하고 다음 신호가있을 때까지 빈 신호를 내 보낸 다음 다음에 Utils.sleep을 보냅니다. (모두 nextTuple에서 완료됩니다.) 그런 다음 모든 그룹화를 사용하여 모든 관련 볼트를 해당 스파우트에 연결하면 모든 인스턴스에 동일한 신호가 수신됩니다.
집계 함수 (볼트)를 "트리거링"하기 위해 진드기 튜플을 사용했습니다. 고마워요 =) – gronnbeck
당신은 오신 것을 환영합니다. :) –
안녕 마이클, 나는 이것에 대해 궁금해 : 폭풍이 실행되는 동안, 어떻게 든 틱 튜플의 빈도를 변경할 수 있습니까? 가능한 경우 폭풍이 추세 결과의 로그를 쓰는 빈도를 변경하거나 폭풍우가 주제 추세를 계산하는 창 크기를 변경할 수 있습니다. 감사! – user2895478