【发布时间】:2016-04-10 23:05:41
【问题描述】:
我有一个大约 2 GB 的输入文件。它包含从 1 到 9999 的数字(可能重复),并且以空格分隔。我想以小块读取文件(例如 100000 或 20000 的块)。我应该采取什么方法?
我计划以分布式方式在不同节点上处理这些数据块。我不能使用 HDFS 或任何其他会自动分块数据的文件系统。
【问题讨论】:
标签: java algorithm distributed-computing
我有一个大约 2 GB 的输入文件。它包含从 1 到 9999 的数字(可能重复),并且以空格分隔。我想以小块读取文件(例如 100000 或 20000 的块)。我应该采取什么方法?
我计划以分布式方式在不同节点上处理这些数据块。我不能使用 HDFS 或任何其他会自动分块数据的文件系统。
【问题讨论】:
标签: java algorithm distributed-computing
当您在 HDFS 中存储 2GB 数据时,它将被分解为块。 HDFS 的默认块大小为 64MB。您可以将其设置为您希望的任何大小。例如,如果您将大小设置为 100MB,您的数据将被分解为大约 20 个块。
另一方面,当您通过 MapReduce 处理数据时,您可以通过定义要使用的映射器数量来决定要处理的数据量。您可以通过设置拆分大小来做到这一点。
例如,如果您的 HDFS 中有 20 个大小为 100MB 的块,如前所述,如果您没有设置任何拆分大小,Hadoop 会为您计算并分配 20 个映射器。但是,如果您指定,例如拆分大小为 25MB,那么您将有 80 个映射器处理您的数据。
需要注意的是,这只是一个例子。实际上,更多的映射器并不意味着更快的处理时间。您必须考虑优化以获得最佳使用数量的拆分。
希望这会有所帮助。
【讨论】: