精华内容
下载资源
问答
  • PQ节点-PV节点-平衡节点

    千次阅读 2020-12-22 19:25:31
    PQ节点-PV节点-平衡节点 #PQ节点 节点的有功功率P和无功功率Q是给定的,节点电压和相位(V,δ)是待求量。通常变电所都是这一类型的节点。由于没有发电设备,故其发电功率为零。在一些情况下,系统中某些发电厂送出...

    PQ节点-PV节点-平衡节点
    #PQ节点

    节点的有功功率P和无功功率Q是给定的,节点电压和相位(V,δ)是待求量。通常变电所都是这一类型的节点。由于没有发电设备,故其发电功率为零。在一些情况下,系统中某些发电厂送出的功率在一定时间内为固定时,该发电厂也作为PQ节点,因此,电力系统中绝大多数节点属于这一类型。
    #PV节点
    节点的有功功率P和电压幅值V是给定的,节点的无功功率Q和电压相位δ是待求量,这类节点必须有足够的可调无功容量,用以维持给定的电压幅值,因而又称之为“电压控制节点”,一般是选择有一定无功储备的发电厂和安装有可调无功电源设备的变电所作为PV节点。在电力系统中,这一类节点的数目很少。
    #平衡节点
    平衡节点的电压幅值和相位是给定的,而其注入有功功率和无功功率是待求量。平衡节点的A相电压相位是系统的相位基准,最后计算结果中的所有相位值都是以平衡节点的A相电压相位作为参考的,所以平衡节点在系统中只能有一个,且必须有一个,它对系统起到功率平衡的作用,可以向系统提供缺损的功率,也可以吸收系统中多余的功率。从理论上讲,平衡节点代表与系统相连的无穷大系统,实际应用中,一般选取系统中的主调频发电厂为平衡节点比较合理,最后计算结果中的平衡节点功率就是此发电厂必须向系统提供的功率。如果系统是与另一更大的电力系统S相连,则也可以选取这个连接点作为平衡节点,最后计算结果中的平衡节点功率就是系统S通过平衡节点向系统提供的功率。另外如果系统是一独立系统且只有一个电源点,则必须选此电源点为平衡节点。

    展开全文
  • HDFS副本放置节点选择的优化

    千次阅读 2017-04-16 14:35:02
    前言我们都知道,HDFS在准备写文件块的时候,必须要做的一个步骤是要从集群内数以千计的节点选择一个有效的节点作为待写入块的目标节点。那么这里何为”有效的节点”呢?指的是此节点内包含有快文件需要的Storage ...

    前言


    我们都知道,HDFS在准备写文件块的时候,必须要做的一个步骤是要从集群内数以千计的节点中选择一个有效的节点作为待写入块的目标节点。那么这里何为”有效的节点”呢?指的是此节点内包含有快文件需要的Storage Type(存储类型)。比如说某block要求的类型是SSD,而当前选出的节点所有数据目录都是DISK的话,那这个节点就不是满足要求的节点,此轮选举就会被废弃,将选过的节点加入exclude列表,然后重新进行下一轮的选取。所以在这里,笔者想要只要聊聊其中选择效率的问题。这种策略其实是有一定问题的,比如说,集群内包含1000个节点,999个节点都是DISK类型,而只有1个节点是SSD类型的,那么要为SSD存储类型的文件选择目标节点,岂不是得经过好几轮选举了?因为目前的策略是每次随机挑选一个节点,然后拿来进行对比。当然如果节点完全是同构的,这当然没问题,但是如果出现多种异构型的节点,这种做法显然不够合理。本文笔者就来聊聊这个话题。

    多异构存储的节点选择问题


    多异构存储环境下的节点选择问题,并不是笔者直接发现的,而是源自于社区JIRA HDFS-11419(BlockPlacementPolicyDefault is choosing datanode in an inefficient way),大致提到的意思就是笔者在前言中所阐述的。归纳起来一句话,在一些集群环境结构十分特殊的情况下(比如集群存储类型比例完全不平衡时),选择偏少一方的存储类型节点的效率将会非常低。基于这个问题,社区提出了一种改进设想:能否将需要的存储类型传入到选择的节点方法内,提前筛选出包含有目标存储类型的节点,这样可以过滤掉大量无效的节点。换句话说,在这种设想中,选出来的节点是至少能满足块文件要求的候选节点。要想实现以上提到的方案,我们必须要对原始的NetworkTopology结构进行改造,加入StorageType的条件,社区也的确做了这样的改造,名为DFSNetworkTopology。

    DFSNetworkTopology的实现


    从DFSNetworkTopology这个名字我们能够看出,这是一个专属HDFS内部使用的新的Topology类。此类是NetworkTopology的子类,作者在其内部做的最大的改造是在每个逻辑节点内,添加了StorageType->Count这样的映射值关系。也就是说,在每个节点下,我可以知道此位置下,是否包含有我想要的存储类型的节点,而且我能知道到底有几个满足条件的节点。有了这样一个附加信息,我能够从根节点由上而下选出满足要求的节点。而之前默认的逻辑结构则是盲目的随机进行选择。

    那么DFSNetworkTopology拓扑逻辑是如何构建StorageType->Count这样的映射信息的呢?归纳起来一句话:

    当节点从拓扑逻辑中添加/移除的时候,获取此节点包含的StorageType信息,进行相应拓扑逻辑节点的map计数更新,往上更新直到根节点。

    尽管说上面只用一句话进行了简单的概括,但真正的代码逻辑还是具有一定的复杂性的,里面涉及了比较多的树型结构的状态更新、维护等操作。感兴趣的读者可以自行前往HDFS-11419进行更进一步的学习。

    DFSNetworkTopology的应用


    既然新的基于存储策略计数值的拓扑逻辑已经实现了,是否意味着我们可以直接将DFSNetworkTopology应用到HDFS默认的副本放置策略中来进行节点的选择呢?答案是否定的。

    之前上文中也提到过,DFSNetworkTopology是为了方便于多异构存储环境下而实现的,如果说集群不是异构的,那么原来的方式对于我们来说还是OK的,而且老方法相比较于新方法而言,在单次执行效率上而言,是要高于新方法的,,因为它不用考虑Storage Type因素的条件,随机选择一个就行了。所以在这里,一种比较好的做法是采取二者结合使用的方案。在HDFS-11535中,社区进行了这块内容的讨论。

    首先有这么一个初始方案:根据集群所包含的Storage Type类型判断,如果集群内所有节点都是同一种Storage Type,也就是同构集群,则毫无疑问,沿用老的方法。否则,
    使用新的选择节点的方法。

    这个方法提出之后,笔者发现其中一个弊端,当其中如果某个Storage Type只有1%的比例时,这样也会被迫选择新方法,但是在此集群环境下,绝大多情况是比较适用于第一种情况的。

    于是社区讨论提出了方案2.0版本,采用一种“2阶段选择”方案,什么意思呢?第一次采用老方法,就是随机选取方法,如果第一次不成功,则采用新方法。如果集群是同构的,则第一次方法肯定能选出节点来,否则不是的话,说明是存在异构的,则用新方法。这种方案的好处在于说能够同时利用了新,老方法共同的优点。而且也不会过于复杂。

    事实上在2阶段选择方案提出之前,笔者曾提出过基于阈值的选择方案,这里的阈值指的是目标Storage Type在集群中的所占比,根据实际占比与阈值进行进行比较,从而来判断选择哪个topology下的方法。更多详细的讨论细节读者可以关注HDFS-11535。

    DFSNetworkTopology的展望


    目前对于这块的优化工作还在进行当中,笔者目前在HDFS-11530中正在将DFSNetworkTopology应用到HDFS内部的BlockPlacementPolicyDefault中,考虑到这个新的Topology还需要进行更多的压力测试和检验,目前打算采用的做法是将会用一个新的配置名来使用这个类,并将默认值先设置为老的NetworkTopology,等到了未来可以再变为DFSNetworkTopology。

    参考资料


    [1].HDFS-11419,BlockPlacementPolicyDefault is choosing datanode in an inefficient way, https://issues.apache.org/jira/browse/HDFS-11419
    [2].HDFS-11530,Use HDFS specific network topology to choose datanode in BlockPlacementPolicyDefault,https://issues.apache.org/jira/browse/HDFS-11530
    [3].HDFS-11535,Performance analysis of new DFSNetworkTopology#chooseRandom, https://issues.apache.org/jira/browse/HDFS-11535

    展开全文
  • 平衡二叉树插入节点

    千次阅读 2014-09-08 20:56:18
    最小不平衡子树:指离插入节点最近且以平衡因子的绝对值大于1的节点作为根的子树。    平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1    很显然,平衡二叉树是在二叉排序树(BST)上...

    平衡二叉树定义(AVL)它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。


    最小不平衡子树:指离插入节点最近且以平衡因子的绝对值大于1的节点作为根的子树。 

     

    平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1<=bf<=1;

     

      很显然,平衡二叉树是在二叉排序树(BST)上引入的,就是为了解决二叉排序树的不平衡性导致时间复杂度大大下降,那么AVL就保持住了(BST)的最好时间复杂度O(logn),所以每次的插入和删除都要确保二叉树的平衡,那么怎么保持平衡呢?
     

    插入操作

           在平衡二叉树中插入结点与二叉查找树最大的不同在于要随时保证插入后整棵二叉树是平衡的。那么调整不平衡树的基本方法就是: 旋转,基本思路都是转换到左旋和右旋。

     

    1) 右旋: 在最小平衡子树根节点平衡因子>=2且在根节点的左孩子的左孩子插入元素,进行右旋

           

     

    2) 左旋: 在最小平衡子树根节点平衡因子>=-2且在根节点的右孩子的右孩子插入元素,进行左旋。

     

    3) 右左:最小平衡子树根节点(80)的右孩子(100)的左孩子(90)的子节点(95)插入新元素,先绕根节点的右孩子节点(100)右旋,再围根节点(80)左旋

     

    4) 左右:在最小平衡子树根节点(80)的左孩子(50)的右孩子(70)的子节点插入新元素,先绕根节点的左孩子节点(50)右旋,再围根节点(80)左旋

     

    例题::输入关键码序列为(16,3,7,11,9,26,18,14,15),据此建立平衡二叉树,给出插入和调整的具体过程。

    【分析】  本题主要考查如何从空树通过插入结点的方法建立一棵平衡二叉树,由于插入结点而造成树的不平衡的时候,需要进行平衡化处理。

    插入结点7后,结点16的平衡因子变为-2,需要对结点16,3,7进行LR型调整。插入结点11后,结点16的平衡因子变为-2,需要对结点16,11,9进行LL型调整。插入结点26后,结点7的平衡因子变为2,需要对结点7,11,16进行RR型调整。插入结点18后,结点16的平衡因子变为2,需要对结点16,26,18进行RL型调整。插入结点15后,结点16的平衡因子变为-2,需要对结点16,14,15进行LR型调整。

    【解答】

     
     


    展开全文
  • HDFS节点内数据平衡

    千次阅读 2017-11-16 09:43:46
    Hadoop集群使用久了,我们会发现一个问题,各个DataNode数据不平衡了,多的达到...但是有的时候,你会发现节点数据平衡了但是DataNode内部各个磁盘块上的数据不平衡了,这个Blancer就干不了这活儿。   比如某一个Dat

    Hadoop集群使用久了,我们会发现一个问题,各个DataNode数据不平衡了,多的达到70-80%,少的达到10-20%。面对这种场景,我们一般使用HDFS自带的Blancer工具对其数据进行平衡。也就是他只能保证每一个节点的数据大小均衡。

     

    但是有的时候,你会发现节点数据平衡了但是DataNode内部各个磁盘块上的数据不平衡了,这个Blancer就干不了这活儿。

     

    比如某一个DataNode总共有A,B,C,D四块磁盘,你用RoundRobin磁盘选择策略去写,最后四块磁盘都写过了,但是A,B写的可能就1M,C,D写的就是100M.

     

    一 DataNode节点磁盘数据不均衡带来的问题

    1.1磁盘间数据不均衡间接导致磁盘I/O压力不同。我们知道,HDFS上的数据访问频率是很高的,这就涉及到大量的读写磁盘操作,数据多的磁盘自然就会有更高的频率访问,如果一块磁盘的IO操作非常密集的话,势必会对读写性能造成影响

    1.2高使用率的磁盘导致节点写数据块的时候,可选的存储目录减少。

    HDFS在写block的时候,会挑选剩余空间满足待写的block的大小情况下,才会进行挑选,如果高使用率磁盘目录过多,会导致这样的候选变少。

     

    二 传统的解决方案

    人工移动数据块存储目录:但是需要保证目录移动的准确性,否则会造成移动完目录后数据找不到的现象。

    比如:

    /data/1/dfs/dn/current/BP-XXXXX/current/finalized/subdir0/subdir1

    目标路劲:

    /data/2/dfs/dn/current/BP-XXXXX/current/finalized/subdir0/subdir1

    目录结构就变了,current前面多了个空格,就会造成HDFS找不到这个数据块。

     

    三 社区解决方案DiskBlancer

    3.1设计核心

    第一:DataSpread Report。 数据分布式的汇报,也就是支持各个DataNode汇报磁盘块使用情况的功能,我们就可以了解到目前集群内使用率TopN的节点磁盘

     

    第二:DiskBlance。 进行磁盘数据平衡。但是在磁盘数据平衡的时候要考虑到各个磁盘StorageType的不同。不同的类型存储介质可能不一样,目前DiskBlancer还不支持跨存储介质数据转移,必须在一个StorageType下

     

     

    3.2流程分析

    Discover阶段:

    计算各个DataNode磁盘使用情况,然后得到一个需要进行数据平衡的磁盘列表,会使用VolumeData Density(磁盘使用密度)作为评判标准,这个标准会以节点总使用率作为比较值。比如,如果一个DataNode  ,总使用率是75%,也就是0.75. 其中A盘0.5,那么A盘的密度值就=0.75-0.5=0.25;同理如果超出的话,则密度值将会为负数。于是我们可以用VolumeData Density绝对值来判断此节点内磁盘间数据平衡情况,如果总的觉得值和越大,说明数据越不平衡

     

    Plan阶段:

    拿到上一个阶段的汇报结果数据之后,将会生成一个执行计划。Plan并不是一个最小的执行单元,它是由各个Step组成的,Step中会指定好源磁盘,目标磁盘,这里是结果包装的:DiskBalancerVoulme,并不是原来的FSVolume.

    DiskBalancerCluster:读取集群节点信息

    DiskBalancerDataNode:代表一个包装过的DataNode

    DiskBalancerVolume和 DiskBalancerVolumeSet.DataNode磁盘对象以及磁盘对象集合

     

    Execute阶段:

    所有执行计划生成以后,就到了执行阶段。这些计划会被提交到各自DataNode上,然后在DiskBalancer类中执行。然后DiskBalancer有专门的类DiskBalancerMover来做数据平衡工作。在磁盘间数据平衡的过程中,高使用率的磁盘会移动数据块到相对低使用率的磁盘,等到满足一定阈值关系的情况下时,DiskBalancer会渐渐地退出.在DiskBalancer的执行阶段,有以下几点需要注意:

     

    带宽限制:DiskBalancer也可以支持带宽限制。默认是10M,可以通

    过配置项dfs.disk.balancer.max.disk.throughputInMBperSec进行控制

    失败次数限制:DiskBalancer中会存在失败次数的控制.在拷贝block数据块的时候,出现IOException异常,会进行失败次数的累加计数,如果超出最大容忍值,DiskBalancer也会退出.

    数据平衡阀值控制:DiskBalancer中可以提供一个磁盘间数据的平衡阈值,以此作为是否需要继续平衡数据的标准,配置项为dfs.disk.balancer.block.tolerance.percent.

     

    四 DiskBalancer的命令执行

    DiskBalancer内部提供了许多类别的命令操作,比如下面的查询命令:

    hdfsdiskbalancer -query nodename.mycluster.com

    我们也可以执行相应的plan命令来生成plan计划文件.

    hdfsdiskbalancer -uri hdfs://mycluster.com -plan node1.myclsuter.com

    然后我们可以用生成好后的json文件进行DiskBalancer的执行

    hdfsdiskbalancer -execute /system/diskbalancer/nodename.plan.json

    当然,如果我们发现我们执行了错误的plan,我们也可以通过cancel命令进行清除:

    hdfsdiskbalancer -cancel /system/diskbalancer/nodename.plan.json

    hdfsdiskbalancer -cancel <planID> -node <nodename>

    展开全文
  • 平衡二叉树节点跟高度的关系

    万次阅读 2018-05-26 12:29:24
    设f(n)为高度为n的平衡二叉树最少含有的节点数,则:f(1) = 1;f(2) = 2; f(3) = 4;f(4) = 7;…… 这些可以通过画图就能得到,但是当n很大时呢?其实有如下结论:f(n) = f(n-1) + f(n-2) +1,(n&amp;gt;=3)。这...
  • HDFS节点内数据平衡:DiskBalancer

    万次阅读 2016-06-28 15:12:55
    前言做集群运维的同学可能都会遇到这样一个...但有的时候,你会发现尽管节点间数据平衡了,但是节点内各个磁盘块的数据出现了不平衡的现象.这可是Balancer工具所干不了的事情.通过这个场景,我们引入本文的一个话题点:H
  • 平衡二叉树 AVL 的插入节点后旋转方法分析

    千次阅读 多人点赞 2013-10-28 21:02:11
    平衡二叉树 AVL( 发明者为Adel'son-Vel'skii 和 Landis)是一种二叉排序树,其中每一个节点的左子树和右子树的高度至多等于1。 首先我们知道,当插入一个节点,从此插入点到树根节点路径上的所有节点平衡都可能被...
  • CDH中hdfs平衡datanode节点数据

    千次阅读 2019-03-20 14:09:15
    CDH版HDFS Block Balancer方法 命令: sudo -u hdfs hdfs balancer 默认会检查每个datanode的磁盘使用情况,对磁盘...指定阀值,该阀值是datanode节点的磁盘使用占整个集群的百分比。 sudo -u hdfs hdfs bala...
  • 平衡二叉树之二(删除节点

    万次阅读 热门讨论 2013-09-17 20:38:00
    类似于添加操作,从平衡二叉树中删除节点也分为两步,第一步完成节点的删除,第二步找到因为删除而导致不满足平衡二叉树要求的子树并对其进行调整。 一、 删除节点平衡二叉树中删除节点更为复杂。首先第一步需要...
  • CDH添加datanode节点与重新平衡

    千次阅读 2018-11-27 15:38:20
    1、配置cloudera-scm-agent 连接的server节点 2、登录CDH web管理界面添加集群节点 3、添加角色实例 4、重启节点 5、更新过期配置信息 ...6、重新平衡数据存储      ...
  • 平衡二叉树的最少最多节点

    千次阅读 2019-01-28 10:31:21
    对于高度为n的平衡二叉树: 最少需h(n)个结点,做多需要2^n-1个结点。 h(n)=h(n-1)+h(n-2)+1 h(0)=0 h(1)=1 h(2)=2
  • 平衡二叉树插入某个节点的方法

    千次阅读 2013-09-17 23:18:05
    确定违规节点的位置  每个节点Z均有一个称之为平衡因子Bf的域,它用来存储(左子树... 根据二叉查找树的插入规则找到节点Z应该插入的正确的位置,插入后将节点Z的平衡因子置为0,此时节点Z给它的父节点产生了一个增
  • 本文讨论平衡二叉树中最少节点和最多层的关系。
  • 这是本人课程设计的题目,由于对于平衡二叉树的删除操作在大部分数据结构的书上没有介绍,网上此类操作的代码也少,因此,我把我做的贴出来晒一晒 typedef struct BBT{ int data; //节点的数据域 int bf; //平衡...
  • 平衡二叉树删除某个节点的方法

    千次阅读 2013-09-18 10:29:57
    确认违规节点的位置  首先我们找到待删除的节点Z,如果节点Z的两个...如果节点Z有两个非空的子节点,那么找到节点Z的中序后继节点Y(即右子树的最左节点),将节点Y的Key值覆盖节点Z的Key值,此时节点Y的两个孩子均为
  • 类似于添加操作,从平衡二叉树中删除节点也分为两步,第一步完成节点的删除,第二步找到因为删除而导致不满足平衡二叉树要求的子树并对其进行调整。 一、 删除节点平衡二叉树中删除节点更为复杂。首先第一步...
  • 本文只对已经安装好cdh的虚拟机节点加入集群平衡数据操作。 1、查看虚拟机 virsh list -all 2、修改虚拟机的配置(CPU、内存、磁盘) 切换到相应虚拟机目录下 cd /ecars/vm/cdhslave07 vim libvirt.xml 3、...
  • Status Find_the_k_smallest_lsize... //平衡二叉排序树节点中增设lsize域,值为左子树节点数加一,返回树中第k小节点的位置 if(T->lsize == k) P = T; else if(T->lsize > k) Find_the_k_smallest_lsize(T->lchild,
  • 高度为n的平衡二叉树最少需要多少个节点?高度为n的平衡二叉树最少需要多少个节点?参考 高度为n的平衡二叉树最少需要多少个节点? 设f(n)为高度为n的平衡二叉树最少含有的节点数,则:f(1) = 1;f(2) = 2; f(3) = ...
  • 简述: 实现AVL 树,主要是两...2. 每个节点左右子树的高度之差(平衡因子)相差最多为1 实现: 为了使所得的二叉树为平衡二叉树, 首先在BSTNode中加了一个计算节点高度的方法getHeight(), 当两个节点高度相
  • 插入1后,节点3失去平衡,是左-左型,需要右旋调整: 1.2、插入4: 1.3、继续插入 5 : 插入5后,节点2、3失去平衡,是右-右型,左旋转: 1.4、继续插入6 : 插入5后,节点2、3失去平衡,变成右-右型,需要进行...
  • HDFS添加删除节点并进行集群平衡

    千次阅读 2014-04-25 14:18:08
    HDFS添加删除节点并进行hdfs balance  方式1:静态添加datanode,停止namenode方式  1.停止namenode  2.修改slaves文件,并更新到各个节点  3.启动namenode  4.执行hadoop balance命令。(此项为...
  • 若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。首先要找出插入新结点后失去平衡的最小子树根结点的指针。然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。当失去平衡的最小子树被...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 174,919
精华内容 69,967
关键字:

平衡节点的选择