返回介绍

MapReduce InputSplit

发布于 2024-06-23 12:22:11 字数 1191 浏览 0 评论 0 收藏 0

mapreduce inputsplit原理

Hadoop InputSplit

InputSplit 是数据的一种逻辑表示,即我们所说的文件的数据分片。每个分片由一个 mapper 处理,当然,mapper 并非直接对数据分片进行处理,在 mapper 处理数据分片之前,数据分片会被转换成记录,即键值对。mapper 直接操作键值对。

MapReduce InputSplit 的长度是以字节来度量的,每个 InputSplit 都有相应的存储位置(主机名称)。MapReduce 利用分片存储位置,把 map 任务调度到距离数据尽可能近的地方执行。Map 任务的执行优先级取决于分片的大小,分片大的最先执行,主要为了最小化作业的运行时间。需要注意的是,InputSplit,即数据分片并不真正存储输入数据,它只是数据的一种引用,即一种数据的逻辑表示

我们并不需要直接处理 InputSplit,因为他们是由 InputFormat 创建的( InputFormat 创建 InputSplit 并把它转换成键值对)。默认情况下,FileInputFormat 把文件分割成若干个块,每个块大小 128MB(和 HDFS 的块大小一样),这个默认值可以在配置文件 mapred-site.xml 修改,参数为 mapred.min.split.size。也可以在提交作业的时候修改该值。另外,可以定制化开发 InputFormat,来决定分割文件的方式。

Hadoop 如何修改数据分片大小

我们可以在 MapReduce 程序根据数据的大小来调整分片大小。修改 mapred.min.split.size 这个参数即可。

客户端(运行 Job 的节点)调用 getSplit() 方法为一个作业计算分片大小,然后发送到 application master,它根据数据分片的存储位置对处理该数据分片的 map 任务进行调度。接下来 map 任务把分片传递给 InputFormat 的 createRecordReader() 方法以便获取分片的 RecordReader 对象,而 RecordReader 对象将生成记录,也就是键值对,然后传递给 map 函数。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文