【问题标题】:Processing large number of text files in java在java中处理大量文本文件
【发布时间】:2015-08-27 10:56:08
【问题描述】:

我正在开发一个应用程序,它每天必须读取和处理 ~29K 文件 (~500GB)。这些文件将采用压缩格式并在 ftp 上可用。

我做了什么:我打算从 ftp 下载文件,解压缩并使用多线程处理,这大大减少了处理时间(当活动线程数固定为一个较小的数字)。我已经编写了一些代码并针对 ~3.5K 文件(~32GB)进行了测试。详情在这里:https://stackoverflow.com/a/32247100/3737258

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

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

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

【问题讨论】:

    标签: java file file-io ftp parallel-processing


    【解决方案1】:

    您应该分析您的应用程序并查看当前瓶颈在哪里,然后解决它。继续进行,直到达到所需的速度或无法进一步优化。

    例如:

    • 也许你解压到磁盘。这很慢,要在内存中完成。
    • 可能存在大量垃圾收集。看看你是否可以重复使用东西
    • 也许网络是瓶颈……等等。

    例如,您可以使用visualvm

    【讨论】:

      【解决方案2】:

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

      一些想法:

      • 您可以并行化处理读取信息所需的过程。在那里,您可以向一个线程(从池中)提供多条读取行,该线程按顺序处理这些行
      • 使用java.nio 代替java.io 请参阅:Java NIO FileChannel versus FileOutputstream performance / usefulness
      • 使用profiler
      • 无需分析器,只需编写日志消息并测量 应用程序多个部分的持续时间
      • 优化硬件(使用 SSD 驱动器、使用块大小过期、文件系统等)

      【讨论】:

        【解决方案3】:

        如果您对并行计算感兴趣,请尝试使用 Apache spark,它旨在满足您的需求。

        【讨论】:

          猜你喜欢
          • 2014-06-23
          • 1970-01-01
          • 2013-10-25
          • 2015-03-08
          • 2011-05-16
          • 2012-05-14
          • 1970-01-01
          • 1970-01-01
          • 2011-12-16
          相关资源
          最近更新 更多