乐趣区

关于spark:Spark项目落地实战以及日常大数据开发注意事项

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

工作执行流程

  1. 首先为利用构建起根本的运行环境,即由 Driver 创立一个 SparkContext,进行资源 的申请、工作的调配和监控
  2. 资源管理器为 Executor 分配资源,并启动 Executor 过程
  3. SparkContext 依据 RDD 的依赖关系构建 DAG 图,DAG 图提交给 DAGScheduler 解 析成 Stage,而后把一个个 TaskSet 提交给 底层调度器 TaskScheduler 解决;Executor 向 SparkContext 申请 Task,Task Scheduler 将 Task 发放给 Executor 运行,并提供利用程序代码
  4. Task 在 Executor 上运行,把执行后果反馈 给 TaskScheduler,而后反馈给 DAGScheduler,运行结束后写入数据并 开释所有资源。

数据处理过程

  1. 读入内部数据源
  2. 转换算子进行数据处理
  3. 动作算子进行解决流程触发
  4. 解决实现输入后果

罕用算子 - 转换

开发案例 – 团体电信三码低效资产剖析


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()

退出移动版