[Cassandra]在 spark 作业中的 cassandra sql 中的行键级别进行过滤,导致 cpu 利用率过剩
[Cassandra]Filter at row key level in cassandra sql in spark job causing the overcapacity of cpu utilization
在我的 spark 作业中,我使用 java cassandra util 从 cassandra 读取数据。我的查询看起来像-
JavaRDD<CassandraRow> cassandraRDD = functions.cassandraTable("keyspace","column_family").
select("timeline_id","shopper_id","product_id").where("action=?", "Viewed")
我的行键级别设置在操作列上。当我 运行 我的 spark 作业导致 cpu 的过度使用但是当我删除操作列上的过滤器时它工作正常。
请在下面找到列族的创建 table 脚本-
CREATE TABLE keyspace.column_family (
action text,
timeline_id timeuuid,
shopper_id text,
product_id text,
publisher_id text,
referer text,
remote_ip text,
seed_product text,
strategy text,
user_agent text,
PRIMARY KEY (action, timeline_id, shopper_id)
) WITH CLUSTERING ORDER BY (timeline_id DESC, shopper_id ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'}
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';
我怀疑 action_item 是行键,所有数据都是从单个节点(热点)提供的,这就是为什么节点 CPU 可能会激增。此外,在读取时,spark 作业中只创建了一个 RDD 分区。任何帮助将不胜感激。
好的,您遇到了数据模型问题。 action
= 分区键,因此所有类似的操作都存储在单个分区中 =(一个节点 + 副本)。
你总共有多少不同个动作?您关于拥有热点的直觉是有道理的。
您可能需要一个不同的分区键或需要向分区键添加一个额外的列以让 Cassandra 在集群上均匀分布数据。
阅读此博客 post : http://www.planetcassandra.org/blog/the-most-important-thing-to-know-in-cassandra-data-modeling-the-primary-key/
在我的 spark 作业中,我使用 java cassandra util 从 cassandra 读取数据。我的查询看起来像-
JavaRDD<CassandraRow> cassandraRDD = functions.cassandraTable("keyspace","column_family").
select("timeline_id","shopper_id","product_id").where("action=?", "Viewed")
我的行键级别设置在操作列上。当我 运行 我的 spark 作业导致 cpu 的过度使用但是当我删除操作列上的过滤器时它工作正常。
请在下面找到列族的创建 table 脚本-
CREATE TABLE keyspace.column_family (
action text,
timeline_id timeuuid,
shopper_id text,
product_id text,
publisher_id text,
referer text,
remote_ip text,
seed_product text,
strategy text,
user_agent text,
PRIMARY KEY (action, timeline_id, shopper_id)
) WITH CLUSTERING ORDER BY (timeline_id DESC, shopper_id ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'}
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';
我怀疑 action_item 是行键,所有数据都是从单个节点(热点)提供的,这就是为什么节点 CPU 可能会激增。此外,在读取时,spark 作业中只创建了一个 RDD 分区。任何帮助将不胜感激。
好的,您遇到了数据模型问题。 action
= 分区键,因此所有类似的操作都存储在单个分区中 =(一个节点 + 副本)。
你总共有多少不同个动作?您关于拥有热点的直觉是有道理的。
您可能需要一个不同的分区键或需要向分区键添加一个额外的列以让 Cassandra 在集群上均匀分布数据。
阅读此博客 post : http://www.planetcassandra.org/blog/the-most-important-thing-to-know-in-cassandra-data-modeling-the-primary-key/