java - 用于大型文本文件的 Hadoop InputSplit

标签 java hadoop

在 hadoop 中,我想将一个文件(几乎)平均分配给每个映射器。该文件很大,我想使用在作业开始时定义的特定数量的映射器。现在我已经自定义了输入拆分,但我想确保如果我将文件拆分为两个(或多个拆分)我不会将一行切成两半,因为我希望每个映射器都有完整的行而不是断行。

所以问题是,我如何在每次创建期间获得文件拆分的大致大小,或者如果这不可能,我如何估计一个大文件的(几乎)相等文件拆分的数量,因为我没有限制' 想要在任何映射器实例中有任何虚线。

最佳答案

您所要求的一切都是 Map Reduce 中的默认行为。就像映射器总是处理完整的行一样。默认情况下,Map Reduce 努力在 st 个映射器之间平均分配负载。

您可以获得更多详细信息here你可以查看 InputSplits 段落。

还有这个答案here正如@Shaw 所链接的那样,讨论了如何准确处理跨 block 拆分的行的情况。

通过阅读 hadoop bible 思考应该消除你在这方面的大部分疑虑

关于java - 用于大型文本文件的 Hadoop InputSplit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23586740/

相关文章:

hadoop - 从 hadoop 中的映射器中消除重复的键/值对

java - 如何访问 Spring Soap 端点中的 SOAP header ?

java - 如何从 servlet 获取 JSP 的服务器文件路径?

java - Allure @Step 未出现在 allure 报告中(Selenide TestNG Gradle Allure)

Hadoop httpFS 总是返回 HTTP/1.1 404 Not Found

hadoop - Hbase HMaster 未运行

java - Glassfish 4 中 ManagedExecutorService 的设置被忽略

java - String = null 和 String.isEmpty 之间有什么区别?

date - 根据oozie中的日期创建输出文件

java - 无法在hadoop中使用dfs创建目录