【发布时间】:2012-05-24 13:38:59
【问题描述】:
只是想知道除了unix“split”之外,是否有更快的方法将文件拆分为N个块。
基本上我有大文件,我想将它们分成更小的块并并行处理每个块。
【问题讨论】:
-
不确定在这个问题上什么要求 -1 但没关系
标签: performance unix split bigdata
只是想知道除了unix“split”之外,是否有更快的方法将文件拆分为N个块。
基本上我有大文件,我想将它们分成更小的块并并行处理每个块。
【问题讨论】:
标签: performance unix split bigdata
鉴于这是一个操作系统实用程序,我倾向于认为它已针对最佳性能进行了优化。
您可以查看this question(或执行man -k split 或man split)来查找您可以使用的相关命令,而不是split。
如果您正在考虑用 C 语言实现自己的解决方案,那么我建议您针对自己的特定系统/环境和一些示例数据运行一些基准测试,然后确定要使用的工具。
注意:如果您不打算定期执行此操作,那么考虑这么多可能不值得您花时间,请继续使用满足您需要的工具它要做(在这种情况下split)
【讨论】:
我假设您使用的是split -b,它比按行拆分更节省 CPU,但仍会读取整个输入文件并将其写入每个文件。如果split 这部分执行的串行性质是您的瓶颈,您可以使用dd 并行提取文件的块。对于每个并行进程,您将需要一个不同的 dd 命令。这是一个示例命令行(假设the_input_file 是一个大文件,它从中间提取了一点):
dd skip=400 count=1 if=the_input_file bs=512 of=_output
要完成这项工作,您需要选择适当的 count 和 bs 值(上面的值非常小)。每个工作人员还需要选择不同的skip 值,这样块就不会重叠。但这是有效的; dd 通过查找操作实现 skip。
当然,这仍然不如以一种可以直接读取输入文件的指定块并与其他类似的消费者进程并行的方式实现数据消费者进程的效率。但我想如果你能做到这一点,你就不会问这个问题了。
【讨论】: