某人,并未提他的名字,是因为看的视频是1年前的,视频里他吹得厉害。我看视频时,查了一下他在视频里说的要做到的东西,结果上网一查,就看到了很多人说他骗了钱后,就不管交了学费的人了。真假无从查起。但是无风不起浪。也真没查到他说的要做出来的东西发布出来。所以这里不那人的名字了。只把他说的知识拿过来,做些笔记。

一。Batch中Task处理时间大

Spark Streaming 的处理模式是按照 Batch Duration 进行 Micro Batch Computation 的,且如果上一批数据没有处理完的话是不会处理下一批数据的!! 这会导致几个结果:

1. 如果前面一个 Batch 数据量突然间特别大的话,就会导致计算的高度延迟,使得当前的 Batch 不能够得得到及时的计算

2. 在一个 Batch 处理的时候,如果 Task 处理的时间波动比较大(例如说:数据倾斜、数据的峰值,出错等),其它的 Task都已经处理完了,所以整个 Batch 处理就只是在等待这个Task处理完成,却不能够使用 Memory 和 Cores 等资源处理下一个 Batch 任务,会形成资源浪费。

3. JVM GC的巨大负担

解决方法: 不要等待。意思就是:无论 Batch Duration数据大小和处理的复杂度,都会立即完成当前 Batch的处理,然后立即去处理下一个 Batch的任务。

怎么做:Spark Streaming 的业务处理逻辑放在线程池中。Spark Streaming程序执行的时候业务逻辑就是以 Task 的方式放在线程池中的,所以可以最大化地复用线程,从而最佳化的使用硬件资源。模拟代码:

dstream.foreachRDD(rdd => {

rdd.foreachPartition( item => {

//业务逻辑处理部分,使用线程池。需要注意的是:线程数受限于物理硬件,所以需要根据实际情况设定线程池中的并发 Task 的个数

})

})

二。zookeeper 的 connection timeout 时间和Session timeout 的时间

在处理大数据量的情况下,GC 的时间很有可能要十几秒,这时,如果设置的 timeout 时间比较短的话(默认的connection timeout 是10秒,Session timeout 时间是6秒),就会出问题。

三。Spark on YARN

大的公司一般采用这种方式,因为还有其它的框架运行在YARN上,YARN 统一管理计算资源的分配。为了确保 Spark 能分配到足够的资源,推荐 https://mapr.com/blog/label-based-scheduling-hadoop-clusters/

四。Backpressure

设置限流器,每次Job结束后,计算吞吐量,更新限流器的值。可以看 JobScheduler, ReceiverInputDStream,RateController, RateLimiter,ReceiverTracker中的源码

五。在 End to End 的流处理程序中,把流处理的结果放入 Hbase。

往 HBase 中存储数据的过程如下: 对于每一次的数据插入操作都会放在内存的缓存 MemStore 中,MemStore达到上限的时候,HBase会将其中的数据输出到本地的名称为 StoreFile 的文件中。在HBase中是通过 Column Family 来组织数据的(其数据结构为 Store),也就是说每个 Column Family 中有一个Store, 而一个 Store 中有很多来自 StoreFile的文件,HBase的工作机制是当StoreFile达到一定上限的时候会使用线程对这些小的 StoreFile 合并成为大的 File。这就导致 HBase 插入数据非常高效。所以 HBase在生产环境下是;Streaming外部存储的一种非常理想的选择,尤其是在数据量特别大的时候且J2ee或者移动端要实时查询海量的 Spark Streaming处理结果就特别适合。

操作 HBase 的时候每次都是基于 Table 进行操作的,HTable 是 HBase 的客户端, HTable 的弊端在于适合单表操作,但是在多线程的读写操作下不是线程安全的。执行 Put 操作,如果是多个线程共享一个 HTable 实例的话,由于不是线程安全的,这会导致写到缓存区数据冲突。其实匀们在这里已经使用了线程池来维护 HTable,这个问题基本已经不存在了,但其实还是有一个非常重要的性能消耗点可以优化。在内部创建 HTable 的时候需要 HConnection,这个实例对象的创建是非常耗时的(其实 HTable是轻量级的消耗),此时此时我们可以做以下的考虑: 1. 只有一个 HConnection 实例对象,所有的 HTable 都基于穿上实例对象; 2. 基于 HConnection 对象实例,让所有的线程来共享。

六。 Spark Streaming 的几个意见

1. Duration 设置大一点值

2. 开启2~5个Receiver

3. Spark Streaming 使用的Cores的数量 = concurrentJob的数量 * Receiver的数量 * BatchDuration / blockInterval

七。防DDos攻击

在处理DDos攻击的时候,肯定会使用到 Windows 窗口操作,updateStateByKey等。选定的窗口大小和滑动时间,以前的项目中设定的窗口大小是一个小时,滑动窗口是5分钟。  如何面对网络风暴?这个时候因为数量流量不稳定,所以要开启BackPressure机制。

随着服务的运行历史数据越来越多,此时如何高速地读写数据成为一个非常大的瓶颈。客户采用的是Redis,当时从长久服务的角度来看,个人建议采用HBase或者Canssandra。

某人视频中提到的 Spark Streaming 优化的几点事项的更多相关文章

  1. Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN

    Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...

  2. Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南

    Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...

  3. Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕

    Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...

  4. 转:Sharethrough使用Spark Streaming优化实时竞价

    文章来自于:http://www.infoq.com/cn/news/2014/04/spark-streaming-bidding 来自于Sharethrough的数据基础设施工程师Russell ...

  5. Spark Streaming实践和优化

    发表于:<程序员>杂志2016年2月刊.链接:http://geek.csdn.net/news/detail/54500 作者:徐鑫,董西成 在流式计算领域,Spark Streamin ...

  6. 某人在企业中遇到的Spark问题记录[持续更新]

    https://github.com/ssg-7max/ssg 目前 ssg内公司内部 spark streaming 处理数据源是kafka 目前遇到最大的问题是,会延迟,例如我们配置1分钟让窗口计 ...

  7. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  8. Spark Streaming+Kafka

    Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...

  9. Spark streaming消费Kafka的正确姿势

    前言 在游戏项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark streaming从kafka中不 ...

随机推荐

  1. Fchart

    1.FCF_Column3D.swf <?xml version="1.0" encoding="UTF-8"?> <graph bgcolo ...

  2. bzoj 3439: Kpm的MC密码 Trie+动态开点线段树

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=3439 题解: 首先我们发现这道题要查的是后缀不是前缀. 如果查前缀就可以迅速查找到字符串 ...

  3. iPhone X机型适配

    1.启动页 启动App,发现App只能居中显示,不能上下充满. 问题产生的原因是:iPhone X是5.8英寸,比5.5英寸的屏幕还要大,没有合适的启动页可以加载,所以只能使用以前5.5英寸的启动页, ...

  4. bzoj 1001 狼抓兔子 —— 平面图最小割(最短路)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 平面图最小割可以转化成最短路问题: 建图时看清楚题目的 input ... 代码如下: ...

  5. Select\Poll\Epoll异步IO与事件驱动

    事件驱动与异步IO 事件驱动编程是一种编程规范,这里程序的执行流由外部事件来规定.它的特点是包含一个事件循环,但外部事件发生时使用回调机制来触发响应的处理.另外两种常见的编程规范是(单线程)同步以及多 ...

  6. js一个游戏小笔记

    昨天写了个飞机大战的游戏,没弄好的一点是如何移动炮台. 开始我把移动代码写到了炮台类里面,但是怎么按都不移动.(最烦,代码对,效果不对,╮(╯▽╰)╭) 问过老师才知道,这种移动类游戏,应该把  控制 ...

  7. openstack常见问题汇总

    汇总下常见的问题以及解释下一些比较容易让人萌的参数配置等等 问题汇总1.使用纯文本模式进行复制粘贴,打死不要用word!!!可以解决绝大多数问题,如果你依然执迷不悟,那么就好自为之吧 2.创建路由器时 ...

  8. JSP介绍(4)--- JSP 过滤器

    过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的: 在客户端的请求访问后端资源之前,拦截这些请求. 在服务器的响应发送回客户端之前,处理这些响应. 过滤器通过 Web 部署描述符 ...

  9. 如何从光盘本地安装CentOS 7图形界面(Gnome GUI)

    本例中通过在CentOS 7中修改repo文件,直接从光盘或者ISO镜像文件安装Gnome图形界面(Gnome GUI),从而避免耗时从官网或镜像下载. 1.首先确保光盘或者ISO镜像文件正确连接到客 ...

  10. Redis简介及基础知识

    一.Redis简介 Redis是什么?两句话可以做下概括: 1. 是一个完全开源免费的key-value内存数据库 2. 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 string( ...