HDFS说简单也简单,说复杂,其实也不复杂. 它解决的主要是在集群规模大了之后,distribution的问题. 更重要的是把disk的failure视为常态. 因为毕竟,只是单纯的distribution的话,如NFS的也可以达到目的. 但概念是Google提出的,它面对的问题显然不是一般人会常态遇见的. 所以HDFS/GFS的概念主要在replication. 理论上的模型也很符合直觉. 寻找一个可用的节点,然后分发之. 所不同的就是这种分发的具体实现了. HDFS的replication其实很简单. 比如你upload一个local的文件到HDFS的时候,DFSClient会向namenode发起一个RPC的create请求. 顺便说下,Hadoop的RPC其实有两套. 一套是给各种node的用的,基于interface的reflection. 另一个套是给DFSClient之类的,基于Invocaionhandler. 但本质都是把方法名和参数以及连接信息什么的写到流里,然后在method.invoke() 也许可以理解为前者是给server用的.毕竟有了local的instance. 而诸如DFSClient的是没有instance的实现的,所以要InovcationHandler去hook. 回到create. namenode会向FSNamesystem添加一个inode信息,同时记录一个lease. 此时的inode为INodeFileUnderConstruction,表明是未完成的. 而lease的作用是用来保证不重复create/以及一些超时处理. 然后namenode将这个RPC的请求返回给DFSClient. DFSClient会开启一个DataStreamer去做copy and write的工作. 首先是到RPC到namenode去申请block. 此时的namenode会去查看FSNamesystem里的inode信息. namenode会检查inode的类型是否是INodeFileUnderConstruction,即未完成. 然后会check下lease的信息,看时候有意外的已经replication的情况.(这个估计是以前有类似bug吧.) 当然,在此时,一般这些check都会pass掉的. 但,这是distribution的,所以,按照状态机来变换是最简单的事情. datanode会根据block size去选择一些datanode. 在用DFSClient.copyfromlocal的情况下,block size是由参数fs.local.block.size决定的. 其他情况下,是由dfs.block.size决定的. replicator在choose datanode的时候会根据replication的数目而略有说不同. 当数目是<2的时候,当local也是datanode的是会被选上. 其他情况则感觉datanode上的block数目和load做一个权衡. 然后把选择好的naenode把block和datanode的分配信息返还给DFSClient. DFSClient则选择第一个datanode建立连接,把读到的数据写到这个选中的datanode上. 在DataStreamer里还有一个ResponseProcessor的东西,在处理这个datanode返回来的ack. 但是,这里只写往了一个datanode,那么replication怎么实现的呢? 这个在datanode的实现了. datanode在经历过一些列初始化之后,会有一个DataXceiverServer去处理进来的连接. 尤其的,没一个连接会dispatch到DataXceiver去处理. DataXceiver就是HDFS的IO操作的核心吧. 当地一个datanode收到DFSClient发来的OP_WRITE_BLOCK请求时候,会调用writeBlock把读到的block写到datanode的local filesystem里. 同时会取DFSClient传过来的datanode array信息,取第一个,然后与之建立连接,然后把把block信息和剩下的datanode写到对方的stream里. 即,HDFS的replication就是通过这种级联的,pipeline方式的write扩散出去的. 同样,ack也是一级一级地往前传递. 至于写到datanode上的block大小限制是在DFSOutputStream里限定的. 当写到这个数的时候会表明这是最后一个package. 至于读则差不多. namenode会在返回datanode的时候稍微排序下. 将local和local rack的往前排. 因为client在取datanode的时候总是先取前面. 至于local rack怎么决定的. 这个在NetworkTopology里,没仔细看.
2011-03-06
HDFS的碎碎念.
订阅:
博文评论 (Atom)
爽文
去看了好东西. 坦白说,多少是带着点挑刺的味道去的. 毕竟打着爱情神话和女性题材的气质,多多少少是热度为先了. 看完之后倒是有些新的想法. 某种程度上来说,现在的年轻人或者说声音就像小叶. 只要说点贴心的话就能哄好. 也是那种可以不用很努力了. 留在自己的舒适区避难所小圈子抱团就...
-
最近尝试了下海淘. 当然,方向上来说是从国内到新加坡. 先是买了个iPhone,算上运费和双重征税,到手比官方还是便宜个一两百新的. 换算回来也不多事10%的纯粹价格因素差异. 当然,之类有电商促销的因素. 也有比较基准是新加坡Apple Store售价的原因. 但如果同样比较A...
-
这两天看完了Netflix版的三体. 某种程度上来说,完成度还是不错的. 尽管开始的时候对于第一集片头有些争论,但整体如果带入当下去看的话,还是有些梗的. 比如三体对于地球科技的发展速率的担忧,由此衍生的智子. 以及现有力量对比上的压倒性优势. 如果带入中美关系以及各自的历史阶段...
-
前几天Sora出来后才仔细看了下diffusion,发觉确实算挺取巧的. 按照naive的intuition或者说不那么现代的方式的话,可能需要segmentaion为基础的composite的方式去生成图片,即使扯点deep learning/network的,可能也是类似一些...
没有评论:
发表评论