Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中重新划分文件中的每一行_Java_Multithreading_Iostream_Fork Join - Fatal编程技术网

如何在Java中重新划分文件中的每一行

如何在Java中重新划分文件中的每一行,java,multithreading,iostream,fork-join,Java,Multithreading,Iostream,Fork Join,我正在设计一个批量数据加载实用程序,需要非常快。输入是某种格式的一个或多个文件,其中包含要加载到高性能分布式系统的数据。为了保持简单,让我们假设有一个文件,但是这个想法应该很容易推广到多个磁盘上的多个输入文件 我们知道硬盘是串行设备,只有在执行顺序IOs时才能实现最大性能。后端分布式系统功能更强大,允许我同时从多个磁盘加载数据 我的想法是这样的: 我每个文件有一个生产者线程,它读取大的块,解析块以识别单个记录,然后“重新分区并发送”每个记录到其关联的内存容器中。重新分区将基于每个记录的一个或多个

我正在设计一个批量数据加载实用程序,需要非常快。输入是某种格式的一个或多个文件,其中包含要加载到高性能分布式系统的数据。为了保持简单,让我们假设有一个文件,但是这个想法应该很容易推广到多个磁盘上的多个输入文件

我们知道硬盘是串行设备,只有在执行顺序IOs时才能实现最大性能。后端分布式系统功能更强大,允许我同时从多个磁盘加载数据

我的想法是这样的:

  • 我每个文件有一个生产者线程,它读取大的块,解析块以识别单个记录,然后“重新分区并发送”每个记录到其关联的内存容器中。重新分区将基于每个记录的一个或多个属性(考虑基于每个人的ID重新分区)

  • 内存中有多个容器保存中间记录。每个容器都绑定到一个使用者线程,该线程一次从其容器中获取一条记录,然后将其加载到后端系统中

  • 我的问题是:

    • 如何设计一个函数来“重新分区并发送”每条记录到其关联的内存容器中

    • 如果每个使用者线程在其容器中对一批记录进行排序,然后在一个调用中加载它们,会怎么样?内存中容器的良好数据结构是什么


    请分享你的专业知识。如果你能详细说明并提供一些伪代码,那将是非常棒的!谢谢。

    这很像一项任务。如果您可以将类似Hadoop的基础设施安装到分布式系统中,这应该很容易做到

    在缺乏任何相反证据的情况下,假设标准集合可以很好地完成任务。编写它,然后评估性能。然后决定哪些需要改进,如果有的话。是的,这就像一个典型的MapReduce任务。但是,我不确定当map步骤仍在运行时reduce步骤是否可以启动。另一个原因是类似Hadoop的基础设施对于这种情况来说可能太重了。您知道有哪些轻量级的MapReduce框架可以在客户机的内存中运行吗?