Spark Streaming

Spark Streaming

1.spark.streaming.kafka.maxRatePerPartition 控制spark streaming消费kafka速度
spark.streaming.backpressure.enabled 打开背压消费速度是动态浮动的,上线由spark.streaming.kafka.maxRatePerPartition
spark.streaming.stopGracefullyOnShutdown 优雅关闭 防止程序处理数据处理一般被kill 调用yarn application -kill 命令关闭
http://spark.apache.org/docs/latest/configuration.html

2 .auto.offset.reset 如果是需要历史数据那么设置成earliest 如果不需要消费历史数据那么设置成latest

3.提交偏移量的问题
(1)如果自动提交偏移量 spark streaming消费到数据之后立马提交,那么就会有一个问题 提交偏移量成功 处理失败了,那么spark streaming第二次去启动的时候会造成丢数据的情况
(2)如果不允许数据丢失,首先要设置成手动提交,处理完业务数据之后在去提交一个偏移量。因为处理业务数据这一步骤它是worker端分布式的,提交偏移量操作是在driver端,两部分操作不在一个事务里面,所以造成处理数据成功了,提交偏移量失败了(停电,断网 极端情况下)会造成spark streaming第二次启动的时候造成数据重复消费的问题 。涉及到金额的情况下会去考虑一个事物的问题,绑定事物操作worder端将数据collect聚合到driver端再去编写同一个事物,一般情况下是不考虑
事物的。Spark当中凡事count ,collect这些会将数据聚合到driver的算子一般不推荐使用,耗时非常大

4.创建DStream
使用KafkaUtils.createDirectStream这个方法创建,那么这个0.10版本,所以你去导包 spark-streaming-kafka-0-10_2.11。如果是手动维护偏移量,那么进行一次判断,判断mysql表当中也就是历史数据是否存在偏移量,如果不存在偏移量说明spark程序是第一次启动那么就是按earliest进行消费,如果mysql当时存在偏移量的,那么spark程序至少启动过一次,那么会根据mysql偏移量进行消费,根据偏移量消费,需要封装一个HashMap[TopicPartition, Long],TopicPartition封装对应的topic名称和分区号,Long值就是对应的偏移量,然后将hashmap传入到ConsumerStrategies.Subscribe[String, String]这个方法的第三个参数里。

5.spark streaming如何访问jdbc连接
dstream.foreachRddd(rdd->{
rdd.foreachPartition(Partition->{
//在分区内创建jdbc连接
partition.foreach(item->{
//循环分区内每一条数据
//重复使用jdbc连接
}
//关闭jdbc资源,注意不关的话会造成内存泄露的问题呢
}
}

如果在spark程序遇到了object无法序列化的错误,那么需要注意 代码里肯定是错误的将driver对象使用到了worker端。因为scala闭包特性,你在编写的时候是不会把报错的

6.spark streaming操作jdbc 线程安全问题
spark streaming程序是批处理数据,所以3秒一批数据,可能相同维度(可以是相同业务维度的数据,也可以是相同key的数据),然后mysql,多个分区内存在相同维度数据,那么造成多线程同时去访问一个mysql资源,然后将mysql加载到自己的一个工作内存进行计算,再次刷写到mysql库当中,可能会存在线程安全问题,得到一个结果是不准确的,
那么解决办法
(1)加分布式锁 zookeeper redis 当然加了分布式锁之后速度会受到很大的影响 所以大数据情况不推荐使用
(2)groupby,groupbykey,reducebykey 这些算子将相同维度的数据聚合一个分区。进行操作之后那么一个分区它可能会有多个key的数据比如同时都有(用户id1001,1002的数据),1001和1002两个key的数据肯定是都是全部数据。所以说当一个key值的数据如果过多了那么进行join groupby reducebykey 操作都会造成一个数据倾斜的问题。

7.提交偏移量
dstream.froeachRdd(rdd->{
val offsetRanges: Array[OffsetRange] = rdd.asInstanceOf[HasOffsetRanges].offsetRanges
for (or <- offsetRanges) {
//可以获取topic名称 分区号 ,偏移量
or.topic, or.partition.toString, or.untilOffset
可以在for循环里去写sql语句将偏移量保存到mysql当中
}

如果偏移量想要手动维护并且提交到kafka,那么可以下面这个代码
stream.asInstanceOf[CanCommitOffsets].commitAsync(offsetRanges)

8.spark streaming程序在yarn一直运行着的
这个程序可能会挂掉的,并不是能完全一直运行下去的,那么这个时候需要比如第三方插件将spark streaming挂了之后重新拉起来。
重新拉起方法
(1)–supervise 官方提供的spark-submit参数
(2)supervise第三方一个插件,专门监控linux进程的一个守护进程,当你这个被监控进程如果挂掉了,那么这个supervise插件就会把你这个重新拉起来

9.spark streaming默认分区个数
默认分区个数是跟kafka分区个数挂钩,也就是kafka topic创建的时候指定了10个分区,那么spark stremaing默认一个分区就是10个,然后spark streaming一般不会去使用重分区的操作(把分区扩大或者分区缩小一般不会用),因为扩大repartition算子会造成 shuffle,shuffle数据会落盘那么会耗时,coalease算子缩小并行度就变小了速度就会变慢。

10.提交参数
spark sql当中task个数是cpu个数2倍到3倍,这个是离线数仓。
spark steaming当中要想spark streaming速度运行的最快,那么task运行比跟cpu必须1:1。1:1是最快的,让每个task同时并行的运行.所以集群当中数仓离线任务是耗内存任务,
实时任务是耗cpu的任务,如果你的公司分的细的那么两个集群分开,一个集群专门跑离线任务,一个集群跑实时任务。
spark-submit 控制cpu那么就是由 --num-executors --executor-cores 这两参数控制,也就是两个参数相乘要等于一个task个数的,task个数就是分区个数。而且如果cpu个数大于
task个数是没有效果的,会存在cpu空转的情况 。

上百节课详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程介绍: 讲解一个真实的、复杂的大型企业级大数据项目,是Spark的大型项目实战课程。 通过本套课程的学习,可以积累大量Spark项目经验,迈入Spark高级开发行列。 课程特色: 1、项目中全面覆盖了Spark Core、Spark SQL和Spark Streaming这三个技术框架几乎全部的初级和高级的技术点和知识点, 让学员学以致用,通过一套课程,即掌握如何将Spark所有的技术点和知识点应用在真实的项目中,来实现业务需求! 2、项目中的4个功能横块,全郃是实际企业项目中提取出来的,并进行技术整合和改良过的功能模块.全都是企业级的复杂和真实的需求,业务模块非常之复杂,绝对不是市面上的Dem级别的大数据项目能够想比拟的,学习过后,真正帮助学员增加实际 企业级项目的实战经验。 3、项目中通过实际的功能模块和业务场景,以及讲师曾经开发过的处理十亿、甚至百亿以上数据级别的SparK作业的经验积累,贯穿讲解了大量的高级复杂的性能调优技术和知识、troubleshooting解决线上报错和故障的经验、高端的全方位数据倾斜处理和解决方案.真正帮助学员掌握高精尖的Spark技术! 4、项目中采用完全还原企业大数据项目开发场景的方式来讲解,每一个业务模块的讲解都包括了需求分析、方案设计、数据设计、编码实现、功能测试、性能调优等环节,真实还原企业级大数据项目开发场景。 模块简介: 1、用户访问session分析,该模块主要是对用户访问session进行统计分析.包括session的聚合指标计算、 按时间比例随机抽取session、获取每天点击、下单和购买排名前10的品类、并获取top10品类的点击量排名前10的session.该模块可以让产品经理、数据分析师以及企业管理层形象地看到各种条件下的具体用户行为以及统计指标.从而对公司的产品设计以及业务发展战略做出调整.主要使用Spark Core实现. 2、页面单跳转化率统计,该模块主要是计算关键页面之间的单步跳转转化率,涉及到页面切片算法以及页面流匹配算法.该模块可以让产品经理、数据分析师以及企业管理层看到各个关键页面之间的转化率.从而对网页布局,进行更好的优化设计。主要使用Spark Core实现. 3、热门商品离线统计,该模块主要实现每天统计出各个区域的top3热门商品.然后使用Oozie进行离线统计任务的定时调度,使用Zeppeline进行数据可视化的报表展示.该模块可以让企业管理层看到公司售卖的 商品的整体情况,从而对公司的商品相关的战略进行调螫.主要使用Spark SQL实现。 4、广告流量实时统计.该模块负责实时统计公司的广告流量.包括广告展现流量和广告点击流量,实现动态黑名单机制以及黑名单过滤,实现滑动窗口内的各城市的广告展现流立和广告点击流直的统计,实现 每个区域诲个广告的点击流置实时统计,实现每个区域top3点击量的广告的统计,主要使用Spark Streaming实现.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值