某人,并未提他的名字,是因为看的视频是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. hdu 2044 一只小蜜蜂...(简单dp)

    一只小蜜蜂... Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  2. 5_Singleton 游戏开发中的单例模式

    强制类只有一个实例 提供全局的访问 ###为什么使用: ``` 如果没有地方访问这个类,则不会创建实例 静态类在main之前实例化, 可以尝试Lazy initialization 派生单例类, 获得 ...

  3. 数据交换格式XML和JSON对比

    1.简介: XML:extensible markup language,一种类似于HTML的语言,他没有预先定义的标签,使用DTD(document type definition)文档类型定义来组 ...

  4. tensorflow CUDA 9.0安装成功

    berli@berli-dev:~/tensorflow$ bazel-bin/tensorflow/examples/label_image/label_image 2017-12-18 00:04 ...

  5. [原]NYOJ-开灯问题-77

    大学生程序代写 //http://acm.nyist.net/JudgeOnline/problem.php?pid=77 /*题目77题目信息运行结果本题排行讨论区开灯问题 时间限制:3000 ms ...

  6. oracle rac搭建

    (一)环境准备 主机操作系统 windows10 虚拟机平台 vmware workstation 12 虚拟机操作系统 redhat 5.5 x86(32位) :Linux.5.5.for.x86. ...

  7. UIButton常见用法

    //UIButton是iOS中用来响应用户点击的控件,既可以显示文字,也可以显示图片,也可以处理用户交互 //UIButton的创建,一般采用类方法来创建,不需要释放 //UIButton 也是UIC ...

  8. 数据库:mysql 获取刚插入行id[转]

    我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的.但在多线程情况下,就不行了. 下面介 ...

  9. Dexdump 无法正常反编译问题

    WIN环境下无法正常运行,提示Unable open XXX as zip 解决方案:使用APKTOOL + JD-GUI进行替代反编译

  10. 【总结整理】JavaScript的DOM事件学习(慕课网)

    事件:在文档或者浏览器窗口中发生的一些,特定的交互瞬间 HTML和JavaScript的交互通过事件 来实现 比如:1.滚动条向下滑动,加载图片 2.图片轮播,鼠标由2-5页调换 本章内容1.理解事件 ...