簡體   English   中英

Cassandra使用spark-cassandra連接器插入性能

[英]Cassandra insert performance using spark-cassandra connector

我是火花和卡桑德拉的新手。 我正在嘗試使用spark-cassandra連接器插入到cassandra表中,如下所示:

import java.util.UUID

import org.apache.spark.{SparkContext, SparkConf}
import org.joda.time.DateTime
import com.datastax.spark.connector._

case class TestEntity(id:UUID, category:String, name:String,value:Double, createDate:DateTime, tag:Long)

object SparkConnectorContext {
  val conf = new SparkConf(true).setMaster("local")
    .set("spark.cassandra.connection.host", "192.168.xxx.xxx")
  val sc = new SparkContext(conf)
}
object TestRepo {
  def insertList(list: List[TestEntity]) = {
    SparkConnectorContext.sc.parallelize(list).saveToCassandra("testKeySpace", "testColumnFamily")
  }
}
object TestApp extends App {
  val start = System.currentTimeMillis()
  TestRepo.insertList(Utility.generateRandomData())
  val end = System.currentTimeMillis()
  val timeDiff = end-start
  println("Difference (in millis)= "+timeDiff)
}

當我使用上述方法(具有100個實體的列表)插入時,需要300-1100 milliseconds 我嘗試使用幻像庫插入相同的數據。 它只需要不到20-40 milliseconds

任何人都可以告訴我為什么火花連接器花費這么多時間插入? 我在代碼中做錯了什么或者不建議使用spark-cassandra連接器進行插入操作?

看起來你在你的計時中包含並行化操作。 此外,由於您的spark工作程序在與Cassandra不同的計算機上運行,​​因此saveToCassandra操作將通過網絡進行寫入。

嘗試配置系統以在Cassandra節點上運行spark worker。 然后在單獨的步驟中創建RDD並在其上調用count()之類的操作以將數據加載到內存中。 此外,您可能希望持久化()或緩存()RDD以確保它保留在內存中以進行測試。

然后只計算緩存的RDD的saveToCassandra。

您可能還想查看Cassandra連接器提供的repartitionByCassandraReplica方法。 這將根據寫入需要去的Cassandra節點對RDD中的數據進行分區。 通過這種方式,您可以利用數據局部性,並且通常避免在網絡上進行寫入和隨機播放。

您的“基准”存在一些嚴重問題:

  1. 您的數據集非常小,以至於您只測量作業設置時間。 在單個節點上保存100個實體應該是單毫秒的順序,而不是秒。 另外,保存100個實體使JVM無法編譯您運行的代碼以優化機器代碼。
  2. 您在測量中包含了火花上下文初始化。 JVM懶惰地加載類,因此在測量開始后真正調用了spark初始化的代碼。 這是一個非常昂貴的元素,通常每個整個火花應用只執行一次,甚至不是每個工作。
  3. 您每次啟動時只執行一次測量。 這意味着您甚至會錯誤地測量spark ctx設置和作業設置時間,因為JVM必須首次加載所有類,而Hotspot可能沒有機會啟動。

總而言之,您很可能主要測量類加載時間,這取決於加載的類的大小和數量。 Spark是一個非常大的東西,加載幾百毫秒並不奇怪。

要正確測量插入性能:

  • 使用更大的數據集
  • 從測量中排除一次性設置
  • 多次運行共享相同的火花上下文並丟棄一些初始上下文,直到達到穩態性能。

BTW如果啟用調試日志記錄級別,連接器將記錄執行程序日志中每個分區的插入時間。

暫無
暫無

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

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