2016-01-21 42 views
0

首先,我在Amazon EMR上使用Spark 1.5.2,並將Amazon RDS用於我的postgres數據庫。Spark在寫入時是否可以使用SQL數據庫?

我目前正致力於讓Spark將其結果寫入postgres數據庫,我通過使用Spark的jdbc API來完成這項工作。雖然它正常工作,但我擔心的是,如果我在Spark運行時嘗試使用psql連接到數據庫,然後嘗試從Spark寫入的表中讀取數據,它會告訴我沒有任何已寫入的行。這一直持續到Spark完成,然後突然所有的行都出現在db中。

這讓我很擔心,因爲最終設置應該是定期運行Spark腳本,並將更多數據寫入數據庫,而網站應該使用該數據庫。這是否意味着在Spark運行時我無法查詢數據庫?

你會猜這是什麼問題?我認爲這可能是一個更大的實例用於數據庫的問題(我最初使用最小和最便宜的 - db.t2.micro),但我得到了與db.m4.xlarge類實例相同的問題(儘管時間完成步驟減半)。

+6

學習基礎的時間:[事務隔離](http://www.postgresql.org/docs/9.1/static/transaction-iso.html) –

+2

Spark可能使用一個事務來插入所有數據。問題不在於Spark在寫入時無法讀取任何*,而是因爲當您讀取時,尚未提交任何數據。 – deceze

+1

@deceze實際上,每個分區都在其自己的事務中單獨保存。 – zero323

回答

1

首先,其他海報是正確的。 Spark正在使用事務寫入數據庫,因此在事務提交之前您不會看到任何數據。其次,如果您確實需要以較小的批次插入數據或作爲單獨的寫入,則可以始終編寫自己的JDBC代碼並使用map()操作,但這可能不是一個好主意(但我不知道你的用例是什麼,所以也許有一個很好的理由你會想要這個)。

+0

謝謝你的回答!正如其他海報所指出的那樣,我仍然需要學習基礎知識,但在一個狹窄的地方,我必須使用技術,我真的沒有準備好使用,所以我不得不提出愚蠢的問題堆棧溢出。不,我不需要小批量書寫,我關心的是數據庫在寫作發生時是否實際可用,而且是這樣。所以我不會編寫自己的JDBC代碼,因爲我很可能會把它搞砸,而且這不是必須的。 –

相關問題