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)
一些猜想
下午偶然翻到篇Google的论文. 大意是能对LLM直接更新某些参数来达到控制输出了. 这个放开了想,大致就相当于能定位到某些功能所实际激活/需要的部分. 医学上的等价理解就是知道脑部的特定区域的作用影响了. 工程上来说,一旦变得实际可行就有可能大规模地减少参数和算力需求. 从这...
-
下午查了下关于仿制药的一点东西. 首先是关于一致性定义的相关文件. 简单的Google一般会指向NMPA/国家药监局的一些关于 化学药品注射剂仿制药质量和疗效一致性评价技术要求 的相关政策公告或者是更早期一些的关于这个文件起草意见稿. 一般理解的西药就是指化学药品. 这个文件本...
-
看完了一部未完成的电影. 这部片片子比较有意思的是一开始那段自嘲. 秦昊关于既然拍了也播不了,只是私下小圈子里自嗨的事情又什么意义的质问. 片里导演也 讪讪地承认生活的现实. 到这里其实沿着原有的思路,把补拍和一些意外穿插进去,可能还是一个不错的文艺片. 至少于戏里戏外的导演来说...
-
最近在补觉醒年代,发觉有几点细节蛮有意思的. 或者蛮值得把玩的. 一个是新青年单价2毛多. 按照0.2银元理解的话,相当于现在什么概念呢? Gemini给的人均年收入数据在5-30银元的区间,因沿海和地区已经行业属性而不同. 按30银元年收入等价现在6k月社平工资换算的话,大概一...
没有评论:
发表评论