五分钟深入 Hadoop 输入优化
当面试公司问起 Hadoop 经验时,我们当然不能只停留在 Mapper 干了什么、Reducer 干了什么。没有 Performance Tuning 怎么能显示出我们的高大上呢?
下面几篇文章,包子培训将深入浅出的讲解 advanced hadoop tuning. 力争让你在面试中滔滔不绝,震住你的面试官。:)
不对 input 做精心处理有可能彻底毁掉 Hadoop 的强大功能
大家还记得我们第一篇<5分钟零基础搞懂 Hadoop>中的例子吗?
我们把数据分别存贮在好多台机器上,然后让各台机器处理自己上的数据。
但是, 实际情况中有可能发生:
Host A 上数据超级多, 其他所有 Host B, C, D…上超级少。
假设每台机器处理数据的速度是一样的,比如 CPU、内存、硬盘性能一样,那么显然 host A 要比其他 host 花更多时间处理数据。这会造成当 host B,C,D…都处理完数据后,一直等待 host A 处理。
我们想一想, 如果可以让 host A 上的一些数据转移到 B,C,D…上,让所有 host 有同样多的数据,那我们的整个 Hadoop Job 就可以更快完成了!
企业从实际情况中总结的经验告诉我们,节省的时间不只几分钟,长的可以到几小时!
如果这个情况发生在 Hadoop 集群里,考虑到 Hadoop 中的每台机器需要在 mapper 中把处理结果传给 reduce 阶段,由于 host A 上的数据远多于其他 host, host A 花在处理数据的时间,加上 disk 读写的时间,加上花在网络传输数据的时间,都会比其他机器多更多!
所以,尽量平均分配每台机器要处理的数据,真是势在必行!
那我们应当如何平衡每台机器的负担呢?我们先了解一下 Hadoop 如何读取数据的吧,只有搞清楚工具本身,我们才能更好的利用它。
Hadoop 是怎么处理 input 的?
大家还记得我们上篇文章里介绍用户如何向 JobTracker 提交 Job 吗? (点击阅读原文查看上一篇文章)
用户的代码,无论是 Java 还是别的语言,都需要使用 Hadoop 提供的一个 client side libraryJobClient. 它是用户代码和 JobTracker 打交道的接口。
运行 JobClient
数据/Hadoop/host/机器/时间/文章/用户/情况/记得/input/
数据/Hadoop/host/机器/时间/文章/用户/情况/记得/input/
-->