2014-02-08 3 views
1

Storm 's Trident를 Cassandra 2.0.5, Storm 버전 0.9.0.1과 함께 사용하는 방법을 배우고 있습니다. 또한 com.hmsonline storm-cassandra 0.4.0-rc4 contrib도 사용하고 있습니다.Trident Storm-Cassandra, 복수 기본 키가있는 테이블에 쓰기

목표는 단순히 id (int), 이름 (텍스트) 및 문장 (텍스트) 열이있는 테이블에 텍스트 행을 삽입하는 것입니다. id와 name은 기본 키입니다.

partitionPersist에는 StateUpdater이 필요하며 그 중 하나는 com.hmsonline.storm.cassandra.trident.CassandraUpdater<K, C, V>입니다. 하지만 그것은 입력으로 단 하나의 키가되고 두 ​​개가 아닌 것 같습니다 (ID와 이름이 필요함). 튜플 매퍼 (TridentTupleMapper)도 하나의 키 사용 : 어쩌면

TridentTupleMapper<K, C, V> tupleMapper 

내가 부족 뭔가를하지만, 내가 어떻게 키로 여러 열을 정의합니까?

답변

2

나 브라이언과 내가 그 작업 한 프로젝트를 지적하자 폭풍이 카산드라를 활용 : https://github.com/hmsonline/storm-cassandra-cql

당신이 당신의 키에 맞는 CqlTupleMapper을 개발하는 방법을 참조하십시오 볼 수있는 몇 가지 사례가 있습니다/열 매핑. 이 코드는 아직 개발 중이지만 CQL3에 적합한 백킹 맵 구현이 있습니다.이 구현은 집계를 보존하고 파티션을 저장하는 작업을합니다. 사용자의 요구에

, 당신은 그 그룹 트라이던트 토폴로지를 정의 할 것이다 들어오는 데이터 방법으로 (문장) : 당신은 다음 CqlTupleMapper 구현하는 것이

inputStream.groupBy(new Field("sentences")) 

- 특히지도 (K 키를, V 값)은 전달 된 값으로 키를 매핑하는 사용자 정의 CQL insert 문을 갖습니다. 귀하의 질의는 다음과 같습니다 :

@Override 
public Statement map(List<String> keys, String value) { 
    Insert statement = QueryBuilder.insertInto(KEYSPACE_NAME, TABLE_NAME); 
    statement.value("id", keys.get(0)); 
    statement.value("name", keys.get(1)); 
    statement.value("sentence", value); 
    return statement; 
} 

나는 희망이 있습니다.

+0

감사합니다.이 예제는 정말 도움이됩니다. –

관련 문제