我有一个配置2个数据流的pyspark应用程序:
数据流A)从kafka读取(主题1和2) - >合并主题DStreams - >做东西 - >输出到REDIS。
数据流B)从kafka读取(主题3,4和5) - >合并主题DStreams - >做东西 - >输出到同一个REDIS。
我只能在配置其中一个数据时才能获取REDIS内的数据,但不能同时获取这两个数据。
实际上,即使我将REDIS输出更改为pprint,也会发生这种情况。如果两个流中只有一个是活动的,我只会打印输出。
我缺少什么?
答案 0 :(得分:1)
问题是可用的执行线程数。
Spark文档说每个接收者使用一个专用线程来获取数据。我在本地模式下运行这个应用程序,主URL为“local [*]”,因为我的PC有4个核心,所以给了我4个线程。
由于我的应用程序配置了5个不同的kafka主题来读取,我需要至少6个线程(5 + 1用于驱动程序)才能运行我的程序。因为我只有4,并且DStreams在下游合并,所以计算永远不会开始。
解决方案:MASTER_URL = local[10]
答案 1 :(得分:0)
您是否尝试加入2 Dstream我的意思是第一个流点指向topicA,返回(K,V),第二个DStream监控topicB返回(K,V1)。如果是,则可以使用join()方法加入2 DStream,该方法将返回(K(V,V1))。
或者你想在创建流(KafkaUtils.createStream())时传递TopicA,TopicB,然后将(K,V)后面的(K,V1)插入Redis?