2016-04-15 163 views
2

是否有可能從spark中並行寫入Redis?Spark/Scala並行寫入redis

(或:如何從火花很快寫出鍵/列表數萬)

目前,我在序列密鑰寫入Redis的,並且它採取永遠。我需要編寫約90000個列表(長度爲2-2000)。速度非常重要。目前,它的採購時間爲1小時。 Redis的傳統基準測試每秒鐘聲稱數以千計的Redis寫入,但在我的管道中,我並沒有接近那個地方。

任何幫助表示讚賞。

+1

當我在twitter上問你 - 你的設置是什麼?單個redis?一個redis集羣? RLEC? –

+0

實際上只使用一個Redis。在mesos羣集中運行。 – BBischof

+0

該連接器經過優化,可以在Redis羣集上運行,其中每個火花節點都有一個本地redis節點,並且分區功能相匹配,因此您將始終寫入本地redis。你運行了多少個火花節點? –

回答

1

單個Redis實例在一個線程中運行,因此操作本質上是連續的。如果您有Redis羣集,則寫入數據的實例取決於從正在寫入的密鑰計算出的hash slot。這個散列函數(除其他外)確保負載在羣集中的所有Redis實例上分佈。如果您的集羣有N個實例,那麼您(至少)最多可以執行N個並行寫入。這是因爲每個羣集實例仍然是單個線程。合理的Spark Redis連接器應該有效地利用集羣。

無論採用哪種方式,Redis都非常快速,特別是如果您使用mass inserts