正如Hadoop权威指南中提到的,在提交MR作业期间,输入拆分被计算出来,然后被复制到JobTracker的文件系统中。但是,如果数据真的很大,这对我来说没有意义。此副本将花费大量时间,而且,如果运行 JobTracker 的节点没有足够的空间,此副本会发生什么情况?请澄清这一处理框架。提前谢谢。
InputSplits 只是块边界的逻辑抽象。通常,输入拆分包含以下信息:
- 文件的路径
- 块起始位置
- 文件中要处理的字节数
- 包含正在处理的文件块的主机列表
对于给定的作业,JobClient 有责任通过调用内部调用InputFormat
getSplits
方法writeSplits
计算输入拆分信息(这只是上述FileSplit
对象的 ArrayList(,一旦计算出此信息,这些信息就会复制到 HDFS,JobTracker 将从那里读取并根据数据位置调度映射器。
如果您对拆分本身的计算方式感兴趣,请查看 FileInputFormat.getSplits 方法。