Hadoop是一种分布式计算框架,由Apache基金会开发,主要应用于大规模数据处理和存储。其核心组件包括Hadoop Distributed File System (HDFS) 和 MapReduce。HDFS是一个高容错、高可扩展的分布式文件系统,用于存储海量数据,通过将数据复制多份在不同节点上,确保数据的可靠性和可用性。
MapReduce是一种编程模型,它将复杂的计算任务分解为两个主要阶段:Map阶段和Reduce阶段。在这个模型中:
1. **Map阶段 (map(K1, V1) –> list(K2, V2))**: 这个阶段接收输入数据,执行对数据的预处理操作,如数据抽取、过滤、排序等。Mapper函数对原始键值对(K1, V1)进行操作,通常产生一系列新的键值对,这些键值对可能会进行排序,以便后续处理。
2. **Combine阶段 (combine(K2, list(V2)) –> list(K2, V2))**: 虽然Hadoop并未明确提供Combine阶段,但这是对Map阶段输出的一种描述。在某些情况下,为了减少Reduce阶段的输入数据量,可以在Map阶段就对结果进行初步汇总,类似于Reduce,但这并不适用于所有场景,例如计算平均值就不适合用在Combine阶段,因为它需要对所有值进行精确的累积。
3. **分区阶段 (partition(K2, V2) –> integer)**: 这个阶段负责将Map阶段产生的键值对按照键值进行分区,每个分区有一个唯一的索引号。分区有助于优化数据分布,确保相同键的值在Reduce阶段被有效地聚合成一组。
4. **Reduce阶段 (reduce(K2, list(V2)) –> list(K3, V3))**: 在这个阶段,数据被进一步聚合,具有特定键的值序列被合并,形成最终的输出。Reduce函数处理分区后的数据,进行汇总或统计计算。
Hadoop的发展历程始于2004年,由Doug Cutting和Mike Cafarella启动,随后经过多次迭代和改进,包括雅虎的参与和支持,逐渐成为业界处理大数据的标准工具。Hadoop的成功案例包括大规模数据排序速度的提升,以及在雅虎搜索和广告业务中的广泛应用。随着时间的推移,Hadoop集群规模不断扩大,技术性能不断提高,成为企业级大数据处理不可或缺的一部分。