我有一个关于风暴功能的问题。假设我有一个喷口,它正在读取一个csv文件并逐块发出记录。也就是说,它一次向螺栓发出100条记录。我的问题是,当bolt接收到一个块时,它是只发送给一个执行器,还是为了并行而在不同的执行器之间进行划分。注:螺栓有5个执行器。
dgsult0t1#
executor = Threads 如果没有显式配置任务(示例)的数量,则默认情况下,storm将为每个执行器运行1个任务。所以实际发生的是有5个不同的螺栓运行示例,由5个不同的线程处理(1个线程处理1个任务)。因此,理想情况下,您发出的元组将由5个不同的线程同时处理
executor = Threads
z0qdvdin2#
你说的“它一次发出100张唱片”是什么意思?这是否意味着,一个元组包含100行csv?或者在一个单独的窗口中发出100个元组(每个元组包含一个csv行) nextTuple() 打电话。对于第一种情况,storm不能在一个元组内并行化这100行。storm只能向不同的执行器发送不同的元组。对于第二种情况,storm将把100个元组发送给不同的执行器(当然,这取决于您选择的连接模式)。一句话:在一次调用中发出多个元组被认为是不好的做法 nextTuple() . 如果 nextTuple() 由于任何原因阻塞,喷口螺纹阻塞,无法(例如)对进料做出React acks . 最佳实践是,为每个对的调用发出一个元组 nextTuple() . 如果没有可发射的元组,则应返回(不发射)而不是阻塞,以等待元组可用。
nextTuple()
acks
2条答案
按热度按时间dgsult0t1#
executor = Threads
如果没有显式配置任务(示例)的数量,则默认情况下,storm将为每个执行器运行1个任务。所以实际发生的是有5个不同的螺栓运行示例,由5个不同的线程处理(1个线程处理1个任务)。因此,理想情况下,您发出的元组将由5个不同的线程同时处理
z0qdvdin2#
你说的“它一次发出100张唱片”是什么意思?这是否意味着,一个元组包含100行csv?或者在一个单独的窗口中发出100个元组(每个元组包含一个csv行)
nextTuple()
打电话。对于第一种情况,storm不能在一个元组内并行化这100行。storm只能向不同的执行器发送不同的元组。
对于第二种情况,storm将把100个元组发送给不同的执行器(当然,这取决于您选择的连接模式)。
一句话:在一次调用中发出多个元组被认为是不好的做法
nextTuple()
. 如果nextTuple()
由于任何原因阻塞,喷口螺纹阻塞,无法(例如)对进料做出Reactacks
. 最佳实践是,为每个对的调用发出一个元组nextTuple()
. 如果没有可发射的元组,则应返回(不发射)而不是阻塞,以等待元组可用。