在java中处理大量文本文件

在java中处理大量文本文件,java,file,file-io,ftp,parallel-processing,Java,File,File Io,Ftp,Parallel Processing,我正在开发一个应用程序,它每天都要读取和处理约29K个文件(~500GB)。文件将采用压缩格式,并可通过ftp访问 我所做的:我计划从ftp下载文件并解压缩,然后使用多线程进行处理,这大大减少了处理时间(当活动线程的数量固定为较小的数字时)。我已经编写了一些代码,并对~3.5K文件(~32GB)进行了测试。详情如下: 但是,大约29K个文件的估计处理时间似乎仍然很长 我在寻找什么:任何可以帮助我将~29K文件~500GB的处理时间缩短到3-4小时的建议/解决方案 请注意,必须逐行读取每个文件,并

我正在开发一个应用程序,它每天都要读取和处理约29K个文件(~500GB)。文件将采用压缩格式,并可通过ftp访问

我所做的:我计划从ftp下载文件并解压缩,然后使用多线程进行处理,这大大减少了处理时间(当活动线程的数量固定为较小的数字时)。我已经编写了一些代码,并对~3.5K文件(~32GB)进行了测试。详情如下:

但是,大约29K个文件的估计处理时间似乎仍然很长

我在寻找什么:任何可以帮助我将~29K文件~500GB的处理时间缩短到3-4小时的建议/解决方案


请注意,必须逐行读取每个文件,并且每行都必须写入一个新文件并进行一些修改(删除一些信息并添加一些新信息)。

您应该配置应用程序,查看当前的瓶颈所在,并修复它。继续,直到达到所需速度或无法进一步优化

例如:

  • 也许你可以解压到磁盘。这很慢,在内存中执行
  • 也许有大量的垃圾收集。看看你能不能重复使用这些东西
  • 也许网络是瓶颈。。等等

例如,您可以使用。

很难为您的问题提供一个解决方案,因为您可能只是达到了硬件限制

一些想法:

  • 您可以并行化处理读取信息所需的进程。在那里,您可以为一个线程(池外)提供多个读取行,该线程按顺序处理这些读取行
  • 使用
    java.nio
    而不是
    java.io
    请参见:
  • 使用
  • 不使用探查器,只需编写日志消息并测量 应用程序多个部分的持续时间
  • 优化硬件(使用SSD驱动器、块大小过期、文件系统等)

如果您对并行计算感兴趣,请尝试ApacheSpark,它正是您想要的