根据定义,大数据是无法仅靠单台计算机资源来处理的。大数据的一个特点就是使用商用服务器。一台典型的商用服务器拥有2TB至4TB的磁盘。因为大数据是指远远超出这个容量的数据集,所以还是要将数据分布在多个节点上。
需要注意的是,我们把要处理的数据分布存放在多个计算节点,并不是因为这些数据的数据量有数十T之巨。你会发现大数据处理系统会有条不紊地在各个计算节点上计算处理所分配的数据。把数据分布到各个服务器节点的最终目的是为了让大量计算节点同时参与到数据的处理计算过程中来。哪怕仅有500GB的数据集,这么大的数据量,集群中的单台计算节点完全可以存储,也会把数据分发到多台计算节点。这样的数据分发有两点好处:
每个数据块会在多个节点上有多份拷贝(Hadoop默认是一个数据块有3份拷贝),这使得系统具备容错性,当一个节点发生故障,其他节点还备份有故障节点上的数据。
为了达到数据并行处理的目的,多个节点可以同时参与数据处理过程。比如,50GB的数据被分配到10台计算节点,每个计算节点仅处理分配给自己的数据集,可以达到数据处理性能5~10倍的提升。读者可能会问,为什么不把这些数据存放到网络文件系统(NFS)中,这样每个节点可以去读取它要处理的部分。答案是本地存储磁盘的数据读取速度要远远高于通过网络来读取数据的速度。当数据分析任务启动的时候,分析任务程序运行所需的函数库被拷贝到各个计算节点,大数据处理系统会尽量在本地处理计算数据。我们会在后面章节中详谈。