簡體   English   中英

將 IN 用於復合分區鍵時,Spark-Cassandra 非常慢

[英]Spark-Cassandra very slow when using IN for composite partition key

我有一個 cassandra 表,其復合分區鍵為(time_bucket 時間戳,節點 int)。 time_bucket 值是插入數據的時間,秒數轉換為 00,節點值范圍為 0 到 100

Spark 作業每分鍾運行一次,從表中獲取數據。 該表包含近 2500 萬條記錄,每分鍾都會添加記錄。

如果我的 spark 作業每次運行時都選擇所有記錄,則該作業將在 2 分鍾內完成。 但如果我查詢使用:

s c.cassandraTable(keyspace_name,table_name).where("time_bucket = ? ", from).where("nodeid_bucket IN ? ", nodeid_bucket_range)

其中 val nodeid_bucket_range = 0 到 100,

這項工作需要 10 分鍾才能完成。

我的集群有 6 個節點,正在使用 DSE 4.8.9。 每個執行器使用 8 個內核和 20GB 內存。 增加這些值無助於使火花作業更快。

知道為什么我的工作需要 10 分鍾嗎? 使用 IN 子句時,spark-cassandra 是否無法正常工作?

您可能想要joinWithCassandraTable 如果您有大量值,則幾乎總是In子句最好通過連接來實現。 這將在不同的執行器上並行執行您的所有請求。

https://github.com/datastax/spark-cassandra-connector/blob/master/doc/2_loading.md#using-joinwithcassandratable

IN語句轉換為key OR key OR key3 ... OR key100 ,這對於優化器來說是非常低效的。 在您的情況下,您可以使用:

sc.cassandraTable(keyspace_name,table_name).where("time_bucket = ? ", from).where("nodeid_bucket > ? AND nodeid_bucket < ? ", nodeid_bucket_range)

觀察范圍的邊緣,當然這假設您的范圍是連續的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM