Spark复习重点和ETL

Spark是一款计算引擎:(基于内存计算,速率比MR高,但不如MR稳定)

一.框架:
             sparkcore做离线计算,sparksql做交互式查询,sparkstreaming做流式(准实时)计算
二.运行流程:
          ①client提交Appcation,根据不同的运行模式在不同的位置创建Driver进程
          ②Spark链接到Master,向Master注册应用并申请资源
          ③Master根据SparkContext申请的资源并根据woker心跳·周期内报告的信息决定在那个woker上分配资源,也就是这Excetor
          ④Woker节点创建Excetor进程,Excetor反向diver进行反向注册
          ⑤资源满足(注册完成)后,SparkContext解析Application代码,创建RDD,构建DAG(有向无环图),然后向有向无环图调度器分解成Stage当               碰到1个Action算子时催生1个job,每个job中含有1个或者多个Stage(根据宽窄依赖),然后将Stage(TaskSet)提交给TaskScheduler,                             TaskScheduler负责将多个Task分配到对应的Worker,最后提交到Executor的线程池中,由Exceutor执行)
三.三大数据结构:
             RDD:分布式弹性数据集(源码中是一个抽象类,代表一系列弹性的,不可变的,可分区,里面元素可并行计算的集合)
                           弹性:
                                   弹性存储:内存与磁盘自动切换
                                   弹性容错:数据丢失可以自动恢复
                                   弹性计算:计算出错重试机制
                                   弹性分片:可根据需求重新分片
                         分布式:分布在集群不同节点
                         数据集:RDD只封装计算逻辑
                         数据抽象:RDD是只是一个抽象类,由子类具体实现
                         不可变:RDD封装的计算逻辑不可变,想要改变只能产生新的RDD,在新的RDD中封装新的计算逻辑
                         可分区:RDD是一种分布式数据集,由于数据量很大,因此计算时要被切分并存储在各个节点的分区中
                         并行计算:一个分区对应一个任务,分区是spark计算任务的基本处理单位,决定了并行计算的粒度
                         依赖关系:如果某个RDD丢失则可以根据血缘关系,从父RDD计算得来
                         惰性执行:spark对于转换算子采用惰性执行机制,遇到转换算子并不会立即计算结果,遇到行动算子才会开始计算
                         计算思想:计算向数据靠拢,移动数据不如移动计算
             累加器:(分布式只可写变量)diver端可以将excutor端的副本计算结果拿回到diver端
             广播变量:(分布式只可读变量)将变量上传到diver端,并通知其他Executor端来复制一份,只有可读权限
五.RDD,DataFream,DataSet在操作中就是为了方便处理数据,
六.RDD算子的分类:
             转换算子,行动算子,控制算子
七.血统依赖:
             根据RDD转换算子和行动算子,会形成RDD之间的依赖,多个RDD之间的关系成为就是血统
             在实际运行中
八.闭包检测:
             从计算的角度, 算子以外的代码都是在 Driver 端执行, 算子里面的代码都是在 Executor端执行。那么在 scala 的函数式编程中,就会导致算                 子内经常会用到算子外的数据,这样就形成了闭包的效果,如果使用的算子外的数据无法序列化,就意味着无法传值给 Executor端执行,就               会发生错误,所以需要在执行任务计算前,检测闭包内的对象是否可以进行序列化,这个操作我们称之为闭包检测
九.Kryo序列化方案:
              Kryo序列化是spark绕过java的一个序列化框架:在计算时减少了网络IO,速度比java的序列化快十倍),
十.ETL流程:
              1.数据过滤
                      过滤非json格式的数据
                      过滤缺失关键字段的数据
                      过滤关键字段不为空的数据
                      过滤爬虫数据
                      过滤非需求时间端数据
              2.数据的规范化处理
                       我们将数据进行统一接口
                       将参与计算并可能为空值的字段重新赋值为null(目的是为了不影响后续的计算结果)
                       添加新字段,省市区,是否新用户,session分割字段,用户回填ID字段,并进行初始化,
              3.session分割(目的是为了确认用户的实际使用时长(普遍采用会话保持策略超过三十分钟则进行分割))
                       将经过规范化处理完成的数据,创建一个样例类映射,进行转后之后进行处理
                       我们使用RDD对数据进行遍历,并取出timestamp字段
                       我们将timestamp字段进行判断,如果大于30min就进行切割,并且利用UUID赋予被切割的会话一个唯一ID
              4.地理位置集成
                       将数据进行转换成LogBean(样例类)
                       因为Geohash对比Ip2region更准确,首先采用Geohash将数据对地理位置进行集成,如果使用GeoHash读取不到位置信息,那么就                         使用ip收集
                       首先我们将Geohash和ip2region这两个第三方组件分别进行广播(那么这两个组件都能被读取,减少网络IO)
                       一次性将分区的数据进行拉取,然后进行处理(这个时候是LogBean)
                       我们将经纬度,和解析长度放进GeoHash解析,可能为空这里需要捕获一下异常,如果使用IP解析出了数据,那么我们先查看解析出的                           数据样式是否是我们想要的,
                            例如:中国|0|广东省|东莞市|电信
                      那么我们则可以利用正则表达式将数据解析,并放入数组,然后利用下标拿到位置信息
               5.ID_Mapping(本身的作用是为了之后的用户画像做一个全局唯一标识)guid
                      这里我们做匿名日志归属权问题,我们需要一张权重表,需要T-1绑定评分表,需要T日日志表
                      我们根据T日日志表获取用户登录状态,从而利用T-1日日志得到T日绑定评分表,我们根据权重分数将匿名数据回填分数高的用                                  户id
                      接下来我们需要做guid(用户全局唯一标识)的工作
                      创建redis链接,将更新后的用户id或者设备id作为guid的key,guid则使用计数器获得
                      我们将数据转换成LogBean,拿到最新的用户id放入redis
                      以防万一,仍然还是会有一些数据没有用户id,那么我们使用用户id查询不到那么就使用设备id替换,重新作为guid的key
               6.保存到hive仓库的DWD(数据明细层),提供明细数据为主题分析提供实用数据
注:在转换dataset对数据集进行操作前我们需要导入spark的隐式转换
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
美团的Spark ETL封装是指美团在使用Spark进行数据处理和转换时,对Spark的基本操作进行了封装和优化,以便提高数据处理效率和开发效率。 首先,美团的Spark ETL封装提供了丰富的常用数据操作函数和算法库。这些函数和算法库包括了常见的数据处理操作,如过滤、转换、分组、排序、聚合等,以及常见的机器学习算法和推荐算法。通过使用这些封装好的函数和算法库,可以简化开发人员的代码编写,提高代码的可读性和维护性。同时,这些函数和算法库也经过了性能优化,能够在大规模数据处理时保持高效。 其次,美团的Spark ETL封装还提供了一套易于使用的工具和框架,用于管理和监控数据处理作业。这些工具和框架可以帮助开发人员更好地组织和管理数据处理作业,包括任务调度、任务监控、作业依赖管理等功能。通过使用这些工具和框架,开发人员可以更轻松地编写、运行和维护数据处理作业,提高开发效率和作业管理效率。 此外,美团的Spark ETL封装还包括了一些性能优化的策略和技巧。这些策略和技巧包括了数据分区策略、数据压缩策略、内存管理策略等等。通过采用这些优化策略,可以减少数据处理时的IO开销、提高算法运行效率,并且合理地利用资源,提高整体的数据处理性能。 总结来说,美团的Spark ETL封装是一套完善的工具和框架,用于简化和优化Spark的数据处理和转换。通过使用这套封装,开发人员可以更高效地进行数据处理,减少开发复杂度,提高数据处理性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值