我有一个配置2个数据流的pyspark应用程序:

数据流A)从kafka读取(主题1和2)->合并主题DStreams->处理->输出到REDIS。

数据流B)从kafka读取(主题3、4和5)->合并主题DStreams->处理->输出到相同的REDIS。

只有配置了其中之一,我才能在REDIS中获取数据,但不能同时配置两者。

实际上,即使我将REDIS输出更改为pprint,也会发生这种情况。仅当两个流程中的一个处于 Activity 状态时,我才输出输出。

我缺少什么?

最佳答案

问题是可用的执行线程数。

Spark文档说每个接收器都使用一个专用线程来获取数据。我在本地模式下以主URL为“local [*]”运行此应用程序,这为我提供了4个线程,因为我的PC具有4个内核。

当我的应用程序配置要读取的5个不同的kafka主题时,我至少需要6个线程(驱动程序为5 + 1)才能运行程序。因为我只有4个,并且DStreams在下游合并,所以计算永远不会开始。

解决方案:MASTER_URL = local[10]

07-24 18:30
查看更多