我们正在运行Datastax Enterprise 4.0.1并尝试在Cassandra中针对CF运行不同的M / R作业。我们因此设置了列系列:
CREATE TABLE pageviews (
website text,
date text,
created timestamp,
browser_id text,
ip text,
referer text,
user_agent text,
PRIMARY KEY ((website, date), created, browser_id)
) WITH bloom_filter_fp_chance=0.001000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
index_interval=128 AND
read_repair_chance=1.000000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
default_time_to_live=0 AND
speculative_retry='NONE' AND
memtable_flush_period_in_ms=0 AND
compaction={'min_sstable_size': '52428800', 'class': 'SizeTieredCompactionStrategy'} AND
compression={'chunk_length_kb': '64', 'sstable_compression': 'LZ4Compressor'};
Hive的好处在于它处理CQL3"展平",以抽象Cassandra的底层列/行存储机制。缺点似乎它不会使用Cassandra的分区密钥或主键来执行快速查找,例如
。SELECT COUNT(1) WHERE website = "blah" AND date = "blah";
运行该MR作业似乎执行全表扫描,而不是预先缩小它必须解析的密钥。如果基于分区/主键的过滤有明显的好处,是否可以告诉Hive不执行全表扫描?
旁注:使用Pig时,它似乎可以并且确实使用Cassandra的分区/主键来执行快速查找。 Pig的缺点是我们必须自己完成所有的过滤和压扁 - 这极大地阻碍了创造就业的时间。
答案 0 :(得分:0)
最好的办法是使用Pig,并使用cql:to CqlStorage(),它可以为您平放Cassandra数据,例如。
grunt> pageviews = LOAD 'cql://ks/pageviews' USING CqlStorage();
grunt> describe pageviews;
grunt> pageviews: {website: chararray,date: chararray,created: long,browser_id: chararray,ip: chararray,referer: chararray,user_agent: chararray}