spark
一站式的解决方案,集批处理,实时流处理,交替式查询。图计算与机器学习于一体
应用场景:
- 批处理可用于ETL(抽取,转换,加载)
- 机器学习可用于自动判断淘宝的买家评论式好评还是差评
- 交互式分析可用于查询Hive数据仓库
- 流处理可用于页面点击流分析,推荐系统,舆情分析等实时业务
特点:轻:核心代码有3万行
快:对小数据集可达到亚秒级的延迟
灵:不同层面的灵活
巧:巧妙借力其他组件
Spark中间数据存放在内存中,对于迭代运算,批处理计算效率高,延迟低
Spark默认运行在yarn集群上
Spark核心:RDD
- RDD (Resilient Distributed Datasets)弹性分布式数据集,只读,可分区
- 默认存储在内存,内存不足时,会写入磁盘
- RDD数据会以分区的形式在集群中存储
- 血统机制,当数据丢失时,可快速恢复
优点:只读,静态。所以可以提供更高的容错性,可实现推测式执行
RDD依赖关系:
- 窄依赖:一对一
- 宽依赖:一对多
RDD算子:
- Transformation
在action没发起job之前 会一直积累RDD
典型算子:map ,flatMap,filter,reduceByKey
- Action
当代码调用该类型算子时,立即启动job
典型算子:take,count,saveAsTextFile
Spark重要角色:
Drive:负责应用的业务逻辑和运行规划
ApplicationMaster:负责应用的资源管理,根据需要向ResourceManager申请资源
Client:负责提交需求
ResourceManager:资源管理部门 负责整个集群的资源统一调度和分配
Ndemanger:负责本节点的资源管理
Executor:实际任务执行者
Spark on Yarn-client的运行流程
Spark on Yarn-cluster的运行流程
ResourceManager>>> Ndemanger>>>Container>>> ExecutorL
Yarn-client与Yarn-cluster的区别:
主要区别:
- Application Master进程
- Yarn-client适合测试,Yarn-cluster适合生产
- Yarn-client任务提交节点宕机,整个任务会失败。Yarn-cluster不会
Spark SQL:
是Spark中用于结构化数据处理的模块。
Dataset:
1.是一个由特定区域的对象组成的强类型集合可以通过功能或关系操作并行转换其中的对象。
2.只执行action操作时触发计算
DataFrame:
指定列名称的Dataset。、
RDD、DataFrame与Dataset特点:
RDD优点:类型安全,面向对象
缺点:序列化和反序列化的性能开销大;GC的性能开销,频繁的创建和销毁对象,势必会增加GC(Garbage Collection垃圾回收机制)
DataFram优点:自带scheme信息,降低序列化和反序列化的开销
缺点:不是面向对象;编译期不安全
Dataset特点:快:在大多数场景下,性能优于RDD;Encoders优于Kryo或者Java序列化;避免不必要的格式转化。(快:主要是降低了序列化和反序列化开销,及大量的GC开销)
类型安全:类似于RDD,函数尽可能编译时安全。和DataFrame,RDD互相转化
Spark SQL和Hive区别
Spark SQL的执行引擎时spark core ,Hive默认是的MapReduce
Spark SQL的执行速度是Hive的10-100倍
Spark SQL不支持bukets(桶:对应表或分区所在路径的一个文件),Hive支持
联系:Spark SQL依赖Hive的元数据
Spark SQL兼容绝大部分Hive的语法和函数
Spark SQL可以使用hive的自定义函数
Structured Streaming:
Structured Streaming是构建在Spark SQL引擎上的流式数据处理引擎。
Structured Streaming的核心是将流式的数据看成一张数据不断增加的数据库表,Spark执行标准的SQL查询,从无边界表中获取数据。
无边界表:新数据不断到来,旧数据不断丢弃,实际上是一个连续不断的结构化数据流。
Spark Streaming:
Spark Streaming是Spark核心API的一个扩展,一个实时计算框架。具有可扩展性、高吞吐量、可容错性等特点
Spark Streaming微批处理:Spark Streaming 计算基于DStream,将流式计算分解成一系列短小的批处理作业。
Sparkstreaming容错机制:本质仍是基于RDD计算,当RDD的partition丢失时,可以通过RDD血统机制进行恢复
Spark常驻进程:
JDBCServer:主备部署,无单点故障
JobHistory:历史信息 双节点负荷分担,无单点故障
Spark与其他组件的关系:
在FusionInsight集群中:
HDFS:Spark在HDFS文件系统中读写数据(必选)。YARN:Spark任务的运行依赖Yarn来进行资源的调度管理(必选)。Hive:Spark-sql的元数据和数据文件与Hive完全共用(必选)。Zookeeper:JDBCServer的HA的实现依赖于Zookeeper的协调(必选)。Kafka:Spark可以接收Kafka发送的数据流(可选)。HBase:Spark可以操作HBase的表(可选)。