热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

directDstream是什么

这篇文章主要为大家展示了“directDstream是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“dire

这篇文章主要为大家展示了“direct Dstream是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“direct Dstream是什么”这篇文章吧。

前言

前面,有分享过基于receiver的,实际上,看到receiver based Dstream大家就对阅读提不起兴趣了,实际上这是错误的,基于receiver的才是spark streaming根本,虽然direct stream才更合适。但是,我们从基于receiver可以学到很多内容,最重要的spark streaming实现原理,数据本地性等。

direct dstream运行架构图

direct Dstream是什么

对比

对比receiver based的Dstream和direct Dstream

   a 无需启动receiver,减少不必要的cpu占用

   b 减少了receiver接收数据,写入blockmanager,然后运行时再通过blockid,网络传输,磁盘读区,来获取数据这个过程。提升了效率。

   c 无需wal,进一步减少磁盘读写。

   d 可以通过手动维护offset来实现精确的一次消费。

   e Dstream中生成的RDD,并不是blockrdd,而是kafkardd,kafkardd是和kafka分区一一对应的,更便于我们把控并行度。

   f 数据本地性的问题,导致receiver存在的机器会运行过多的任务,会导致有些executor空闲。

而kafkardd,在compute函数里,会使用simpleconsumer,根据指定的topic,分区,offset范围,去kafka读取数据。010版本以后,又存在假如kafka和spark运行于同一集群,会有数据本性的概念。

数据本地性

spark streaming与kafka 082结合生成的rdd,数据本地性计算方式如下:

override def getPreferredLocations(thePart: Partition): Seq[String] = {
 val part = thePart.asInstanceOf[KafkaRDDPartition]
 // TODO is additional hostname resolution necessary here
 Seq(part.host)
}

spark streaming 与kafka 010结合生成的rdd,数据本地性计算方式如下:

override def getPreferredLocations(thePart: Partition): Seq[String] = {
 // The intention is best-effort consistent executor for a given topicpartition,
 // so that caching consumers can be effective.
 // TODO what about hosts specified by ip vs name
 val part = thePart.asInstanceOf[KafkaRDDPartition]
 val allExecs = executors()
 val tp = part.topicPartition
 val prefHost = preferredHosts.get(tp)
 val prefExecs = if (null == prefHost) allExecs else allExecs.filter(_.host == prefHost)
 val execs = if (prefExecs.isEmpty) allExecs else prefExecs
 if (execs.isEmpty) {
   Seq.empty
 } else {
   // execs is sorted, tp.hashCode depends only on topic and partition, so consistent index
   val index = Math.floorMod(tp.hashCode, execs.length)
   val chosen = execs(index)
   Seq(chosen.toString)
 }
}

对于 与kafka010结合的注意事项,实际上以前浪尖也翻译过一篇文章。

必读:Spark与kafka010整合

限速

限速,很多人使用姿势不对,详细的原理可以参看

Spark的PIDController源码赏析及backpressure详解

具体配置参数详解,可以参考:

  1. spark.streaming.backpressure.enabled 默认是false,设置为true,就开启了背压机制。

  2. spark.streaming.backpressure.initialRate 默认没设置,初始速率。第一次启动的时候每个receiver接受数据的最大值。

  3. spark.streaming.receiver.maxRate 默认值没设置。每个接收器将接收数据的最大速率(每秒记录数)。 实际上,每个流每秒最多将消费此数量的记录。 将此配置设置为0或负数将不会对速率进行限制。

  4. spark.streaming.kafka.maxRatePerPartition 使用新Kafka direct API时从每个Kafka分区读取数据的最大速率(每秒记录数)。


以上是“direct Dstream是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程笔记行业资讯频道!


推荐阅读
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • poj 3352 Road Construction ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 如何使用 `org.opencb.opencga.core.results.VariantQueryResult.getSource()` 方法及其代码示例详解 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 本文提出了一种基于栈结构的高效四则运算表达式求值方法。该方法能够处理包含加、减、乘、除运算符以及十进制整数和小括号的算术表达式。通过定义和实现栈的基本操作,如入栈、出栈和判空等,算法能够准确地解析并计算输入的表达式,最终输出其计算结果。此方法不仅提高了计算效率,还增强了对复杂表达式的处理能力。 ... [详细]
  • 本文详细探讨了二元Probit模型及其在实际应用中的重要性。作为一种广义线性模型,Probit模型主要用于处理二分类问题,与Logistic模型类似,但其假设误差项服从标准正态分布。尽管Probit模型在某些领域应用较少,但在特定情境下仍具有独特优势。文章不仅介绍了模型的基本原理,还通过实例分析展示了其在经济学、社会学等领域的具体应用。 ... [详细]
author-avatar
mzyzzyk
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有