在实际应用中,大数据处理主要包括以下三个类型:
1.复杂的批量数据处理:
通常时间跨度在数十分钟到数小时之间
2.基于历史数据的交互式查询:
通常时间跨度在数十秒到数分钟之间
3.基于实时数据流的数据处理:
通常时间跨度在数百毫秒到数秒之间
当同时存在以上三种场景时,就需要同时部署三种不同的软件比如:
MapReduce:离线批处理
Impala:交互式查询处理
Storm:实时流处理
这样做难免会带来一些问题:
不同场景之间输入输出数据无法做到无缝共享,通常需要进行数据格式的转换
不同的软件需要不同的开发和维护团队,带来了较高的使用成本
比较难以对同一个集群中的各个系统进行统一的资源协调和分配
Spark:既能够提供内存计算框架,也可以支持SQL即席查询、实时流式计算、机器学习和图计算等
Spark可以部署在资源管理器YARN之上,提供一站式的大数据解决方案
Spark所提供的生态系统足以应对上述三种场景,即同时支持批处理、交互式查询和流数据处理
生态系统组件
Spark的生态系统主要包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX 等组件。
应用场景
应用场景
时间跨度
其他框架
Spark生态系统组件
复杂的批量数据处理
小时级
MapReduce
Hive Spark
基于历史数据的交互式查询
分钟级、秒级
Impala、Dremel、Drill
Spark SQL
基于实时数据流的数据处理
毫秒、秒级
Storm、S4
Spark Streaming
基于历史数据的数据挖掘
-
Mahout
MLlib
图结构数据的处理
-
Pregel、Hama
GraphX
Spark执行任务流程图
1、Spark运行架构包括:Master(集群资源管理)、Slaves(运行任务的工作节点)、应用程序的控制节点(Driver)和每个工作节点上负责任务的执行进程(Executor);
2、Master是集群资源的管理者(Cluster Manager)。支持:Standalone,Yarn,Mesos;
3、Slaves在spark中被称为Worker,工作节点,包括Executor。;
4、Driver Program。该进程运行应用的 main() 方法并且创建了SparkContext。由Cluster Manager分配资源,SparkContext将发送Task到Executor上执行。
5、每个工作节点上负责任务的执行进程(Executor);
Executor包括cache、分配到Executor上的task任务(task1、task2…tasksN)