Spark官方3 ---------Spark Streaming编程指南(1.5.0)
Design Patterns for using foreachRDD
dstream.foreachRDD是一个强大的原语,允许将数据发送到外部系统。然而,了解如何正确有效地使用该原语很重要。避免一些常见的错误如下。
通常向外部系统写入数据需要创建一个连接对象(例如与远程服务器的TCP连接),并使用它将数据发送到远程系统。为此,开发人员可能无意中尝试在Spark驱动程序创建连接对象,然后尝试在Spark workers中使用它来将记录保存在RDD中。例如(在Scala中):
dstream.foreachRDD { rdd =>val connection = createNewConnection() // executed at the driverrdd.foreach { record =>connection.send(record) // executed at the worker } }
这是不正确的,因为这需要将连接对象序列化并从驱动程序发送给worker。这样的连接对象很少能跨机器传输。此错误可能会显示为序列化错误(连接对象不可序列化),初始化错误(连接对象需要在工作人员初始化)等。正确的解决方案是在worker创建连接对象。
但是,这可能会导致另一个常见的错误 - 为每个记录创建一个新的连接。例如,
dstream.foreachRDD { rdd =>rdd.foreach { record =>val connection = createNewConnection()connection.send(record)connection.close()} }
通常,创建连接对象具有时间和资源开销。因此,创建和销毁每个记录的连接对象可能会引起不必要的高开销,并可显着降低系统的总体吞吐量。一个更好的解决方案是使用rdd.foreachPartition - 创建一个连接对象,并使用该连接在RDD分区中发送所有记录。
dstream.foreachRDD { rdd =>rdd.foreachPartition { partitionOfRecords =>val connection = createNewConnection()partitionOfRecords.foreach(record => connection.send(record))connection.close()} }
这样可以在多个记录上摊销连接创建开销。
最后,可以通过在多个RDD /batches 之间重复使用连接对象来进一步优化。可以维护连接对象的静态池,而不是多个批次的RDD被推送到外部系统时可以重用,从而进一步减少开销。
dstream.foreachRDD { rdd =>rdd.foreachPartition { partitionOfRecords =>// ConnectionPool is a static, lazily initialized pool of connectionsval connection = ConnectionPool.getConnection()partitionOfRecords.foreach(record => connection.send(record))ConnectionPool.returnConnection(connection) // return to the pool for future reuse } }
请注意,池中的连接应根据需要懒惰创建,如果不使用一段时间,则会超时。这实现了最有效地将数据发送到外部系统。
其他要记住的要点
1.DStreams通过输出操作进行延迟执行,就像RDD由RDD actions懒惰执行一样。具体来说,DStream输出操作中的RDD动作强制处理接收到的数据。因此,如果您的应用程序没有任何输出操作,或者在dstream.foreachRDD()中没有任何RDD action操作,那么任何操作都将不会被执行。系统将简单地接收数据并将其丢弃。
2.默认情况下,输出操作是一次一个执行的。它们按照它们在应用程序中定义的顺序执行。
转载于:https://www.cnblogs.com/Dhouse/p/7646189.html
Spark官方3 ---------Spark Streaming编程指南(1.5.0)相关推荐
- Spark Streaming 编程指南[中英对照]
2019独角兽企业重金招聘Python工程师标准>>> 基于Spark 2.0 Preview的材料翻译,原[英]文地址: http://spark.apache.org/docs/ ...
- Spark编程指南V1.4.0(翻译)
Spark编程指南V1.4.0 · 简介 · 接入Spark · Spark初始化 · 使用Shell · 在集群上部署代码 · ...
- 高质量C++/C编程指南 ver 1.0
高质量C++/C编程指南 ver 1.0 转载于:https://www.cnblogs.com/gavinhughhu/archive/2009/12/25/1631800.html
- 编程实现将rdd转换为dataframe:源文件内容如下(_第四篇|Spark Streaming编程指南(1)
Spark Streaming是构建在Spark Core基础之上的流处理框架,是Spark非常重要的组成部分.Spark Streaming于2013年2月在Spark0.7.0版本中引入,发展至今 ...
- spark RDD官网RDD编程指南
http://spark.apache.org/docs/latest/rdd-programming-guide.html#using-the-shell Overview(概述) 在较高的层次上, ...
- hive编程指南电子版_第三篇|Spark SQL编程指南
在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...
- spark-sql建表语句限制_第三篇|Spark SQL编程指南
在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...
- hive编程指南_第三篇|Spark SQL编程指南
在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...
- 农行app怎么开消息服务器,农行网上支付平台-交易市场接口编程指南.doc
农行网上支付平台-交易市场接口编程指南 中国农业银行网上支付平台 交易市场 PHP商户接口编程指南 Java Edition V1.0 修订历史纪录 日期版本说明作者2009/11/18V1.0初稿童 ...
- SPARK STREAMING之1:编程指南(翻译v1.4.1)
SPARK STREAMING之1:编程指南(翻译v1.4.1) @(SPARK)[spark, 大数据] SPARK STREAMING之1编程指南翻译v141 概述 快速入门例子 基本概念 Lin ...
最新文章
- Linux下文件如果没有权限不能被Apache访问
- 测试使用2mH的工字型电感在接收150kHz导航信号中性能
- matlab编程选择语句,matlab编程控制语句
- C++ String类写时拷贝 4
- Python(20)-高级数据类型的公共方法
- perl python json_Perl解析JSON数据精解
- webdrive不更新_关于selenium 用Webdrive打开Firefox不含有插件的问题(python)
- 小Q正在给一条长度为n的道路设计路灯安置方案。 为了让问题更简单,小Q把道路视为n个方格,需要照亮的地方用'.'表示, 不需要照亮的障碍物格子用'X'表示。
- 必备的查询网址:查征信、婚姻、交友借钱明明白白
- html飞机大战论文,7.HTML5--飞机大战
- 基于格的密码与SABER
- Ubuntu环境下用docker从0到1部署Elasticsearch 7集群
- iOS 5G网络判断
- Adobe Premiere Pro CS6打开报错(Oxc000007b)解决办法
- android水平wheelview,android:自定义横向滚动的WheelView
- android电视原理图,电视机的基本工作原理及结构组成
- The Design of design
- 如何创建自己的云盘-私有云盘
- 技术汇之物联网设备网关技术架构设计
- jquery 视觉特效(新闻滚动浏览)
热门文章
- Linux 之 CentOS 7.2 安装 Java JDK
- 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_09-webpack研究-webpack介绍
- 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_05-CMS需求分析-什么是CMS...
- 【共读Primer】8.[2.1] 基本内置类型(2) Page32
- 音视频重新封装的流程
- centos6.5和centos7如何搭建php环境(包括php7)
- python学习-3.一些常用模块用法
- jQuery实用小技巧--输入框文字获取和失去焦点
- 防止恶意登录的设计思路
- weka连接mysql数据库