ING国际银行基于Volcano的大数据分析平台应用实践

摘要:ING集团发表了《Efficient Scheduling Of High Performance Batch Computing For Analytics Workloads With Volcano - Krzysztof Adamski & Tinco Boekestijn, ING》主题演讲。

在KubeCon + CloudNativeCon North America,ING集团发表了《Efficient Scheduling Of High Performance Batch Computing For Analytics Workloads With Volcano - Krzysztof Adamski & Tinco Boekestijn, ING》主题演讲,重点介绍了云原生批量计算项目Volcano如何在数据管理平台中为大数据分析作业提供高性能调度工作。

详情参见:KubeCon + CloudNativeCon North America

ING背景介绍

ING集团(荷兰语:Internationale Nederlanden Groep),亦名荷兰国际集团,是一个国际金融服务私营企业,成立于1991年,由荷兰最大的保险公司Nationale-Nederlanden,与荷兰的第三大银行NMB PostBank Group合并而成。

ING集团的服务遍及全球40多个国家,核心业务是银行、保险及资产管理等。ING集团的全球职员大约56,000人,顾客5320万人,包括自然人、家庭,企业、政府及其他等,例如基金组织。

业务背景介绍

在银行行业有许多法规和限制,如:监管要求在全球范围内各不相同、数据孤岛-全局和本地限制、数据安全、合规创新等,想要快速引入新技术不是一件容易的事情,为此,ING布局符合自身产业的DAP平台(Data Analytics Platform),为全球50%的ING员工提供安全的、自助的端到端分析能力,帮助员工在数据平台之上构建并解决业务问题。

2013年开始我们有了数据平台的概念,2018年通过引入云原生技术打造新一代基础设施平台,从那时起,平台需求有了稳定的增长,采用率也在持续提升,目前数据索引平台上的项目已超过400个。我们所构建的平台目标是在高度安全的自助服务平台中完成所有分析需求,并且具备以下特点:

  1. 开源工具模型
  2. 强大的计算能力
  3. 严格的安全和合规措施
  4. 所有的分析集中在同一个平台
  5. 满足全球和本地需求

挑战与方案

目前我们在由传统的Hadoop平台向Kubernetes过渡,但是对于作业管理和多框架支持方面还存在一些挑战,如下:

1.Job的管理

a.Pod级调度,无法感知上层应用

b.缺乏细粒度的生命周期管理

c.缺乏任务依赖关系,作业依赖关系

2.调度

a.缺少基于作业的调度,如:排序、优先级、抢占、公平调度、资源预定等

b.缺少足够的高级调度算法,如:CPU拓扑、任务拓扑、IO-Awareness,回填等

c.缺少对作业、队列、命名空间之间资源共享机制的支持

3.多框架支持

a.对Tensorflow、Pytorch等框架的支持不足

b.对每个框架部署(资源规划、共享)等管理比较复杂

利用Kubernetes来管理应用服务(无状态应用、甚至是有状态应用)是非常方便的,但是对于批量计算任务的调度管理不如yarn友好,同样yarn也存在一些限制,比如对新框架的支持不够完善,比如TensorFlow、Pytorch等,为此,我们也在寻找新的解决方案。

▍Kubernetes + Hadoop

在我们之前的集群管理上,会把Hadoop和Kubernetes的调度分开,基本上所有的spark作业都会运行在Hadoop集群中,其他的一些任务和算法会运行在Kubernetes集群,我们的目标是希望所有的任务全部运行在Kubernetes集群,这样管理起来会更简单。

Kubernetes和YARN共同工作时,由于Kubernetes和Hadoop资源是静态划分的,在正常办公时间,Hadoop应用和Kubernetes各自使用自身分配资源,即便spark任务压力大也无法借用更多资源。夜晚时间,集群中仅有批处理任务,Kubernetes资源全部空闲,却无法分配给Hadoop进行有效利用,对于调度平台来讲,这不是一种最佳的资源分配方式。

▍Kubernetes with Volcano

使用Kubernetes管理整个集群,通过Volcano进行spark任务调度,此时不需要再对资源做静态划分,集群资源可根据Pod、Batch、Interactive任务的优先级、资源压力等进行动态调整,集群整体资源利用率得到极大提升。比如在正常办公时间内,常规服务应用资源空闲的情况下,Batch和Interactive应用资源需求增多时,可以暂时借用常规服务的资源;在假期和夜晚休息时,Batch业务可以使用集群所有资源进行数据计算,集群资源利用率得到极大提升。

比如在正常办公时间内,常规服务应用资源空闲的情况下,Batch和Interactive应用资源需求增多时,可以暂时借用常规服务的资源;在假期和夜晚休息时,Batch业务可以使用集群所有资源进行数据计算,集群资源利用率得到极大提升。

Volcano是专为Kubernetes而生的批处理调度引擎,其提供了以下能力:

  1. 加权优先级的作业队列
  2. 如果集群具有备用容量,可提交超过队列资源限制的任务
  3. 当更多的pod被调度时,具备抢占能力
  4. 丰富可配置的工作负载调度策略
  5. 兼容YARN的调度能力

Volcano的引入,补齐了Kubernetes平台对批处理作业的调度管理能力,并且自Apache Spark 3.3版本以来,Volcano被作为Spark on Kubernetes的默认batch调度器,安装使用更方便。

业务常用特性

▍冗余与局部亲和

Volcano保留Kubernetes中pod级别的亲和性反亲和性策略配置,并增加了task级别的亲和性和反亲和性策略。

▍DRF(Dominant Resource Fairness)调度

DRF调度算法的全称是Dominant Resource Fairness,是基于容器组Domaint Resource的调度算法。volcano-scheduler观察每个Job请求的主导资源,并将其作为对集群资源使用的一种度量,根据Job的主导资源,计算Job的share值,在调度的过程中,具有较低share值的Job将具有更高的调度优先级。

比如集群资源总量为CPU:18C,Memory:72GB,两个用户分别是User1和User2,每个User分配1个队列,在提交作业时会根据主导资源计算job的调度优先级。

  • User1: CPU share值为 6/18=0.33,Memory share值为 24 / 72 = 0.33,最终share值为0.33
  • User2:CPU share值为 12/18=0.67,Memory share值为 24 / 72 = 0.33,最终share值为0.67

DRF策略在任务调度时,优先分配share值较低的Job,即User1所申请的资源。

集群内队列资源可以通过配置权重值进行划分,但是当本队列提交任务超出队列分配的资源,并且其他队列存在资源空闲时,可以进行队列间资源共享。即User2在使用完本队列CPU资源后,可以使用User1队列内的空闲CPU资源。当User1队列提交新任务需要CPU资源时,将会触发抢占动作,回收User1被其他队列借用的资源。

▍避免资源匮乏

在使用过程中,需要避免批量计算任务与自有服务出现资源抢占与冲突的问题。比如:我们集群中有两个可用节点,集群中需要部署一个统一的服务层对外提供服务,比如Presto,或者类似Alluxio的缓存服务。但是在批量计算调度时,集群的资源空间有可能全部被占用,我们将无法完成自有服务的部署或升级,为此我们增加了空间可用系数相关配置,为集群预留一些备用空间,用于自有服务的部署使用。

▍DRF 仪表盘

我们根据Volcano的监控数据做了一个drf调度的仪表盘,在不同层次显示更细粒度的调度信息。在业务集群中,我们有一个队列存放交互式用户的任务,另有队列存放平台运行的所有重大项目的计算任务,我们可以为重大项目队列提供一定的资源倾斜,但是此时对交互式用户的任务将不会太友好。

目前我们正在考虑增加集群高峰时段展示的功能,为用户提供更多的集群使用状态和压力等信息,在自助服务平台用户视角来看,用户按照集群的繁忙程度选择自己任务的开始时间,这样可以避免后台复杂的配置就可以获得高性能的运算体验。

总结

Volcano对批处理任务调度做了很好的抽象,使我们在Kubernetes平台能够获得更高的调度性能,后面我们也会将开发的功能逐步回合社区,比如:DRF Dashboard、在每个节点添加空闲空间、自动队列管理、更多的Prometheus监控指标、Grafana仪表盘更新、kube-state-metrics更新和集群角色限制等。


Volcano社区技术交流地址

Volcano官网:http://volcano.sh

GitHub : http://github.com/volcano-sh/volcano

每周例会: http://zoom.us/j/91804791393

 

点击关注,第一时间了解华为云新鲜技术~

本文转载于网络 如有侵权请联系删除

相关文章

  • java冒泡排序概练_Java的冒泡排序[通俗易懂]

    大家好,又见面了,我是你们的朋友全栈君。Java的冒泡排序一、冒泡排序基本概念冒泡排序,顾名思义,像冒泡一样的排序。对于一组数字,如{1、4、3、7、5、8、6}这一组数字,使用冒泡排序的话应该是按照以下步骤:第一趟:从第一个数开始,与相邻的数进行比较,然后把大数放在后面,小数放在前面,即先比较第一个数和第二个数,把大数放在后面,小数放在前面,再比较第二个数和第三个数,把大数放在后面,小数放在前面,再比较第三个数和第四个数,把大数放在后面,小数放在前面,以此类推,直到比较完最后一个数。因为每一次的比较都会把大数放在后面,所有当第一次循环比较完毕之后,最后一个数字就是这一组数字中最大的一个数。如{1、4、3、7、5、8、6}这一组数字,首先比较1和4,因为4>1,所以4在1后面,然后比较4和3,同理4会在3后面,以此类推,第一次循环完毕之后的顺序是{1、3、4、5、7、6、8},此时最后一位数8就是最大的数字。第二趟:任然从第一个数开始开始比较,(当然,可能因为第一次循环比较时会导致现在的第一个数字不是一开始的数字),直到比较到倒数第二位数(因为第一次循环中已经找到最大的数并且放到

  • istio 简介

    文章目录什么是istio?istio解决了什么痛点?总结istio的解决方案流量管理安全性可观察性平台支持什么是istio?讲多了记不住,那就:服务网格+微服务治理。istio解决了什么痛点?了解Istio得从微服务架构谈起,微服务是在2012年提出的概念,其根本思想是通过拆分原则,希望一个服务只负责业务中一个独立的功能,这样任何一个需求不会因为发布或者维护而影响到不相关的服务,所有服务都可以做到独立部署运维,当然这也只是微服务架构给我们带来的好处之一。但是:首先,原来的单个应用拆分成了许多分散的微服务,它们之间相互调用才能完成一个任务,而一旦某个过程出错(组件越多,出错的概率也就越大),就非常难以排查。用户请求出现问题无外乎两个问题:错误和响应慢。如果请求错误,那么我们需要知道那个步骤出错了,这么多的微服务之间的调用怎么确定哪个有调用成功?哪个没有调用成功呢?如果是请求响应太慢,我们就需要知道到底哪些地方比较慢?整个链路的调用各阶段耗时是多少?哪些调用是并发执行的,哪些是串行的?这些问题需要我们能非常清楚整个集群的调用以及流量情况。 此外,微服务拆分成这么多组件,如果单个组件出错的概

  • React Hooks笔记:useState、useEffect和useLayoutEffect

    ReactHooksHook是React16.8的新增特性,可以让你在函数组件中使用state以及其他的React特性。从概念上讲,React组件一直更像是函数。而Hook则拥抱了函数,同时也没有牺牲React的精神原则。优点代码可读性更强,原本的写法同一块功能的代码逻辑被拆分在了不同的生命周期函数中,不利于维护和迭代,通过ReactHooks可以将功能代码聚合,方便阅读维护。不用再去考虑this的指向问题。在类式组件中,必须去理解JavaScript中this的工作方式。更容易复用代码。每调用useHook一次都会生成一份独立的状态,这个没有什么黑魔法,函数每次调用都会开辟一份独立的内存空间。虽然状态(fromuseState)和副作用useEffect的存在依赖于组件,但它们可以在组件外部进行定义。这点是classcomponent做不到的,你无法在外部声明state和副作用(如componentDidMount)。代码量更少,不需要像React.Component那样写太多的模板代码。缺点响应式的useEffect。hooks不擅长异步的代码(旧引用问题)。customhooks

  • 高考考生利用5G屏蔽漏洞上传考题作弊,这事应该5G背锅吗?

    6月8日,武汉市黄陂区教育局发布考生吴某某舞弊一事的情况通报,考生吴某某违规携带手机进考场拍摄试卷,监考人员存在入场安检和监考失职。随后,黄陂区招考办向记者回应此事称,或因5G信号屏蔽出现漏洞,导致该考生能用手机上传考题。为什么5G信号屏蔽会出现漏洞呢?我们都知道,在某些特殊场景下是需要屏蔽手机信号,以防止泄密或作弊的,比如某些涉密的会议就不允许携带手机,到了也没有,在会场内手机信号是会被屏蔽的。而这些特殊场景中最典型的就是高考考场——高考几乎是中国人人生中最重要的事情之一,确保其公平性就成为了各地教育局的重要工作,为了确保公平,高考会场会采取各式各样的反作弊手段,金属探测仪、考官检查、指纹解锁等,而其中最普遍的就是信号屏蔽。如今各种电子设备层出不穷,一些经过伪装甚至可以逃避检测,作弊的考生就是通过携带电子设备进考场将题目输出外界,然后考场外的人帮助进行答题,以达到作弊的目的,而这一切的基础就是——必须通过网络进行传播!在这种情况下,信号屏蔽就显得格外的重要。那信号屏蔽是怎么操作的呢?简单来说,以手机为例,手机需要通过信号塔与考场外的其他设备进行通信,而无线通信是需要电磁波来承载的,根

  • 人生苦短,我用k8s--------------k8s的前世今生

    Kubernetes是什么意思?为什么又称作K8S?Kubernetes的名字来自希腊语,意思是“舵手”或“领航员”。K8s是将8个字母“ubernete”替换为“8”的缩写。 文章目录一:K8S诞生史1、公有云类型说明:IAAS,PAAS,SAAS2、资源管理器的诞生(1)MESOS(2)DockerSwarm(3)Kubernetes3、K8S优势二、K8S架构分析1、K8S前身Borg系统架构介绍2、kubernetes的系统架构3、组件介绍Kubernetes是什么意思?为什么又称作K8S?Kubernetes的名字来自希腊语,意思是“舵手”或“领航员”*。*K8s是将8个字母“ubernete”替换为“8”的缩写。一:K8S诞生史通过发展史来了解K8S的诞生1、公有云类型说明:IAAS,PAAS,SAAS在云计算的概念中,我们可以把公有云分为三个层面,IAAS(基础设施即服务),PAAS(平台即服务),SAAS(软件即服务).IAAS:基础设施即服务。 Infrastructure-as-a-Service(IAAS),国内做的最好的就是阿里云。 Platform-as-a-

  • 学习 iOS Application Security 需要注意的一些点

    0.基础环境iPhone5s64bitiOS8.1已越狱1.mobileTerminal使用源http://cydia.angelxwind.net的版本;vim版本7.1-3p,不要升级到7.3-1;2.dyld:Librarynotloaded:/usr/lib/libpcre.0.dylib==》apt-getinstallpcre3.在ssh登录后执行命令时可能卡住,需要点击手机激活屏幕。4.Cydia仓库搜索时大小写不敏感5.使用git提示'fatal:Unabletofindremotehelperfor‘https’,将https协议换成git6.解决IOS"Illegalinstruction:4"以及gdb'Unrecognizedosabi0inarm_set_osabi_from_host_info'错误通过cydia一些仓库下载的工具版本有限,可以直接下载deb包安装(比如cydia搜到的gcc和gdb版本都少了'p')libgcc:http://apt.saurik.com/debs/lib

  • 数据结构第四次实验 矩阵快速转置与矩阵加法

    #include<bits/stdc++.h> usingnamespacestd; structxyz{ inti,j; intv; }Triple; structxsjz{//存储系数矩阵 xyzdata[100]; intmu,nu,tu; }TsMatrix; intoder[10][3]={{1,2,12},{1,3,9},{3,1,-3},{3,6,14},{4,3,24},{5,2,18},{6,1,15},{6,4,-7},{7,2,8}};//原始数据 xsjzM,T; voidfastzz()//快速转置 { printf("------------------------------\n"); printf("转置\n"); inti,p,col,pos,cpot[10]; intnum[10]; T.mu=M.mu;//行 T.nu=M.nu;//列 T.tu=M.tu;//数 for(i=1;i<=M.nu;i++)num[i]=0; for(p=1;p<=

  • 原 PostgreSQL的基础数据类型分析记录

      前期,我参与了公司开发的数据库数据迁移工具的工作,以及之前的对Page的分析记录,在此进一步将数据库的数据类型做一下分析记录。    一、数据库系统表pg_type  PostgreSQL的所有数据类型都存储在系统表pg_type中。   pg_type的表结构如下(这里是从源码中进行介绍的,源码可以点击pg_type.h):CATALOG(pg_type,1247)BKI_BOOTSTRAPBKI_ROWTYPE_OID(71)BKI_SCHEMA_MACRO { NameData typname; /*typename*/ Oid typnamespace; /*OIDofnamespacecontainingthistype*/ Oid typowner; /*typeowner*/ int16 typlen; bool typbyval; char typtype; char typcategory; /*arbitrarytypeclassification*/ bool typispreferred;/*istype"pr

  • 致癌的日用品 美国公益宣传片

    这是一部美国的环保公益短片,内容涉及到每一个人,我们天天都在使用的各种日用品中,民众日用而不自知,含有各种各样的有害化学物质,就连一些大牌也不例外。视频内容视频中讲述了我们使用的日化用品中含有的致癌及其他有毒化学物,以及有毒物质为什么会出现在日化用品中、我们应该如何去做。生物的进化,让世界有了自己的文明;科技的发展,正逐步改变世界。它如同一把双刃剑,让世界变得更好,也让世界变得更坏;它为人类的生活带来舒适与便捷,同时却也危害着人类赖以生存的环境。而这些危机仿佛隐形般潜伏在我们的身边。在这些隐藏的危险中,首当其冲的就是石化清洁剂。石化清洁剂最早是由德国人研发成功,它的主要成分是荧光剂、甲醛、含磷物质、苯等;接着时间来到了第二次世界大战时期的美国,他们从石油副产品中提炼,成功的将其开发运用到普及化的日常洗涤清洗类商品中。在二次世界大战结束后,这一技术被日本引进并大面积使用。知道这些之后,你是否好奇,这个叫做石化清洁剂的物质,似乎助推了人类生活卫生事业的发展,为什么会是危害环境与人类健康的首要威胁呢?让我们先看2项数据:1.根据世界环境保护单位的调查统计结果,地球水质与土壤的污染源,70%来

  • setInterval与clearInterval使用示例

    setInterval是一个很有用的js函数,可以用来重复执行某些功能,利用这个我们可以实现一些很有趣的功能,比如:不刷新页面的情况下,"实时"获取其它会员给你发来的问候,并弹出显示之类下面给一个示例代码:(里面用了一些jquery的方法)Code <html> <head> <title>jquery操作Select</title> <scripttype="text/javascript"src="jquery-1.2.6.pack.js"></script> <scripttype="text/javascript"> vari=1; var_interval; functionshowTime() { vartoday=newDate(); $("#msg").html(today.toLocaleString()+",i="+i); i++; if(i>10)

  • ping 实现设计---ICMP

    发送ICMP报文时,必须程序自己计算校验和,将它填入ICMP头部对应的域中。校验和的计算方法:  将数据以字为单位累加到一个双字中,如果数据长度为奇数,最后一个字节将被扩展到字,累加的结果是一个双字,最后将这个双字的高16位,低16位相加后取反,便得到了校验和。下面是checksum的计算校验和的代码:USHORTchecksum(USHORT*buff,intsize) { unsignedlongcksum=0; while(size>1) { cksum+=*buff++; size-=sizeof(USHORT); } //是奇数 if(size) { cksum+=*(UCHAR*)buff; } //将32位的chsum高16位和低16位相加,然后取反 cksum=(cksum>>16)+(cksum&0xffff); cksum+=(cksum>>16); return(USHORT)(~cksum); }复制Ping程序实例:Ping用来检查主机是否存在,是否可达。下面是Ping的执行步骤:1创建协议类型为IPPROTO_ICMP的

  • 互联网Facebook使用人数增长太快

      ——中国仍被本土社交网络主导,Google+是所有海外社交网络中排名第一的服务,Facebook位居第二。   ——固然Tumblr和Pinterest好像实现了最大增长,但在使用频率上好像并没有那么高。   ——跟着我们不断通过移动设备使用Facebook和Twitter等服务,这两款产品的移动广告营收都已经超过桌面广告,而移动设备也成为社交网络领域的重要动力。但总体而言,其使用量尚未超过台式机和笔记本。尽管在大屏幕上使用社交网络的比例正在收缩,但仍有六成用户通过台式机或笔记本使用这类服务,移动平台的用户只有四成。消费者越年青,移动平台的流行度越高。在16至34岁春秋组中,移动平台成为50%以上用户的选择。   除此之外,该讲演还有如下重点内容:   在这些自称拥有Facebook账号的用户中,约半数表示自己每个月都会使用这项服务,达到排名紧随其后的三家网站月活跃用户的两倍,包括Twitter、YouTube和Google+。   GlobalWebIndex此次调查数据源自对32个市场的17万用户的采访,他们也通过自己的数据证实了Facebook的规模之大:该公司表示,除中国以

  • iOS开发-OC语言 (四)数组

    知识点 1.NSArray 2.NSMutableArray    1.数组的基本用法; 2.数组的遍历 3.数组排序     =========== NSArray 不可变数组 =================     1、OC数组和c数组的区别 C语言的数组: 相同类型变量的有序结合。类型:可以是简答数据类型、构造数据类型 int  a[10]; int *b[10];    1)NSArray是一个对象,是任意类型对象地址的集合 不能存放简单的数据类型(int,float,NSInteger…) 除非通过一些手段把简单数据类型变成对象。  2)C数组可以保存任意类型的数据  3)NSArray下标越界不会有警告,但是运行会直接报错     2、如何创建一个空数组  NSArray*array=[[NSArrayalloc]init];     arra

  • Linux操作系统(十二):计划任务

    什么是计划任务 仅执行一次的计划任务 循环执行的计划任务 可唤醒停机期间的工作任务  一、关于本文内容的导读及什么是计划任务 这部分不涉及具体内容的解析,只是作为浏览和查找相关知识点的引导内容,采用【主题|命令|对应内容小节编号】三个关键信息的组合模式,依照这些信息可以快速查找到相关详细的示例和解析。 所谓计划任务就是通过系统的at和cron服务自动在某个时刻执行的任务,而不需要手动去执行命令实现的任务。at服务处理的计划任务只会执行一次,任务被执行以后就不会在执行;而cron服务处理的是重复多次执行的计划任务,可以按照分钟、小时、周、月、年来周期性调用任务。 CentOSLinux系统上常见的例行性工作即计划任务有:日志文件轮询、日志文件分析、建立locate的数据库、建立manpage查询数据库、建立RPM软件日志文件、删除缓存、与网络服务有关的分析操作等。 关于计划任务的内容包括计划任务的服务启停、计划任务的设置与管理、计划任务相关权限管理。服务的启停属于服务管理部分的内容,这篇博客仅介绍计划任务的相关服务的启停;计划任务的设置与管理及权限管理可以通过相关的命令和配

  • $LCT$

    LCT 大概就是用splay维护链来动态维护一棵树 其中splay按照节点深度来排序 那么问题就来了,如果这一条链有的点深度相同怎么办 直接把一端转成根就好了啊 看题 hzoi小B的图 2002:[Hnoi2010]Bounce弹飞绵羊 显然就是个板子 建原点表示被弹飞了 查询只要查到原点的距离就行了 #include<iostream> #include<cstring> #include<cstdio> #defineM150001 #defineind(x)(c[f[x]][1]==x) #defineir(x)(c[f[x]][1]==x||c[f[x]][0]==x) #defineflip(x)swap(c[x][0],c[x][1]),r[x]^=1 usingnamespacestd; intn,m,k,a[M],s[M],c[M][2],f[M],root,r[M],h[M],rt,x,y,fa[M]; inlinevoidupdate(intx) { s[x]=s[c[x][0]]+s[c[x][1]]+1; } inl

  • 定时关机方式

    1.打开Win10电脑CMD命令 输入shutdown–s–t3600后面的3600代表秒,3600秒也就是一小时,在电脑中运行该命令,电脑将在1小时后自动关机. 如果中途有变,可以使用命令:shutdown–a取消电脑定时关机    2.在桌面新建一个文本文档 输入shutdown-s-t3600代表一个小时后关机 文件后缀名改为.bat 然后双击打开这个文件,命令就执行了 如果中途想取消这个命令 可以按WIN+R,打开运行对话框输入命令shutdownn-a就可以取消自动关机

  • 实战zabbix3.0.2 使用percona mysql插件监控mysql5.7

    1.系统环境 [root@shard0templates]#cat/etc/redhat-release RedHatEnterpriseLinuxServerrelease7.2(Maipo) 复制 2.下载安装需要的软件zabbix-agentphpphp-mysql wgethttp://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-agent-3.2.7-1.el7.x86_64.rpm rpm-izabbix-agent-3.2.7-1.el7.x86_64.rpm yuminstallphpphp-mysql [root@shard0zabbix]#rpm-qazabbix-agentphpphp-mysql php-5.4.16-42.el7.x86_64 php-mysql-5.4.16-42.el7.x86_64 zabbix-agent-3.2.7-1.el7.x86_64 复制 3.下载安装percona wgethttps://www.percona.com/downloads/percona-monito

  • 【AStar】初赛第一场

    1.AllX1.1基本思路k和c的范围都不大,因此可以考虑迭代找循环节,然后求余数,判定是否相等。这题还是挺简单的。1.2代码 1/*5690*/ 2#include<iostream> 3#include<sstream> 4#include<string> 5#include<map> 6#include<queue> 7#include<set> 8#include<stack> 9#include<vector> 10#include<deque> 11#include<bitset> 12#include<algorithm> 13#include<cstdio> 14#include<cmath> 15#include<ctime> 16#include<cstring> 17#include<climits> 18#include<cctype> 19#include

  • 自定义控件开发知识点

    声明:部分代码及图片来自:http://www.cnblogs.com/holywolf/archive/2008/12/15/1355299.html 1.自定义控件开发,需要继承Control(在System.Web.UI命名空间下)或WebControl(在System.Web.UI.WebControls命名空间下)或CompositeControl(在System.Web.UI.WebControls命名空间下) 2.重写CreateChildControls方法(ascx不一定要重写),该类在Control类上定义,此方法用于创建控件层次,以便为回发和呈现做准备。 3.重写父类的Render方法,在该方法中将服务器控件的内容传递给HtmlTextWriter对象以在客户端呈现内容 更多说明点击:http://msdn.microsoft.com/zh-cn/library/ms178472.aspx#lifecycle_events ===================以上是开发自定义控件必须要做的========================= 4.在.NET中,Sy

  • iOS开发之@Selector参数的传递

    比如: NSMutableDictionary*dic=[[NUMutableDictionaryalloc]init]; [dicsetValue:@”haha”forKey:@”test”] [NSTimerscheduledTimerWithTimeIntervatal:2.0target:selfselector: @selecrtor(onTimer:)userInfo:dicrepeats:NO]; 关于上述调用onTimer:方法时怎么传递参数,可能在这里会有一个疑问,我只知道方法名,我怎么知道要传递什么类型的参数。其实很简单,传递的参数为NSTimer的对象,从NSTimer的对象的对象中可以拿到userInfo中的dic,从而取出dic中的数据。 所以,onTimer:方法的实现必须如下(参数必须为onTimer类型): -(void)onTimer:(NSTimer*)timer{ ............................. }

  • tp6 控制器不存在:app\index\controller\Index

    tp6控制器不存在:app\index\controller\Index config/app.php修改如下 'auto_multi_app'=>true,

相关推荐

推荐阅读