2016-04-15 166 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