kafka,spark大型csv文件(4go)

cs7cruho  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(352)

我正在开发一个与Kafka和Spark,这将批处理和流集成通道。
对于批处理,我输入了巨大的csv文件(4gb)。
我在考虑两个解决方案:
将整个文件发送到文件系统并向kafka发送一条带有文件地址的消息,spark作业将从fs读取文件并打开它。
在单元消息中剪切kafka之前的文件(使用apachenifi)并发送以将批处理视为spark作业中的流处理。
你认为最好的解决办法是什么?
谢谢

toiithl6

toiithl61#

如果要编写代码将文件放在文件系统中,则可以使用相同的代码将spark作业提交给作业跟踪器。作业跟踪器将成为任务队列,并将提交的文件作为spark作业进行处理。
这将是一种更简单的实现#1的方法,但它也有缺点。主要缺点是您必须调整资源分配,以确保在数据集非常大的情况下不会分配不足。如果为作业过度分配资源,则在任务等待资源时,任务队列可能会增长。优点是没有太多的运动部件需要维护和排除故障。
使用nifi来削减一个大文件,并让spark将这些片段作为一个流来处理,可能会更容易更有效地利用集群资源。如果您的集群在此数据摄取之上为随机作业提供服务,那么这可能是更好的方法。这里的缺点可能是,您需要做额外的工作来在一个事务上下文中处理单个文件的所有部分,您可能需要做一些额外的工作来确保不会丢失kafka提供的数据,等等。
如果这是一个批处理操作,也许方法2会被认为是过度杀戮。读取csv文件的设置似乎相当复杂,即使它可能是一个非常大的文件。如果您对csv文件的速度、csv的许多不断变化的源代码或高错误率有问题,那么nifi将非常有意义。
很难提出最好的解决办法。如果是我的话,我会先从1的变体开始让它工作。然后,根据您的方法在处理输入文件中的异常时如何以可接受的精确度执行,引入更多的系统部分,从而使其工作得更好。您可能会发现,最大的问题是在大规模摄取过程中试图识别输入文件中的错误。

相关问题