gpt4 book ai didi

apache-storm - Storm spout - 如何使用 >1 个线程仅从文本文件中读取所有行一次?

转载 作者:行者123 更新时间:2023-12-04 16:44:23 26 4
gpt4 key购买 nike

Storm 拓扑包含一个使用 >1 个线程运行的 Spout 组件。
例如

 builder.setSpout("lines", new TestLineSpout(), 2);

Spout(打开函数)打开并读取文本文件的所有行并
nextTuple 将每一行发送到一个 bolt。

当运行 2 个线程时,对于 spout,文件的每一行都被读取两次。

我是 Storm 的新手,想知道处理这个问题的最佳方法吗?
我可以将线程数减少到 1 或修改喷口,以便每个线程
读取不同的行 - 或者做(如何)我需要使用 TopologyContext
范围?
不确定我是否错过了实现这一点的“ Storm ”方式?

最佳答案

西蒙,

Storm 没有并行读取存储在本地文件系统上的文件的功能。您可以编写一个执行此操作的 spout,但除了小型测试和实验目的之外,这会与 Storm 的架构发生冲突。

这里有一些提示:

  • Storm 旨在处理实时接收的数据流。如果您已经将所有数据最终确定并存储在某个地方,那么 Storm 强加的限制只会给您带来麻烦。面向批处理的解决方案,如 Yarn map reduce 或 Spark 更容易。
  • Storm 是分布式的,每个工作线程(VM)有很多线程,每个从节点有很多工作线程,还有很多(很多)从节点。在这样的分布式架构中,没有“本地文件系统上的单个文件”的概念。此外,出于可扩展性的原因,一个核心思想是让所有这些工作人员独立行动,而无需与每个订单进行沟通。这就是为什么我们通常使用分布式解决方案将数据馈送到 Storm,例如 Kafka 或 0mq。
  • 在分布式单词中我能想到的最接近本地文件系统上的文件的是 HDFS 文件夹。该模式是让所有数据生产者写入一个文件夹,每个生产者写入一个具有唯一生成名称的文件,而使用文件夹的数据读取器将读取其中的所有文件,无论其名称如何。但同样,如果你这样做,我认为传统的 map reduce 或 spark 会更容易。

  • 我希望这会有所帮助:D

    关于apache-storm - Storm spout - 如何使用 >1 个线程仅从文本文件中读取所有行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23901410/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com