volcano学习之旅(1)--基础介绍

2023-12-19 12:59

本文主要是介绍volcano学习之旅(1)--基础介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

volcano学习之旅(1)–基础介绍

学习资源

官网:

https://volcano.sh/zh/

git:

https://github.com/volcano-sh/volcano/tree/v1.0.1

gitee码云:

https://gitee.com/ascend/ascend-for-volcano

社区(Mind X DL):

https://bbs.huaweicloud.com/forum/forumdisplay-fid-1231-orderby-lastpost-filter-typeid-typeid-1695.html


简介

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eA0ei4bO-1618383081895)(volcano学习之旅.assets/image-20210408155115650.png)]

Volcano是在Kubernetes上运行高性能工作负载的容器批量计算引擎。 它提供了Kubernetes目前缺少的一套机制,这些机制通常是许多高性能 工作负载所必需的,包括:

- 机器学习/深度学习
- 生物学计算/基因计算
- 大数据应用

这些类型的应用程序通常运行在像Tensorflow、Spark、PyTorch、 MPI等通用领域框架上,Volcano无缝对接这些框架。

已使用volcano的公司:
在这里插入图片描述

架构

全景图

在这里插入图片描述
Volcano是基于Kubernetes的高性能批量计算平台,目前支持几乎所有的主流计算框架,包括MindSpore、TensorFlow、Kubeflow、MPI、PyTorch、飞浆、Spark、HOROVOD 等。

计算框架遇到的问题:

  • 挑战 1: 面向高性能负载的调度策略

e.g. fair-share, gang-scheduling

  • 挑战 2: 支持多种作业生命周期管理

e.g. multiple pod template, error handling

  • 挑战 3: 支持多种异构硬件

e.g. GPU, FPGA

  • 挑战 4: 面向高性能负载的性能优化

e.g. scalability, throughput, network, runtime

  • 挑战 5:支持资源管理及分时共享

e.g. Queue, Reclaim

Volcano面向主流计算框架提供:

  • 统一容器基础设施,提高资源利用率
  • 通用作业管理、队列Fair-share, Gang, bin-pack等高级调度算法
  • 简化运维管理

整体架构

CRD方式

3个核心的API:Volcano Job、PodGroup、Queue

在这里插入图片描述
三个核心组件:

Admission、ControllerManager、Scheduler 。

Admission对Volcano CRD API提供校验能力;ControllerManager负责对Volcano CRD进行资源管理;Scheduler对任务提供丰富的调度能力。

工作流程:

从零开始运行Volcano作业:

1)用户创建一个 Volcano 作业。三种方式:api,kubctl,vcctl

2)Volcano Admission 拦截作业的创建请求,并进行合法性校验。可以修改参数,再认证。

3)Kubernetes 持久化存储 Volcano Job 到 ETCD。

4)ControllerManager 通过 List-Watch 机制观察到Job 资源的创建,创建任务(Pod)。

5)Scheduler 负责任务的调度,绑定 Node。

6)Kubelet Watch 到 Pod的创建,接管 Pod 的运行。

7)ControllerManager 监控所有任务的运行状态,保证所有的任务在期望的状态下运行。


核心概念

Job

  • 一次volcano注册的vcjob任务。可以是单机,也可以是多pod(分布式)。
  • 参考vcjob

Deployment

  • 定义一组Pod期望数量,Controller会维持Pod数量与期望数量一致
  • 配置Pod的发布方式,controller会按照给定的策略更新Pod,保证更新过程中不可用Pod维持在限定数量范围内
  • 如果发布有问题支持回滚

Task

  • 一个pod找到对应node并绑定资源的过程。

Pod

  • k8s中调度的最小单位。最小管理单位。
  • 一个或多个容器的组合。
  • 参考:https://zhuanlan.zhihu.com/p/60905652

Volcano Job

  • 它是批量计算作业的定义,支持定义作业所属队列、生命周期策略、所包含的任务模板以及持久卷等信息
  • volcano job,简称vcjob,是volcano自定义的job资源类型。区别于kubernetes job,vcjob提供了更多高级功能,如可指定调度器、支持最小运行pod数、 支持task、支持生命周期管理、支持指定队列、支持优先级调度等。volcano job更加适用于机器学习、大数据、科学计算等高性能计算场景。
样例
apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata:name: test-job
spec:minAvailable: 3schedulerName: volcanopriorityClassName: high-prioritypolicies:- event: PodEvictedaction: RestartJobplugins:ssh: []env: []svc: []maxRetry: 5queue: defaultvolumes:- mountPath: "/myinput"- mountPath: "/myoutput"volumeClaimName: "testvolumeclaimname"volumeClaim:accessModes: [ "ReadWriteOnce" ]storageClassName: "my-storage-class"resources:requests:storage: 1Gitasks:- replicas: 6name: "default-nginx"template:metadata:name: webspec:containers:- image: nginximagePullPolicy: IfNotPresentname: nginxresources:requests:cpu: "1"restartPolicy: OnFailure
关键字段
  • schedulerName

schedulerName表示该job的pod所使用的调度器,默认值为volcano,也可指定为default-scheduler。它也是tasks.template.spec.schedulerName的默认值。

  • minAvailable

minAvailable表示运行该job所要运行的最少pod数量。只有当job中处于running状态的pod数量不小于minAvailable时,才认为该job运行正常。

  • volumes

volumes表示该job的挂卷配置。volumes配置遵从kubernetes volumes配置要求。

  • tasks.replicas

tasks.replicas表示某个task pod的副本数。

  • tasks.template

tasks.template表示某个task pod的具体配置定义。

  • tasks.policies

tasks.policies表示某个task的生命周期策略。

  • policies

policies表示job中所有task的默认生命周期策略,在tasks.policies不配置时使用该策略。

  • plugins

plugins表示该job在调度过程中使用的插件。

  • queue

queue表示该job所属的队列。

  • priorityClassName

priorityClassName表示该job优先级,在抢占调度和优先级排序中生效。

  • maxRetry

maxRetry表示当该job可以进行的最大重启次数。

资源状态
  • pending

pending表示job还在等待调度中,处于排队的状态。

  • aborting

aborting表示job因为某种外界原因正处于中止状态,即将进入aborted状态。

  • aborted

aborted表示job因为某种外界原因已处于中止状态。

  • running

running表示job中至少有minAvailable个pod正在运行状态。

  • restarting

restarting表示job正处于重启状态,正在中止当前的job实例并重新创建新的实例。

  • completing

completing表示job中至少有minAvailable个数的task已经完成,该job正在进行最后的清理工作。

  • completed

completing表示job中至少有minAvailable个数的task已经完成,该job已经完成了最后的清理工作。

  • terminating

terminating表示job因为某种内部原因正处于终止状态,正在等到pod或task释放资源。

  • terminated

terminated表示job因为某种内部原因已经处于终止状态,job没有达到预期就结束了。

  • failed

failed表示job经过了maxRetry次重启,依然没有正常启动。

使用场景
  • tensorflow workload

以tensorflow为例,创建一个具有1个ps和2个worker的工作负载。

apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata:name: tensorflow-dist-mnist
spec:minAvailable: 3   // 该job的3个pod必须都可用schedulerName: volcano    // 指定volcano为调度器plugins:env: []svc: []policies:- event: PodEvicted // 当pod被驱逐时,重启该jobaction: RestartJobtasks:- replicas: 1   // 指定1个ps podname: pstemplate: // ps pod的具体定义spec:containers:- command:- sh- -c- |PS_HOST=`cat /etc/volcano/ps.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`;WORKER_HOST=`cat /etc/volcano/worker.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`;export TF_CONFIG={\"cluster\":{\"ps\":[${PS_HOST}],\"worker\":[${WORKER_HOST}]},\"task\":{\"type\":\"ps\",\"index\":${VK_TASK_INDEX}},\"environment\":\"cloud\"};python /var/tf_dist_mnist/dist_mnist.pyimage: volcanosh/dist-mnist-tf-example:0.0.1name: tensorflowports:- containerPort: 2222name: tfjob-portresources: {}restartPolicy: Never- replicas: 2   // 指定2个worker podname: workerpolicies:- event: TaskCompleted  // 2个worker完成任务时认为该job完成任务action: CompleteJobtemplate: // worker pod的具体定义spec:containers:- command:- sh- -c- |PS_HOST=`cat /etc/volcano/ps.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`;WORKER_HOST=`cat /etc/volcano/worker.host | sed 's/$/&:2222/g' | sed 's/^/"/;s/$/"/' | tr "\n" ","`;export TF_CONFIG={\"cluster\":{\"ps\":[${PS_HOST}],\"worker\":[${WORKER_HOST}]},\"task\":{\"type\":\"worker\",\"index\":${VK_TASK_INDEX}},\"environment\":\"cloud\"};python /var/tf_dist_mnist/dist_mnist.pyimage: volcanosh/dist-mnist-tf-example:0.0.1name: tensorflowports:- containerPort: 2222name: tfjob-portresources: {}restartPolicy: Never
  • mindspore

以mindspore为例,创建一个具有8个pod副本的工作负载,要求1个可用即可。

apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata:name: mindspore-cpu
spec:minAvailable: 1schedulerName: volcanopolicies:- event: PodEvictedaction: RestartJobplugins:ssh: []env: []svc: []maxRetry: 5queue: defaulttasks:- replicas: 8name: "pod"template:spec:containers:- command: ["/bin/bash", "-c", "python /tmp/lenet.py"]image: lyd911/mindspore-cpu-example:0.2.0imagePullPolicy: IfNotPresentname: mindspore-cpu-jobresources:limits:cpu: "1"requests:cpu: "1"restartPolicy: OnFailure
说明事项
volcano job支持的计算框架

volcano job对当前主流的计算框架均能很好的支持,具体如下:

  1. tensorflow
  2. pytorch
  3. mindspore
  4. PaddlePaddle
  5. spark
  6. flink
  7. openMPI
  8. horovod
  9. mxnet
  10. kubeflow
  11. argo
  12. kubeGene
volcano和default-scheduler的选择

与default-scheduler相比,volcano在批处理方面进行了增强。它更适用于高性能计算场景,如机器学习、大数据应用和科学计算。

Queue

  • Queue的概念源于 Yarn,它是Cluster 级别的资源对象,可为其声明资源配额,也可由多namespace 共享,并且提供 soft isolation

  • queue是容纳一组podgroup的队列,也是该组podgroup获取集群资源的划分依据

    样例
    apiVersion: scheduling.volcano.sh/v1beta1
    kind: Queue
    metadata:creationTimestamp: "2020-08-10T11:54:36Z"generation: 1name: defaultresourceVersion: "559"selfLink: /apis/scheduling.volcano.sh/v1beta1/queues/defaultuid: 14082e4c-bef6-4248-a414-1e06d8352bf0
    spec:reclaimable: trueweight: 1capability:cpu: "4"memory: "4096Mi"
    status:state: Open
    
    关键字段
    • weight

    weight表示该queue在集群资源划分中所占的相对比重,该queue应得资源总量为 (weight/total-weight) * total-resource。其中, total-weight表示所有的queue的weight总和,total-resource表示集群的资源总量。weight是一个软约束,取值范围为[1, 2^31-1]

    • capability

    capability表示该queue内所有podgroup使用资源量之和的上限,它是一个硬约束

    • reclaimable

    reclaimable表示该queue在资源使用量超过该queue所应得的资源份额时,是否允许其他queue回收该queue使用超额的资源,默认值为true

    资源状态
    • Open

    该queue当前处于可用状态,可接收新的podgroup

    • Closed

    该queue当前处于不可用状态,不可接收新的podgroup

    • Closing

    该Queue正在转化为不可用状态,不可接收新的podgroup

    • Unknown

    该queue当前处于不可知状态,可能是网络或其他原因导致queue的状态暂时无法感知

    使用场景
    weight的资源划分-1
    背景:
    • 集群CPU总量为4C
    • 已默认创建名为default的queue,weight为1
    • 集群中无任务运行
    操作:
    1. 当前情况下,default queue可是使用全部集群资源,即4C
    2. 创建名为test的queue,weight为3。此时,default weight:test weight = 1:3,即default queue可使用1C,test queue可使用3C
    3. 创建名为p1和p2的podgroup,分别属于default queue和test queue
    4. 分别向p1和p2中投递job1和job2,资源申请量分别为1C和3C,2个job均能正常工作
    weight的资源划分-2
    背景:
    • 集群CPU总量为4C
    • 已默认创建名为default的queue,weight为1
    • 集群中无任务运行
    操作:
    1. 当前情况下,default queue可是使用全部集群资源,即4C
    2. 创建名为p1的podgroup,属于default queue。
    3. 分别创建名为job1和job2的job,属于p1,资源申请量分别为1C和3C,job1和job2均能正常工作
    4. 创建名为test的queue,weight为3。此时,default weight:test weight = 1:3,即default queue可使用1C,test queue可使用3C。但由于test queue内此时无任务,job1和job2仍可正常工作
    5. 创建名为p2的podgroup,属于test queue。
    6. 创建名为job3的job,属于p2,资源申请量为3C。此时,job2将被驱逐,将资源归还给job3,即default queue将3C资源归还给test queue。
    capability的使用
    背景:
    • 集群CPU总量为4C
    • 已默认创建名为default的queue,weight为1
    • 集群中无任务运行
    操作:
    1. 创建名为test的queue,capability设置cpu为2C,即test queue使用资源上限为2C
    2. 创建名为p1的podgroup,属于test queue
    3. 分别创建名为job1和job2的job,属于p1,资源申请量分别为1C和3C,依次下发。由于capability的限制,job1正常运行,job2处于pending状态
    reclaimable的使用
    背景:
    • 集群CPU总量为4C
    • 已默认创建名为default的queue,weight为1
    • 集群中无任务运行
    操作:
    1. 创建名为test的queue,reclaimable设置为false,weight为1。此时,default weight:test weight = 1:1,即default queue和test queue均可使用2C。
    2. 创建名为p1、p2的podgroup,分别属于test queue和default queue
    3. 创建名为job1的job,属于p1,资源申请量3C,job1可正常运行。此时,由于default queue中尚无任务,test queue多占用1C
    4. 创建名为job2的job,属于p2,资源申请量2C,任务下发后处于pending状态,即test queue的reclaimable为false导致该queue不归还多占的资源
    说明事项
    default queue

    volcano启动后,会默认创建名为default的queue,weight为1。后续下发的job,若未指定queue,默认属于default queue

    weight的软约束

    weight的软约束是指weight决定的queue应得资源的份额并不是不能超出使用的。当其他queue的资源未充分利用时,需要超出使用资源的queue可临时多占。但其 他queue后续若有任务下发需要用到这部分资源,将驱逐该queue多占资源的任务以达到weight规定的份额(前提是queue的reclaimable为true)。这种设计可以 保证集群资源的最大化利用。

PodGroup

  • PodGroup是一组强关联的任务集合,它与 queue 绑定,占用队列的资源。它与 Volcano Job 是一对一的关系;也可为其声明 Scheduling 条件。
样例
apiVersion: scheduling.volcano.sh/v1beta1
kind: PodGroup
metadata:creationTimestamp: "2020-08-11T12:28:55Z"generation: 5name: testnamespace: defaultownerReferences:- apiVersion: batch.volcano.sh/v1alpha1blockOwnerDeletion: truecontroller: truekind: Jobname: testuid: 028ecfe8-0ff9-477d-836c-ac5676491a38resourceVersion: "109074"selfLink: /apis/scheduling.volcano.sh/v1beta1/namespaces/default/podgroups/job-1uid: eb2508f5-3349-439c-b94d-4ac23afd71ff
spec:minMember: 1minResources:cpu: "3"memory: "2048Mi"priorityClassName: high-prorityqueue: default
status:conditions:- lastTransitionTime: "2020-08-11T12:28:57Z"message: '1/0 tasks in gang unschedulable: pod group is not ready, 1 minAvailable.'reason: NotEnoughResourcesstatus: "True"transitionID: 77d5be3f-6169-4f86-8e65-0bdc621ce983type: Unschedulable- lastTransitionTime: "2020-08-11T12:29:02Z"reason: tasks in gang are ready to be scheduledstatus: "True"transitionID: 54514401-5c90-4b11-840d-90c1cda93096type: Scheduledphase: Runningrunning: 1
关键字段
  • minMember

minMember表示该podgroup下最少需要运行的pod或任务数量。如果集群资源不满足miniMember数量任务的运行需求,调度器将不会调度任何一个该podgroup 内的任务。

  • queue

queue表示该podgroup所属的queue。queue必须提前已创建且状态为open。

  • priorityClassName

priorityClassName表示该podgroup的优先级,用于调度器为该queue中所有podgroup进行调度时进行排序。system-node-criticalsystem-cluster-critical 是2个预留的值,表示最高优先级。不特别指定时,默认使用default优先级或zero优先级。

  • minResources

minResources表示运行该podgroup所需要的最少资源。当集群可分配资源不满足minResources时,调度器将不会调度任何一个该podgroup内的任务。

  • phase

phase表示该podgroup当前的状态。

  • conditions

conditions表示该podgroup的具体状态日志,包含了podgroup生命周期中的关键事件。

  • running

running表示该podgroup中当前处于running状态的pod或任务的数量。

  • succeed

succeed表示该podgroup中当前处于succeed状态的pod或任务的数量。

  • failed

failed表示该podgroup中当前处于failed状态的pod或任务的数量。

资源状态
  • pending

pending表示该podgroup已经被volcano接纳,但是集群资源暂时不能满足它的需求。一旦资源满足,该podgroup将转变为running状态。

  • running

running表示该podgroup至少有minMember个pod或任务处于running状态。

  • unknown

unknown表示该podgroup中minMember数量的pod或任务分为2种状态,部分处于running状态,部分没有被调度。没有被调度的原因可能是资源不够等。调度 器将等待controller重新拉起这些pod或任务。

  • inqueue

inqueue表示该podgroup已经通过了调度器的校验并入队,即将为它分配资源。inqueue是一种处于pending和running之间的中间状态。

使用场景
  • minMember的使用

在某些场景下,可能会只需要某个任务的子任务运行达到一定的数量,即可认为本次任务可以运行,如机器学习训练。这种情况下适合使用minMember字段。

  • priorityClassName的使用

priorityClassName用于podgroup的优先级排序,可用于任务抢占调度场景。它本身也是一种资源。

  • minResources的使用

在某些场景下,任务的运行必须满足最小资源要求,不满足则不能运行该任务,如某些大数据分析场景。这种情况下适合使用minResources字段。

说明事项
  • 自动创建podgroup

当创建vcjob(volcano job的简称)时,若没有指定该vcjob所属的podgroup,默认会为该vcjob创建同名的podgroup


核心组件介绍

controller架构

在这里插入图片描述
左边为Volcano Job Controller,不只调度使用的Volcano,Job的生命周期管理、作业管理都在这里面包含。我们提供了统一的作业管理,你只要使用Volcano,也不需要创建各种各样的操作,就可以直接运行作业。

右边为CRD Job Controller,通过下面的PodGroup去做集成。

scheduler架构

在这里插入图片描述

Scheduler支持动态配置和加载。左边为apiserver,右边为整个Scheduler,apiserver里有Job、Pod、Pod Group;Scheduler分为三部分,第一层为Cache,中间层为整个调度的过程,右边是以插件形式存在的调度算法。Cache会将apiserver里创建的Pod、Pod Group这些信息存储并加工为Jobinfors。中间层的OpenSession会从Cache里拉取Pod、Pod Group,同时将右边的算法插件一起获取,从而运行它的调度工作。

状态之间根据不同的操作进行转换,见下图。

在这里插入图片描述
**volcano在Pod和Pod的状态方面增加了很多状态,图中蓝色部分为K8s自带的状态;**绿色部分是session级别的状态,一个调度周期,我们会创建一个session,它只在调度周期内发挥作用,一旦过了调度周期,这几个状态它是失效的;黄色部分的状态是放在Cache内的。我们加这些状态的目的是减少调度和API之间的一个交互,从而来优化调度性能。

**Pod的这些状态为调度器提供了更多优化的可能。**例如,当进行Pod驱逐时,驱逐在Binding和Bound状态的Pod要比较驱逐Running状态的Pod的代价要小 (思考:还有其它状态的Pod可以驱逐吗?);并且状态都是记录在Volcano调度内部,减少了与kube-apiserver的通信。但目前Volcano调度器仅使用了状态的部分功能,比如现在的preemption/reclaim仅会驱逐Running状态下的Pod;这主要是由于分布式系统中很难做到完全的状态同步,在驱逐Binding和Bound状态的Pod会有很多的状态竞争。

以上设计的好处

  • 支持多种类型作业混合部署

  • 支持多队列用于多租户资源共享,资源规划;并分时复用资源

  • 支持多种高级调度策略,有效提升整集群资源利用率

  • 支持资源实时监控,用于高精度资源调度,例如 热点,网络带宽;容器引擎,网络性能优化, e.g. 免加载

cli说明

在这里插入图片描述

目录结构

在这里插入图片描述

cmd:

在这里插入图片描述

所有组件启动入口。

config:

volcano配置。

defs:

安装时的配置。

install:

在这里插入图片描述

dockerfile,helm等安装所需模板。

docs:

设计文档。

example:

简单例子。

defs:

安装时的配置。

pkg:

在这里插入图片描述
核心代码。包括 api、controller、scheduler 、webhook 等代码。test 提供了e2e测试用例, vendor是依赖库。


安装部署

Volcano Install

Volcano安装部署有多种方式:若已存在K8S集群,建议通过 Helm方式安装部署,该方式支持自定义安装配置;开发者建议通过Development Yaml方式部署。

对于开发者,Volcano已内置一键式安装部署脚本,路径为 volcano. sh/volcano/hack/local-up-volcano. sh。运行该脚本时,默认会使用kind创建 Docker in Docker的模拟集群,并安装部署Volcano。

Volcano 组件

正确安装部署后,将生成4个组件,分别为:Volcano-admission、Volcano-admission-init、Volcano-controllers、 Volcano-scheduler ,其中admission-init以作业的方式生成证书。
在这里插入图片描述

源码解析

框架代码解析

NPU插件代码解析


框架支撑说明


后续展望

这篇关于volcano学习之旅(1)--基础介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/512261

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}