1. 设计背景
过去几十年,随着网络和计算机技术的普及和发展,网络数据呈爆炸式增长。出于成本和单机处理能力的限制,多台机器协同合作,共同达成某一目标,已成为不可逆转的趋势。
海量数据带来的挑战,可以分为两部分:1)数据存储;2)数据计算;
首先需要解决庞大数据的存储问题;其次,存储的数据没有任何价值,为了挖掘海量数据的价值,需要在其上进行数据处理,加工,查询等操作;
在对海量数据进行处理的过程中,不难发现,不论何种问题,有一些共同的难题需要处理,比如:
如何在较短的时间内处理这些数据?——在多台机器上分布数据,并行执行数据处理过程(分布式/并行)
如何将数据分到多台机器上?
如何充分利用多台机器的资源?
当发生故障时,如何处理?
这些难题,和问题本身无关,而是由“海量”数据这一特性所带来。在此背景下,MapReduce计算框架应运而生。它尝试将数据处理中,“海量”数据这一特性带来的难题进行封装解决,使得程序员可以更专注于问题本身。
2. 难点
1)抽象和封装
将“海量”数据带来的难题进行封装解决,说起来容易;实现