2015-09-16 51 views
0

我們正在使用一個應用程序服務器和3節點Cassandra集羣工作應用程序。最近我們獲得了新的要求,即將大量CSV文件導入到我們現有的數據庫在保存到Cassandra之前,需要對CSV中的行進行轉換。我們的基礎架構部署在Amazon AWS中。使用cassandra的現有應用程序中的Spark集成

有幾個問題:

  1. 它看起來對我們Spark是正確的工具的工作,因爲它有Spark Cassandra ConnectorSpark CSV plugin。我們是否正確?
  2. 也許是一個新手Spark問題,但在我們的部署場景中,應該在哪裏部署應用程序?我們的想法是在其中一個數據庫節點上安裝Spark Master,Spark工作人員分佈在3個數據庫節點和導入器應用程序的同一節點上。最好有一些命令行界面來導入CSV,後者可以發展到API/Web界面。
  3. 我們可以把應用程序服務器上的導入器應用程序和網絡懲罰?
  4. 我們可以使用Spark在這種情況下對卡桑德拉任命爲好,我們如何能夠集成到現有的應用程序,它已經使用了常規的Datastax Java驅動程序與應用程序一起,如果需要

回答

1

首先的聯接,請記住,如果您要從Cassandra加載數據,而不是從外部來源加載數據,Spark Cassandra Connector將僅對數據局部性有用。因此,要加載CSV文件,您必須使用共享存儲或HDFS等將其傳輸到您的Spark工作人員,這意味着無論您在哪裏放置導入程序應用程序,它都會將數據流式傳輸到Spark Workers。

我們解決您的觀點:

  1. 您即將星火正確的,但不正確的約星火卡桑德拉連接器,因爲它是當加載從卡桑德拉的數據(這可能是案件的唯一有用#4當你需要在外部數據和卡桑德拉數據之間進行連接時),否則它不會給你任何明顯的幫助。

  2. 您的進口商應用程序將部署到您的羣集。在你描述的場景中,這是一個獨立的Spark Cluster。因此,您需要打包應用程序,然後在您的主節點上使用spark-submit命令來部署您的應用程序。使用CSV文件位置的命令行參數,可以將應用程序作爲普通的命令行工具進行部署和運行。

  3. 如#2所述,您的導入器應用程序將從您的主節點部署到您的所有工作人員。這裏重要的是你的CSV文件的位置。部署它的一種簡單方法是將文件分割到工作節點上(使用相同的本地文件路徑),並將其作爲本地文件加載。但請注意,如果節點死亡,您將丟失本地CSV部分。爲了獲得更可靠的分發,您可以將CSV文件放在HDFS羣集上,然後從那裏讀取。

  4. 使用Spark Cassandra Connector,您可以將Cassandra中的數據加載到相應本地節點上的RDD中,然後使用通過加載CSV數據創建的RDD,執行連接並將結果寫回Cassandra如果你需要。您可以使用Spark Cassandra Connector作爲更高級別的工具來執行讀取和寫入操作,因此無需直接使用Java驅動程序(因爲連接器始終構建於其上)。

+0

感謝的答案,也許我並不清楚,我需要從CSV數據加載到Cassandra的,所以對數字1,我​​們需要的連接器,以及對處理後的數據,以現有的卡桑德拉表從CSV保存。並且第4號完全獨立於CSV導入,我們目前加入並在應用程序級別排序的表,所以我想知道也會引發這方面的幫助 –

+0

對於#4,使用連接器可以輕鬆地將數據加載到RDD中,然後在RDD上使用Spark Joins http://spark.apache.org/docs/1.4.1/programming-guide.html#JoinLink ...對於#1,我的意思是說你可以用一個簡單的Java驅動程序封裝來處理與Cassandra的本地連接,但是連接器當然會支持這個盒子,這就是爲什麼我說這不是真正意義上的幫助。 – Emam

+0

只有一件事情關於#4對我來說並不清楚。我現有的應用程序正在從其他服務器上的Cassandra讀取數據,並通過其餘API進行公開。 Spark Cassandra連接器和連接作業必須部署到Spark Cluster,或者我們可以遠程使用JOINS(例如通過在現有應用程序中創建SparkContext來實現某種RPC)? –

相關問題