Cassandra is an eventually consistent key value store similar to HBase and Google`s Bigtable. It implements a distributed hash map with column families originally it supported a Thrift based API very close to HBase`s. Lately Cassandra has moved towards a SQL like query language with much more flexibility around data types, joints and filters. Thankfully the Thrift interface is still there so it`s easy to convert the OpenTSDB HBase schema and calls to Cassandra at a low level through the AsyncHBase
HBaseClient API. AsyncCassandra is a shim between OpenTSDB and Cassandra for trying out TSDB with an alternate backend.
- Setup a Cassandra cluster using the
ByteOrderedPartitioner. This is critical as we require the row keys to be sorted. Because this setting affects the entire node, you may need to setup a cluster dedicated to OpenTSDB.
- Create the proper keyspsaces and column families by using the cassandra-cli script:
create keyspace tsdb; use tsdb; create column family t with comparator = BytesType; create keyspace tsdbuid; use tsdbuid; create column family id with comparator = BytesType; create column family name with comparator = BytesType;
- Build TSDB by executing sh build-cassandra.sh (or if you prefer Maven, sh build-cassandra.sh pom.xml)
- Modify your opentsdb.conf file with the asynccassandra.seeds parameter, e.g. asynccassandra.seeds=127.0.0.1:9160.
- In the config file, set tsd.storage.hbase.uid_table=tsdbuid
- Run the tsd via build/tsdb tsd --config=<path>/opentsdb.conf
If you intend to use meta data or tree features, repeat the keyspace creation with the proper table name.
The following is a table with required and optional parameters to run OpenTSDB with Cassandra. These are in addition to the standard TSD configuration parameters from Configuration
|asynccassandra.seeds||String||Required||The list of nodes in your Cassandra cluster. These can be formatted <hostname>:<port>|
|asynccassandra.port||Integer||Optional||An optional port to use for all nodes if not configured in the seeds setting.||9160|