在当今的互联网时代,社交网络和电子商务网站需要追踪用户在网站上的行为,并据此提供相关信息或产品。传统的系统在成本效益和处理速度上难以应对这种规模的数据。这时,大数据平台就显得尤为重要。本文将带走进Hadoop这个迷人的大数据世界。Hadoop在处理海量数据时非常有用,它可能不会使处理速度变快,但提供了并行处理的能力,帮助应对大数据的复杂性,即所谓的数据的高容量、高速度和多样性(3Vs)。
除了Hadoop,还有其他大数据平台,例如NoSQL(MongoDB是最受欢迎的),将在后续的文章中探讨它们。Hadoop是一个完整的开源项目生态系统,为提供了处理大数据的框架。让先来思考一下在传统系统中处理大数据可能面临的挑战,然后看看Hadoop解决方案的能力。以下是能想到的一些挑战:
1. 高资本投资:需要购买具有高处理能力的服务器。2. 耗时巨大:处理大数据需要花费大量时间。3. 长查询错误:如果在查询的最后步骤发生错误,将浪费大量时间进行迭代。4. 程序查询构建困难:在Hadoop中构建查询就像使用任何编程语言一样简单,只需要改变构建查询的方式以实现并行处理。
Hadoop的背景:随着互联网的普及和使用,Google捕获的数据量呈指数级增长。2007年,Google平均每月收集270PB的数据,到2009年,这个数字增加到了每天20000PB。显然,Google需要一个更好的平台来处理如此庞大的数据。Google实现了一个名为MapReduce的编程模型,每天可以处理20000PB的数据。Google在名为Google File System(GFS)的特殊文件系统上运行这些MapReduce操作。遗憾的是,GFS不是开源的。
Doug Cutting和Yahoo!反向工程了GFS模型,并构建了一个并行的Hadoop分布式文件系统(HDFS)。支持HDFS和MapReduce的软件或框架被称为Hadoop。Hadoop是开源的,由Apache分发。
Hadoop的工作方式类似于日常生活中的公司结构。在公司的底层,有作为个体贡献者的员工,他们可以是分析师、程序员、体力劳动者、厨师等。项目经理负责成功完成任务,需要分配劳动、协调他们之间的工作等。此外,大多数公司还有人力经理,他们更关心保持员工数量。
Hadoop的工作方式也类似。在底层,有并行排列的机器。这些机器类似于类比中的个体贡献者。每台机器都有一个数据节点和一个任务跟踪器。数据节点也被称为HDFS(Hadoop分布式文件系统),任务跟踪器也被称为map-reducers。数据节点包含整个数据集,任务跟踪器执行所有操作。可以将任务跟踪器想象为手臂和腿,它使能够执行任务,将数据节点想象为大脑,它包含所有想要处理的信息。这些机器在独立工作,协调它们非常重要。不同机器上的任务跟踪器(类比中的项目经理)由作业跟踪器协调。作业跟踪器确保每个操作都完成,如果任何节点发生进程失败,它需要将重复的任务分配给某个任务跟踪器。作业跟踪器还负责将整个任务分配给所有机器。
另一方面,名称节点协调所有数据节点。它管理数据分配到每台机器的过程。它还检查任何机器上发生的任何清理工作。如果发生这样的清理,它会找到发送到其他数据节点的重复数据,并再次复制它。可以将这个名称节点想象为类比中的人力经理,它更关心整个数据集的保留。
在某些情况下,不推荐使用Hadoop。到目前为止,已经看到了Hadoop如何使处理大数据成为可能。但在某些情况下,不推荐使用Hadoop。以下是其中的一些情况:低延迟数据访问:快速访问数据的小部分;多次数据修改:Hadoop更适合主要关注读取数据而不是写入数据的场景;大量小文件:Hadoop更适合有少数但大文件的场景。
本文为提供了Hadoop如何在处理海量数据时提供帮助的视角。在开始为Hadoop编码之前,了解Hadoop的工作原理非常重要。这是因为需要改变代码的思维方式。现在,需要开始考虑如何实现并行处理。可以在Hadoop上执行许多不同类型的处理,但需要将所有这些代码转换为map-reduce函数。在接下来的几篇文章中,将解释如何将简单逻辑转换为基于Hadoop的Map-Reduce逻辑。还将采用R语言的特定案例研究,以建立对Hadoop应用的深入理解。