[英]Cassandra + Spark executor hyperconvergence
由於 Apache Spark 是建議用於 Cassandra 的分布式處理引擎,我知道有可能將 Spark 執行程序與 Cassandra 節點一起運行。 我的問題是驅動程序和 Spark 連接器是否足夠智能以了解分區和分片分配,以便以超融合方式處理數據。
簡單地說,執行程序是否從托管在執行程序運行的節點上的分區中讀取存儲的數據,因此不會像 Spark 在 HDFS 上運行時那樣通過網絡傳輸不必要的數據?
是的,Spark Cassandra Connector 能夠做到這一點。 從源代碼:
getPreferredLocations
方法告訴 Spark 從中獲取分區的首選節點,以便分區的數據位於任務發送到的同一節點上。 如果 Cassandra 節點與 Spark 節點並置,則查詢總是發送到與 Spark Executor 進程在同一節點上運行的 Cassandra 進程,因此數據不會在節點之間傳輸。 如果 Cassandra 節點在讀取過程中出現故障或過載,查詢將重試到不同的節點。
理論上是的。 HDFS 也一樣。 然而,實際上我在雲上看到的很少,在使用它們的雲服務時,單獨的節點用於 Spark 和 Cassandra。 如果您使用 IASAS 並設置您自己的 Cassandra 和 Spark,那么您就可以實現它。
我想補充亞歷克斯的回答:
是的,Spark Cassandra Connector 能夠做到這一點。 從源代碼:
getPreferredLocations 方法告訴 Spark 從中獲取分區的首選節點,以便分區的數據位於任務發送到的同一節點上。 如果 Cassandra 節點與 Spark 節點並置,則查詢總是發送到與 Spark Executor 進程在同一節點上運行的 Cassandra 進程,因此數據不會在節點之間傳輸。 如果 Cassandra 節點在讀取過程中出現故障或過載,查詢將重試到不同的節點。
認為這是一種不良行為。
在 Cassandra 中,當您要求獲取特定分區的數據時,只會訪問一個節點。 由於復制,Spark 實際上可以訪問 3 個節點。 因此,無需改組,您就有 3 個節點參與該作業。
然而在 Hadoop 中,當您要求獲取特定分區的數據時,通常會訪問集群中的所有節點,然后 Spark 使用集群中的所有節點作為執行器。
因此,如果您有 100 個節點:在 Cassandra 中,Spark 將利用 3 個節點。 在 Hadoop 中,Spark 將利用 100 個節點。
Cassandra 針對實時操作系統進行了優化,因此並未針對數據湖等分析進行優化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.