高校文明建设网站ip 查询地址

news/2025/9/24 1:34:34/文章来源:
高校文明建设网站,ip 查询地址,大悟县建设局网站,网站改版 seoTridentTopology创建过程详解 从用户层面来看TridentTopology#xff0c;有两个重要的概念一是Stream,另一个是作用于Stream上的各种Operation。在实现层面来看#xff0c;无论是stream#xff0c;还是后续的operation都会转变成为各个Node#xff0c;这些Node之间的关系通… TridentTopology创建过程详解 从用户层面来看TridentTopology有两个重要的概念一是Stream,另一个是作用于Stream上的各种Operation。在实现层面来看无论是stream还是后续的operation都会转变成为各个Node这些Node之间的关系通过重要的数据结构图来维护。具体到TridentTopology实现图的各种操作的组件是jgrapht。 说到图两个基本的概念会闪现出来一是结点二是描述结点之间关系的边。要想很好的理解TridentTopology就需要紧盯图中结点和边的变化。 TridentTopology在转换成为普通的StormTopology时需要将原始的图分成各个group每个group将运行于一个独立的bolt中。TridentTopology又是如何知道哪些node应该在同一个group,哪些应该处在另一个group中的呢如何来确定每个group的并发度(parallismHint)的呢。这些问题的解决都与jgrapht分不开。 关于jgrapht的更多信息请参考其官方网站 http://jgrapht.org 概要 在TridentTopology中向图中添加结点的api有三种 addNodeaddSourcedNodeaddSourcedStateNode其中addNode在创建stream是使用addSourcedStateNode在partitionPersist时使用到其它的operation使用到的是addSourcedNode. addNode与其它两个方法的一个重要区别还在于addNode是不需要添加边(Edge)而其它两个API需要往图中添加edge以确定该node的源是哪个。 TridentTopology 1 2 3 4 public TridentTopology() {         _graph  new DefaultDirectedGraph(new ErrorEdgeFactory());         _gen  new UniqueIdGen();     }  在TridentTopology的构造函数中创建了DAG(有向无环图)。利用这个_graph来作为容器以存储后续过程中创建的各个node及它们之间的关系。 newStream  newStream会为DAG(有向无环图)中创建源结点其调用关系如下所示。 newStream addNode registerNode 1 protected void registerNode(Node n) {2 _graph.addVertex(n);3 if(n.stateInfo!null) {4 String id n.stateInfo.id;5 if(!_colocate.containsKey(id)) {6 _colocate.put(id, new ArrayList());7 }8 _colocate.get(id).add(n);9 } 10 }   each 作用于stream上的Operation有很多以each为例来看新的operation是如何转换成为node添加到_graph中的。 //Stream.javapublic Stream each(Fields inputFields, Function function, Fields functionFields) {projectionValidation(inputFields);return _topology.addSourcedNode(this,new ProcessorNode(_topology.getUniqueStreamId(),_name,TridentUtils.fieldsConcat(getOutputFields(), functionFields),functionFields,new EachProcessor(inputFields, function)));} 调用关系描述如下 Stream::eachTridentTopology::addSourcedNodeTridentTopology::registerSourcedNoderegisterSourcedNode的实现如下 protected void registerSourcedNode(ListStream sources, Node newNode) {registerNode(newNode);int streamIndex 0;for(Stream s: sources) {_graph.addEdge(s._node, newNode, new IndexedEdge(s._node, newNode, streamIndex));streamIndex;} } 注意此处添加edge是是有索引的这样可以区别处理的先后顺序。 在Stream中含有成员变量_node表示stream最近停泊的node,有了该变量添加edge才成为了可能。   partitionPersist public TridentState partitionPersist(StateSpec stateSpec, Fields inputFields, StateUpdater updater, Fields functionFields) {projectionValidation(inputFields);String id _topology.getUniqueStateId();ProcessorNode n new ProcessorNode(_topology.getUniqueStreamId(),_name,functionFields,functionFields,new PartitionPersistProcessor(id, inputFields, updater));n.committer true;n.stateInfo new NodeStateInfo(id, stateSpec);return _topology.addSourcedStateNode(this, n);} 调用关系 Stream::partitionPersistTridentTopology::addSourcedStateNodeTridentTopology::registerSourcedNode与addNode及addSourcedNode不同的是addSourcedStateNode返回的是TridentState而非Stream。 既然谈到了TridentState就不得不谈到其另一面Stream::stateQuery, public Stream stateQuery(TridentState state, Fields inputFields, QueryFunction function, Fields functionFields) {projectionValidation(inputFields);String stateId state._node.stateInfo.id;Node n new ProcessorNode(_topology.getUniqueStreamId(),_name,TridentUtils.fieldsConcat(getOutputFields(), functionFields),functionFields,new StateQueryProcessor(stateId, inputFields, function));_topology._colocate.get(stateId).add(n);return _topology.addSourcedNode(this, n);} 从此处可以看出stateQueryNode最起码有两个inputStream一是从TridentState而来表示状态已经改变另一个是处于drpcStream这个方面的上一跳结点。 build TridentTopology::build是将TridentTopology转变为StormTopology的过程这一过程中最重要的一环就是将_graph中含有的node进行分组。 grouping 算法逻辑概述 将boltNodes中的每个boltNode作为一个group加入全部加入initialGroups以graph和initialGroups作为入参创建GraphGrouper分组的过程其实就是进行合并的过程详见GraphGrouper::mergeFully() 如果从当前group1的输出目的地都是属于group2则将group1,group2合并如果当前group1的所有输入源都是来自于group2则将group1group2合并将需要合并的group1,group2作为入参创建新的group同时将group1,group2从已有的集合出移除 public void mergeFully() {boolean somethingHappened true;while(somethingHappened) {somethingHappened false;for(Group g: currGroups) {CollectionGroup outgoingGroups outgoingGroups(g);if(outgoingGroups.size()1) {Group out outgoingGroups.iterator().next();if(out!null) {merge(g, out);somethingHappened true;break;}}CollectionGroup incomingGroups incomingGroups(g);if(incomingGroups.size()1) {Group in incomingGroups.iterator().next();if(in!null) {merge(g, in);somethingHappened true;break;}} }}} GraphGrouper::merge() private void merge(Group g1, Group g2) {Group newGroup new Group(g1, g2);currGroups.remove(g1);currGroups.remove(g2);currGroups.add(newGroup);for(Node n: newGroup.nodes) {groupIndex.put(n, newGroup);}} 在group之间添加partitionNode // add identity partitions between groupsfor(IndexedEdgeNode e: new HashSetIndexedEdge(graph.edgeSet())) {if(!(e.source instanceof PartitionNode) !(e.target instanceof PartitionNode)) { Group g1 grouper.nodeGroup(e.source);Group g2 grouper.nodeGroup(e.target);// g1 being null means the source is a spout nodeif(g1null !(e.source instanceof SpoutNode))throw new RuntimeException(Planner exception: Null source group must indicate a spout node at this phase of planning);if(g1null || !g1.equals(g2)) {graph.removeEdge(e);PartitionNode pNode makeIdentityPartition(e.source);graph.addVertex(pNode);graph.addEdge(e.source, pNode, new IndexedEdge(e.source, pNode, 0));graph.addEdge(pNode, e.target, new IndexedEdge(pNode, e.target, e.index)); }}} _graph中所有的node在变换过后变成两组元素一是spoutNodes另一个是合并后的mergedGroup. spoutNodes中的每个元素作为spout添加到TridentTopologyBuilder的_spouts数组中mergedGroup中的每个group添加到TridentTopologyBuilder的_bolt数组中。在TridentTopologyBuilder::build()中最主要的事情是为每个_spouts和_bolts数组中的成员添加grouping关系。 小结 到目前为止通过两篇文章分析了TridentTopology的创建过程及其运行时在每个TridentBoltExecutor中的消息传递情况。接下来会分析TridentTopology提供的API实现及其作用场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自己如何做家政网站wordpress百度不收录

腾讯云轻量应用服务器和云服务器哪个好?云服务器CVM更好,但是轻量应用服务器性价比更高,轻量应用服务器CPU内存公网带宽配置更高,价格更优惠。腾讯云服务器网txyfwq.com轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&…

专业开发网站多少钱网站开发服务转包合同

大模型论文阅读:ADAPTIVE BUDGET ALLOCATION FOR PARAMETEREFFICIENT FINE-TUNING 论文链接:https://arxiv.org/pdf/2303.10512v1.pdf 当存在大量下游任务时,微调所有预训练模型的参数变得不可行。因此,为了以参数高效的方式学习预训练权重的增量更新,提出了许多微调方法,…

建设银行东航龙卡登录东航网站采购管理软件免费版

第17章《干系人管理》(第一部分) 1 章节内容2 管理基础3 管理过程3.1 管理的过程★★★ (22上44)3.2 管理ITTO汇总★★★ 1 章节内容 【本章分值预测】大部分内容不变,细节有一些变化,预计选择题考2分&…

网站做su什么意思乐清网站艰涩

随着AIGC的爆火,图片生成技术得到飞速发展,当前AI生成的图片已达到真假难辨的高保真度。例如stable diffusion与midjourney为代表的文生图大模型。不过,当合成图片中出现文字内容时,现存的AI技术依然无法驾驭文字内容。因此,modescope提出了一种新型的文字生成方法,此方法…

做网站口碑比较好的大公司城市建设模拟游戏登陆网站

松任谷由实是谁?日本人引以为傲的queen of pops?没错,但她,却不仅只是这样。她是日本音乐界的女王,日本流行音乐界始祖级别的人物,日本新音乐活着的精神象征,日本流行界天花板级别的歌手。她和其…

网站vps无法登陆东莞市手机网站建设平台

本文介绍自己建立一个redis-cluster集群的实践,三主三从,使用docker搭建。 其实搭建很简单,就是建立6个容器,每个容器配置不同的端口号,其他的都是一样的。 假设建立6个端口号分别为 5555到5560。 配置文件 port 5…

如何查询网站开发商公益网站建设

oracle 11g 数据库cmd修改用户名密码及创建用户1. 数据库oracle 11g cmd命令修改用户名和密码1.1. 前言1.2. cmd窗口登录oracle1.3. 更改system用户的密码1.4. 测试修改成果2. 创建新用户并赋予权限2.1. cmd窗口登录oracle2.2.创建用户2.3.分配权限2.4.oracle用户权限等级1. 数…

中山市建设工程 交易中心网站深圳论坛网站设计哪家公司好

1.spring boot 读取application.properties 该文件是iso8859编码 如果是直接写中文 读取时会乱码 显示成?? 必须得转ascii码才能正常显示 其他方法测试也不行 Value("${apig.order.tiaokong.qianzi}") private String apigOrderTiaokongQianzi;

免费网站建站凡科建站工程建设云小程序

你好 具有新JMetro样式的另一个版本(深色和浅色版本): 分割菜单按钮 分割窗格 药丸按钮/分段按钮 调整现有样式和错误修复。 继续阅读以获取详细信息。 分割菜单按钮 以下是一个动画,显示了新的“拆分菜单按钮” JMetro浅色…

有哪些熟悉的网站是jsp做的咨询公司企业文化

5月5日至9日是武汉市中考网上报名填报志愿的日子,填报志愿之前应提前了解本区的一批次、二批次和三批次学校的名单,了解其历年录取分数线,并选中最合适最理想的一所学校进行填写,下面我们来看详细名单。武汉各区一、二、三批次高中…

网站定制兴田德润实力强百度小程序怎么打开

前言友情提示:建议阅读本文之前先了解下.Net Core配置体系相关,也可以参考本人之前的文章《.Net Core Configuration源码探究 [1]》然后对.Net Core的Configuration体系有一定的了解,使得理解起来更清晰。在.Net6中关于配置相关多出一个关于配置相关的类…

山西专业制作网站免费软件站

1 引言 在Anaconda中如果没有指定路径,虚拟环境会默认安装在anaconda所安装的目录下,但如果默认环境的磁盘空间不足,无法满足大量安装虚拟环境的需求,此时我们需要更改虚拟环境的安装路径,有以下两种方案: 方案1: 每次…

系统集成销售和网站建设销售重庆住房和城乡建设厅官方网站

🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前学习C/C、算法、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:CSTL&…

wordpress全站美化流水线 东莞网站建设

WhisperFusion 基于 WhisperLive 和 WhisperSpeech 的功能而构建,在实时语音到文本管道之上集成了大型语言模型 Mistral (LLM)。 LLM 和 Whisper 都经过优化,可作为 TensorRT 引擎高效运行,从而最大限度地提高性能和实时处理能力。WhiperSpe…

seo长尾关键词搜外seo

目录 一、3407. 子字符串匹配模式二、3408. 设计任务管理器三、3409. 最长相邻绝对差递减子序列四、3410. 删除所有值为某个元素后的最大子数组和 一、3407. 子字符串匹配模式 题目链接 字符串匹配问题,把字符串 p 分成两段 、,i 是 ’ * ’ 的下标&am…

字符串哈希模板

bool isprime(int n) {if (n <= 1) {return false;}for (int i = 2; i * i <= n; i++) {if (n % i == 0) {return false;}}return true; } int findPrime(int n) {while (!isprime(n)) {n++;}return n; }void sl…

微企点做的网站百度搜得到吗竞价如何屏蔽恶意点击

目录 冒泡排序算法:) 选择排序算法:) 插入排序算法:) 冒泡排序算法:) 思想&#xff1a;依次比较相邻两个元素&#xff0c;重复的进行直到没有相邻元素需要交换&#xff0c;排序完成。 #!/bin/bash arr(12 324 543 213 65 64 1 3 45) #定义一个数组 n${#arr[*]} #获取数组…

朋友圈网站文章怎么做的wordpress分类目录seo

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式是什么&#xff1f; Redis 的发布订阅模式允许多个客户端订阅一个频道&#xff0c;当消息被发布到该频道时&#xff0c;所有订阅该频道的客户端都会收到该消息。Redis 的发布订阅模式分为两个角色&#xff1a;发布者和订阅…

闲鱼怎么做钓鱼网站怎么推广自己的店铺

Go并发&#xff1a;Goroutine 1.并发基础概念&#xff1a;进程、线程、协程 (1) 进程 可以比作食材加工的一系列动作 进程就是程序在操作系统中的一次执行过程&#xff0c;是由系统进行资源分配和调度的基本单位&#xff0c;进程是一个动态概念&#xff0c;是程序在执行过程…

推荐几个高端大气上档次网站北京互联网金融公司排名

看文献过程中不断发现有太多不懂的基础知识&#xff0c;故长期更新这类blog不断补充在这过程中学到的知识。由于这些内容与我的研究方向并不一定强相关&#xff0c;故记录不会很深入请见谅。 【通信基础知识补充7】25年2月通信基础知识补充1 一、多普勒频移与多普勒扩展傻傻分不…