java - 处理小文件mapreducehadoop

标签 java hadoop mapreduce

我有一个 456kb 文件,该文件正在从 hdfs 中读取,并将其作为映射器函数的输入。每行都包含一个整数,我正在为其下载一些文件并将它们存储在本地系统上。我已经在两节点集群上设置了hadoop,并且分割大小从程序中更改为打开8个映射器:

    Configuration configuration = new Configuration();

    configuration.setLong("mapred.max.split.size", 60000L);
    configuration.setLong("mapred.min.split.size", 60000L);

创建了 8 个映射器,但在两台服务器上下载了相同的数据,我认为这是因为 block 大小仍设置为默认 256mb 并且输入文件被处理两次。所以我的问题是我们可以使用 MapReduce 处理小尺寸文件吗?

最佳答案

如果您下载文件需要一些时间,您可能会遭受所谓的 Hadoop 推测执行的困扰,该功能默认启用。但这只是一个猜测,因为您说您多次下载相同的文件。

通过推测执行,可以并行处理同一输入多次,以利用机器能力的差异。由于作业中的大部分任务即将结束,Hadoop 平台将在多个没有其他工作要执行的节点上调度剩余任务的冗余副本。

您可以通过设置mapred.map.tasks.speculative.executionmapred.reduce.tasks.speculative.execution JobConf来禁用映射器和化简器的推测执行选项分别为 false。

关于java - 处理小文件mapreducehadoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169203/

相关文章:

java - 挪威数字的正则表达式

Java - 定义用于创建对象的行,而不是仅使用方法

java - 我可以使用 TestFX 和 JUnit 测试舞台按钮或警报对话框吗?

java - Java MapReduce-如何从Reducer类的不可写总和中输出前10个

java - hadoop映射器静态初始化

java - USACO 培训 – 文本提交给我一个错误 : "Error:_Main_method_not_found_in_class_test"

java - 如何通过部分行键过滤HBase的扫描?

hadoop - 为 hadoop 估算硬件

java - YARN(Hadoop)中的容器分配代码

hadoop - 为 AvroParquetInputFormat 设置多个 projectionSchemas 的问题