今天学习了下mapreduce的原理,毕竟这也算是hadoop的核心吧。
在处理海量数据的时候(数据文件较大),比如有很多个T(几个甚至上百个T)的文件,可以考虑放在HDFS上,比如HDFS有50个节点,每个节点挂在8T的硬盘,那么从存储角度来看是完全满足了。但是这样也产生一个问题,数据都被分散在 HDFS的各个机器上,如果需要统计数据的话,需要从各个机器分别读取,比较耗内存,性能也存在问题。
因此,这种情形下,可以将我们的统计运算的过程往数据的Datanode上分发,而不是像之前,先拿数据再进行统计计算。至于数据逻辑在哪些机器上运行,各个节点的数据完整和最后整合操作(分布式运算),是mapreduce需要完成的事情。
如下面一个简单的例子,来说明其过程。比如,某网站或者文件需要统计某个词汇的总数。那么就可以使用mapreduce来实现,map首先是将数据打散切分的步骤,这个阶段是可以高度的并发运行,速度很快,而reduce是对数据汇总的步骤。粗看起来,其实业务逻辑上只是想要得到我们关系型数据库里面group by或者partition by的结果,但是关系型数据库我们运算量不算大,也许只是一个sql的问题,并且结果集的返回也是在同一台机器上。但是在数据量较大的情况下,性能就是瓶颈了。该例子的代码实现,后续会更新。MapReduce