Spark Streaming 数据接收优化

看这篇文章前,请先移步Spark Streaming 数据产生与导入相关的内存分析, 文章重点讲的是从Kafka消费到数据进入BlockManager的这条线路的分析。

这篇内容是个人的一些经验,大家用的时候还是建议好好理解内部的原理,不可照搬

让Receiver均匀的分布到你的Executor上

Spark Streaming 数据产生与导入相关的内存分析中我说了这么一句话:

我发现在数据量很大的情况下,最容易挂掉的就是Receiver所在的Executor了。 建议Spark Streaming团队最好是能将数据写入到多个BlockManager上。

从现在的API来看,是没有提供这种途径的。但是Spark Streaming 提供了同时读多个topic的功能,每个topic是一个InputStream。 我们可以复用这个功能,具体代码如下:

val kafkaDStreams = (1 to kafkaDStreamsNum).map { _ => KafkaUtils.createStream(
ssc, 
zookeeper, 
groupId, 
Map("your topic" -> 1),  
if (memoryOnly) StorageLevel.MEMORY_ONLY else StorageLevel.MEMORY_AND_DISK_SER_2)}
val unionDStream = ssc.union(kafkaDStreams)
unionDStream

kafkaDStreamsNum 是你自己定义的,希望有多少个Executor 启动Receiver 去接收kafka数据。我的经验值是 1/4 个Executors 数目。因为数据还要做replication 一般,所以这样内存最大可以占到 1/2 的storage.

另外,务必给你系统设置 spark.streaming.receiver.maxRate。假设你启动了 N个 Receiver,那么你系统实际会接受到的数据不会超过 N*MaxRate,也就是说,maxRate参数是针对每个 Receiver 设置的。

减少非Storage 内存的占用

也就是我们尽量让数据都占用Spark 的Storage 内存。方法是把spark.streaming.blockInterval 调小点。当然也会造成一个副作用,就是input-block 会多。每个Receiver 产生的的input-block数为: batchInterval* 1000/blockInterval。 这里假设你的batchInterval 是以秒为单位的。 blockInterval 其实我也不知道会有啥影响。其实说白了,就是为了防止GC的压力。实时计算有一个很大问题是GC。

减少单个Executor的内存

一般在Spark Streaming中不建议把 Executor 的内存调的太大。对GC是个压力,大内存一FullGC比较可怕,很可能会拖垮整个计算。 多Executor的容错性也会更好些。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Albert陈凯

3.5 容错机制及依赖

3.5 容错机制及依赖 一般而言,对于分布式系统,数据集的容错性通常有两种方式: 1)数据检查点(在Spark中对应Checkpoint机制)。 2)记录数据...

41370
来自专栏about云

CDH(Cloudera)与hadoop(apache)对比

问题导读: 1.hadoop有几个版本? 2.CDH有几种安装方式? 3.CDH在安装认证方面做了什么改变? Cloudera的CDH和Apache的H...

52660
来自专栏pangguoming

Hadoop视频教程汇总

一 慕课网 1.Hadoop大数据平台架构与实践--基础篇(已学习) 链接:https://www.imooc.com/learn/391 2.Hadoop进阶...

78940
来自专栏进击的程序猿

实战:基于 docker 的 HA-hadoop 集群搭建

Hadoop的master和slave分别运行在不同的Docker容器中,其中hadoop-master容器中运行NameNode和ResourceManage...

1.6K20
来自专栏CSDN技术头条

大数据技术Hadoop面试题,看看你能答对多少?答案在后面

单项选择题 1. 下面哪个程序负责 HDFS 数据存储。 a)NameNode b)Jobtracker c)Datanode d)secondaryNameN...

311100
来自专栏Hadoop实操

HOSTS配置问题导致集群异常故障分析

CM节点上的所有服务的角色日志不能正常通过ClouderaManager控制台查看,显示如下错误:

49290
来自专栏华章科技

大数据技术Hadoop面试题,看看你能答对多少?答案在后面

a)NameNode b)Jobtracker c)Datanode d)secondaryNameNode e)tasktracker

16020
来自专栏美图数据技术团队

Spark on Yarn | Spark,从入门到精通

欢迎阅读美图数据技术团队的「Spark,从入门到精通」系列文章,本系列文章将由浅入深为大家介绍 Spark,从框架入门到底层架构的实现,相信总有一种姿势适合你,...

19710
来自专栏Hadoop实操

Cloudera产品支持生命周期策略

本文主要介绍Cloudera企业版产品支持的生命周期,包括CDH每个版本终止支持的预计日期。了解该策略主要是方便大家在规划搭建/升级CDH集群时的版本选择,不代...

26630
来自专栏我是攻城师

Hadoop之NameNode+ResourceManager高可用原理分析

52070

扫码关注云+社区

领取腾讯云代金券