2017-09-04 88 views
0

我試圖使用從Datastax火花卡桑德拉連接器(V2.0.2,星火V2.0.0):卡桑德拉全錶轉儲到HDFS

val df = sparkSession.sparkContext.cassandraTable[MyRec](keyspace, tableName).toDF() 
df.write.format("orc").save(hdfsLocation) 

它看起來非常簡單,一會工作得很好但我開始這樣的例外:

Caused by: com.datastax.driver.core.exceptions.ReadFailureException: 
    Cassandra failure during read query at consistency LOCAL_ONE (1 
responses were required but only 0 replica responded, 1 failed) 
... 
at com.datastax.spark.connector.rdd.CassandraTableScanRDD.com$datastax$ 
spark$connector$rdd$CassandraTableScanRDD$$fetchTokenRange(
CassandraTableScanRDD.scala:342) 

增加spark.cassandra.read.timeout_msspark.cassandra.connection.timeout_ms和 減少spark.cassandra.input.fetch.size_in_rows沒有幫助。也讀取一致性級別。

我在桌子上做了一個重大的壓縮,它沒有幫助。 由於這是一個產品。 DB我無法調整服務器端參數,如 tombstone_failure_threshold,建議爲here

將Cassandra(v3.7.0)中的完整表加載到HDFS(Hive)的最有效方法是什麼?

+1

我覺得這裏的問題是卡桑德拉側,而不是火花,也許這是你面對什麼:https://groups.google.com/a/lists.datastax.com/forum/ #!topic/spark-connector-user/ZKyACqzoBw4 – ALincoln

+0

Thx爲鏈接。我同意這是一個Cassandra問題,很可能是因爲墓碑。還有什麼辦法可以繼續完全拋棄並避免這樣的問題嗎?使用CqlInputFormat的MR作業會更高效嗎? – Bruckwald

+0

您是否瞭解C *和Hive的供應商? (Apache/HDP/CDH) – saitejalakkimsetty

回答

1

也許,如果它是可用性問題,你能做的最好的是增加重試spark.cassandra.query.retry.count

的數量和降低每讀取閾值的頁面

spark.cassandra.input.fetch.size_in_rows

基本上,如果這是即將到來在負載的中間,問題在於Cassandra節點被重載,因此降低吞吐量是解決此問題的唯一方法。

另一種選擇是降低執行程序核心數spark.cores.max,這也會降低吞吐量。

https://github.com/datastax/spark-cassandra-connector/blob/master/doc/reference.md

+0

感謝您的輸入。你能說出這些參數嗎? 「Cassandra節點正在重載」這是否意味着如果有很多墓碑/壓縮任務在不同的密鑰空間上運行,我可以遇到此問題? – Bruckwald

+0

我添加了參數名稱。重載一個C *節點可能來自很多後臺任務或者只是兩個同時發生的請求(這就是爲什麼限制執行程序內核的數量可以提供幫助)。另一個解決方案是增加RF,以便請求具有更多可行的讀取目標,這將增加羣集的潛在吞吐量。 – RussS