引言
假设一个任务,有海量数据(1亿M、1亿G,1亿PB....)n台主机,想要利用所有的资源尽快的统计或者处理全部的数据,我们需要干什么?
1. 设计数据处理的算法
2. 把该算法分派到各个主机上执行(要考虑到主机的资源情况、负载平衡、安全、服务宕机....)
3. 各个主机自行读取数据,执行任务,同时反馈任务执行情况给用户(要考虑通信、数据的存储、数据丢失....)
那么如果有一个已有的代码 只需要我们写好计算逻辑就能够帮助我们管理 多台主机通信 && 任务分配 && 资源分配 && 错误恢复....
那肯定是直接copy 过来用它、用它。spark就是一套可以帮助我们完成这些工作的框架。除了spark还有很多比如MapReduce、Storm、Flink....他们在各有所长。
Spark是什么?
spark是基于内存的快速的、易用的、通用的、可扩展的大数据分析引擎。
快速:是与之前的Hadoop的MapReduce进行比较,MapReduce基于磁盘进行计算,将中间结果存储在磁盘上,而spark存储在内存上。
易用:支持Java Scala Python 进行调用,提供spark shell。
通用:可以对数据进行批处理、流处理、机器学习、图计算,直接进行Spark SQL操作等相关操作,丰富的API实现接口。
可扩展:可以轻松的增加处理主机 ,同时兼容Yarn 和Mesos可以作为资源管理和调度器
spark有什么?
spark core: spark的基本功能,任务调度、内存管理、错误恢复、与存储系统的交互等
spark SQL: 用于直接操作spark的结构化数据的API等
Structured Streaming:spark2.3将批数据和流数据处理的接口统一的高性能API接口 spark Streaming-转为-> Structured Streaming
spark Streaming:实时数据进行流式计算的组件
spark MLib: ML程序库,分类回归聚类等任务
yarn mesos:集群管理器:Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计 算。为了实现这样的要求,同时获得最大灵活性,Spark支持在各种集群管理器(Cluster Manager)上运行,以及Spark自带的一个简易调度 器,叫作独立调度器
HDFS:支持操作的文件系统
总结
总之,spark就是能够帮我们把计算任务进行划分,然后分配到各个机器上执行的一套代码。所以下一篇看一下,spark提供了哪些接口给我们使用。