Spark简介
基于内存的分布式集群计算平台
可适配 Python、Java、Scala、SQL
拓展性能:机器学习、流式计算、图计算
Spark特点
高效
- 内存计算引擎
- DAG图
- 比MapReduce快10~100倍
易用
- 提供丰盛的API,反对Java,Scala, Python
- 代码量小
与Hadoop集成
- 读写HDFS、Hbase、Hive
- 和Yarn集成
与Oracle存过的比照
Spark利用场景
- 数据仓库
- 机器学习
- 海量数据离线剖析
- 实时数据流解决
基本概念
集群架构
- 集群资源管理器(Cluster Manager)
- 运行作业工作的工作节点(Worker Node)
- 每个利用的工作管制节点(Driver)
- 每个工作节点上负责具体任务的执行过程 (Executor)
- 资源管理器Mesos或YARN
工作执行流程
- 首先为利用构建起根本的运行环境,即由 Driver创立一个SparkContext,进行资源 的申请、工作的调配和监控
- 资源管理器为Executor分配资源,并启动 Executor过程
- SparkContext依据RDD的依赖关系构建 DAG图,DAG图提交给DAGScheduler解 析成Stage,而后把一个个TaskSet提交给 底层调度器TaskScheduler解决; Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行, 并提供利用程序代码
- Task在Executor上运行,把执行后果反馈 给TaskScheduler,而后反馈给 DAGScheduler,运行结束后写入数据并 开释所有资源。
数据处理过程
- 读入内部数据源
- 转换算子进行数据处理
- 动作算子进行解决流程触发
- 解决实现输入后果
罕用算子-转换
开发案例--团体电信三码低效资产剖析
Spark很香、也很坑
坑1:无奈自定义自增序列
坑2:Spark Stage之间的血统简短
坑3:直连Oracle读取慢
坑4:工夫格局反对不敌对
常见问题1-无奈自定义自增序列
问题论述:
在不同的业务逻辑中,因为会存在多种维度的剖析,然而他们的后果是写入到同一张表格中的。在oracle中执行的时候是依据oracle中定义的序列来保障ID的唯一性,然而 咱们代码实现的时候采纳的数据加载模式时无奈加载oracle中的序列,并且读取序列也会收到oracle序列缓冲的影响。所以在业务逻辑解决上咱们得本人定义一个属于咱们 业务的ID序列,并且须要保障唯一性。
常见问题2-血缘关系简短
问题论述:
因为SparkSQL在解析成ATS树时会向上追溯血统并反复解析,且随着血缘关系的增长ATS树会变的越来越简单,导致工作执行效率会重大升高。具体表象为 Spark工作在执行过程中会卡住不动,程序持续卡顿几个小时之后才会开始持续运行。
计划一:checkpoints形式切割形式
计划二:hdfs落地,应用时二次读取
常见问题3-读Oracle速率慢
问题论述:
在读取Oracle时,数据表未做分区,程序无奈通过指定分区并行加载数据,且为了减小数据库IO压力,采纳限度高频、数据读取限度等策略,导致读取Oracle速 率很慢,影响计算效率。
常见问题4-Oracle工夫格局反对不敌对
问题论述:
park在读写Oracle时date类型数据容易失落精度,例如: Oracle中 2019-12-20 05:44:30读取后为2019-12-20, Spark中2019-12-20 05:44:30写入后变成2019-12-20 00:00:00
解决方案:
Oracle方言,即自定义一种数据库解释语言,实际上的实现 为数据的类型转换。OracleDateTypeInit.oracleInit()