我正在研究来自 Hadoop 的 TotalOrderPartioner,但我不太了解分区文件的创建方式和位置。
目前我的理解是
InputSampler.Sampler sampler = new InputSampler.RandomSampler(0.1,10000); InputSampler.writePartitionFile(job, sampler);
如果我使用适当的输入和输出路径配置作业对象并使用独立程序运行它,它应该在输出路径上创建一个分区文件。
创建此分区文件的过程将在客户端机器上进行,因此用于创建此文件的样本和拆分将从各种数据节点流式传输到客户端机器上,然后进行排序,然后创建分区文件.
完成此操作后,我将能够使用此分区文件作为 TotalOrderPartitioner 的输入,用于各种其他作业,这些作业使用与用于生成此分区文件的输入源类似的输入源
有人可以确认我的理解吗?
最佳答案
当您实现一个 mapReduce 作业时,至少有一个 Mapper、一个 Reducer 和一个配置和执行该作业的类。在最后一个类中,您放置了创建拆分文件(即分区文件)的代码。
这个类的逻辑:
- 使用 mapper 和 reducer 以及其他属性配置作业,然后
- 创建分区文件,最后
- 提交作业执行
这种方法使分区文件的创建成为整个流程的一部分,并使作业提交成为一步操作。
关于java - hadoop中的分区文件是如何创建的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21995069/