对于离线处理部分,离线存储平台负责对文件、对象、结构化数据的存储,服务于日志、网页、关系链、多媒体、字典、数据库等应用,它的数据来源非常丰富。而离线计算平台的数据一般来自离线存储和在线存储,计算结果往往也写回离线和在线存储平台。离线计算平台上的计算分为IO密集型、计算密集型、迭代型、类SQL型等类型,分别对搜索排序、广告算法、个性化推荐、安全检测等应用提供支持。
这里不得不提的是用在离线处理中的任务依赖控制系统。在线处理的各系统由于基本上是数据流驱动或者是事件驱动的,所以不需要显式地设置各个任务的上下游依赖关系,数据和事件的流式传播即触发了对应的计算。而对于离线处理,各个任务都是批量处理的方式,因此需要等上游完成批量处理,下游才能开始接着处理。
现实中往往采用定时器+预估完成时间的方式来粗略地隐式地配置任务依赖,这样带来的问题是:
第一,预估时间不准确,造成时间的浪费或是无效的计算;
第二,上游的延迟会引起下游的连锁反应,不具有弹性的容忍机制;
第三,随着任务增多,依赖关系配置和执行时间的预估变得越发复杂和不可控,而且任务迁移时很容易发生任务丢失和依赖失效的问题。任务依赖控制系统正是为了解决这些问题而诞生的,它把所有任务的依赖拓扑关系放到全局统一的视图中,将这些任务集中起来管理,可视化地配置它们的依赖关系,任务的迁移变得简单可靠。同时,它负责监控每个任务的完成情况,如果成功完成,则马上触发下游的任务;如果失败,则进行重试,直到执行成功才触发下游任务,或者超过重试次数阈值后进行告警。这种自动化的依赖触发方式,缩短了整体业务耗时,并具有弹性容忍延时能力。
对于大数据处理来说,数据是素材,平台是工具。工欲善其事,必先利其器。大数据各个层次的平台已经日臻成熟,我们对其原理与架构也清晰明了。而海量数据中蕴含的巨大价值能否被有效挖掘,就看使用者们的功力了。