
『大数据基础』02-大数据计算的思路:移动计算而不是数据
一、移动海量数据的代价太大
传统的计算机程序执行过程是:输入→计算→输出。
大数据时代,要处理数据的数量级普遍都已经达到了PB级以上,这种情况下没有任何一种网络带宽可以支撑将所有数据传输到同一个地方用于计算,也没有任何一台服务器的内存可以一次性存下海量的数据。所以传统的计算模型在大数据处理是不适用的。
曾经有这样的一个新闻:“云计算巨头亚马逊称,利用卡车将大型公司客户数据中心的数据转移至其公有云计算设施比使用网络传输更快。45英尺长的船运集装箱数据容量为100PB。将存有数据的硬盘装上卡车,从一个数据中心运输到另一个数据中心,所需时间要远少于通过网络传输。根据亚马逊的计算,10台卡车提取的1EB数据运输、组装所需时间将降至略低于六个月,而利用高速互联网传输则需26年左右。”由此可见,大数据具有“粘性”,一旦在硬盘落地了迁移的成本会很高。
二、大数据计算核心思路:移动计算
相对于移动数据的巨大开销,大数据计算的核心解决思路是移动计算。也就是移动程序(或进程),让程序在大数据集群各节点中分别执行,然后汇总执行结果。可执行程序的大小几百MB大的就已经很少见了,移动计算的额外开销无非就是集群节点之间的网络通信开销、作业调度和进程同步的开销等,这些相对于移动数据带来的开销简直可以忽略不计。
三、移动计算的实现原理简述
海量数据存储在服务器集群上,由HDFS分布式文件存储系统管理。一个文件可以被分成很多数据块(Block),以块为单位进行存储。
大数据计算引擎(如Hadoop、Spark等)根据各节点性能,启动若干分布式任务执行进程,准备向任务执行进程中分发执行程序。
用大数据计算框架支持的编程模型编程(Hadoop是MapReduce编程模型,Spark是RDD编程模型),打包程序。
通过大数据计算引擎启动命令执行程序,引擎根据程序要处理的数据量大小将数据切片(Split),准备把每片分配给一个任务执行进程去处理,发送处理通知。
任务执行进程下载程序包,通过反射机制加载程序。
加载程序后,任务执行进程根据分配的数据片的文件地址和数据在文件中的偏移量读取数据,并把数据输入给程序去执行。
各个数据分片执行完后汇总到一起进行最后的运算输出结果。
(整理自《大数据技术架构:核心原理与技术实践》)