国内外农业大数据应用研究分析(4)



1.3 Spark

Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目。2014年11月,Spark在Daytona Gray Sort 100TB Benchmark竞赛中利用1/10的节点数,把100TB数据的排序时间从72min提高到了23min,打破了由Hadoop Map Reduce保持的排序记录。随着Spark在大数据计算领域的崭露头角,越来越多的企业开始关注和使用。

弹性分布式数据集(resilient distributed dataset,RDD)是Spark的最基本抽象,是对分布式内存的抽象使用,实现以操作本地集合的方式来操作分布式数据集的抽象实现。RDD是Spark最核心的东西,其表示已被分区、不可变的、可序列化的、能被并行操作的数据集合,不同的数据集格式对应不同的RDD实现。RDD缓存到内存中,RDD数据集的操作基于内存,节省Map Reduce大量的磁盘IO操作。提升迭代机器学习算法、交互式数据挖掘的效率。

Spark提供多种数据集操作类型,如map,filter,flatMap,sample,groupByKey,reduceByKey,union,join,cogroup,mapValues,sort,partionBy等操作类型,将这些操作类型称为Transformations。同时还提供Count,collect,reduce,lookup,save等多种Actions。Transformation操作是通过转换从一个或多个RDD生成新的RDD。Action操作是从RDD生成最后的计算结果。Spark编程模型相对灵活,用户可以命名、物化、控制中间结果的分区。

Spark架构采用Master-Slave模型。Master对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点。Master作为整个集群的控制器,负责整个集群的正常运行;Worker是计算节点,接收主节点命令与进行状态汇报;Executor负责任务执行;Client作为用户的客户端负责提交应用,Driver负责控制一个应用的执行,如图6所示。

Spark集群部署后,主节点和从节点分别启动Master进程和Worker进程,对整个集群进行控制。在Spark应用的执行过程中,Driver程序是应用逻辑执行的起点,负责作业的调度,即Task任务的分发,Worker管理计算节点和创建Executor并行处理任务,Spark Context控制应用的生命周期。DAG Scheduler是根据作业(Job)构建基于Stage的DAG,并提交Stage给Task Scheduler。Task Scheduler将任务(Task)分发给Executor执行。SparkEnv是线程级别的上下文,创建并包含一些重要组件的引用。Cluster Manager控制整个集群,监控Worker。在执行阶段,Executor为执行器,是在worker node上执行任务的组件,用于启动线程运行任务。Driver将Task、file和jar序列化后传递给对应的Worker机器,同时Executor对相应数据分区的任务进行处理。

Spark运行的整体流程为:Client提交应用,Master找到一个Worker启动Driver,Driver向Master或者资源管理器申请资源,将应用转化为RDD Graph,由DAG Scheduler将RDD Graph转化为Stage的有向无环图提交给Task Scheduler,由Task Scheduler提交任务给Executor执行。在任务执行的过程中,其他组件协同工作,确保整个应用顺利执行。

Spark采用了内存计算。从多迭代批处理出发,允许将数据载入内存作反复查询,此外还融合数据仓库、流处理和图形计算等多种计算方式。Spark构建在HDFS上,能与Hadoop紧密结合。Spark可用一个技术堆栈解决云计算大数据中流处理、图技术、机器学习、交互式查询、误差查询等所有的问题,可以快速地处理农业非结构数据,处理速度比Hadoop要快。Spark正在逐渐走向成熟,并在农业大数据分析这个领域扮演更加重要的角色。