随笔分类 -  hadoop

摘要:DateNode的功能主要分为三大类:和DFSClient的交互;和NameNode的交互;本身提供数据存储的功能。 DataNode引用了FSDataset来提供数据存储功能,FSDataset是这个存储结构的入口,对于DataNode上面所有的Block的操作都要经过FSDataset,由此管理在此DataNode上存储的block。FSDataset的类图如下:DataStorageDataStorage主要提供存储元信息,如文件目录,存储目录的状态转移管理,Version文件等等。DataStorage内部有一个List<StorageDirectory>数据结构,表示此D 阅读全文
posted @ 2012-08-10 10:58 nod0620 阅读(1289) 评论(0) 推荐(0)
摘要:DataNode查看他的属性,可以分成以下几个方面:1.offerService()方法,此方法在DataNode主循环中执行,做的事情包括和NameNode心跳交互;通知NameNode一段时间以来收到的block;本机block的报告2.DataXceiverServer,主要处理block的读写3.BlockScanner,对本机block的扫描和校验处理4.FSDataset,本机block存储的入口5.ipcServer,主要是DataNode和DataNode之间recover block时使用。这里主要说明第1点,其它几点在另外一文中已经介绍过,offerService的主要流程 阅读全文
posted @ 2012-08-10 10:41 nod0620 阅读(5467) 评论(0) 推荐(0)
摘要:首先DataNode自身就是一个Runnable的实现,也就是说DataNode是以一个单独的线程在运行着的。DataXceiverServer,DataXceiverDataNode在Block的数据流读写方面都交给了DataXceiverServer,DataXceiverServer也是运行在一个单独的线程当中,在主循环当中阻塞监听dfs.datanode.address配置的端口号,当有连接过来时,新建一个DataXceiver实例,并且在单独的线程当中运行DataXceiver。DataXceiver根据前面建立的Socket,建立DataInputStream,读取请求的操作,请. 阅读全文
posted @ 2012-08-07 14:30 nod0620 阅读(1404) 评论(0) 推荐(0)
摘要:先看一段代码: package com.abc;import java.io.IOException;import java.util.Iterator;import java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.T... 阅读全文
posted @ 2012-06-20 11:26 nod0620 阅读(12294) 评论(1) 推荐(3)
摘要:JobClient JobClient是提交job的客户端,当创建一个实例时,构造函数里面要做的事情是: public JobClient(JobConf conf) throws IOException { setConf(conf); init(conf); } public void init(JobConf conf) throws IOException { String tracker = conf.get("mapred.job.tracker", "local"); tasklogtimeout = conf.getInt( TASKLO 阅读全文
posted @ 2012-05-16 13:36 nod0620 阅读(3702) 评论(0) 推荐(0)
摘要:看了许久的代码,把map的流程熟悉了下,不追求最准确的理解,记录下来以免忘记。 对于JobTracker和TaskTracker等大层面有控制和通讯的代码暂时不表 map过程俗气的先上一个图:map这一端基本是这样的流程:input split分解成map个数量的部分输入==》RecordReader分解成Mapper需要的(key,value)记录==》执行map方法==》执行的结果起初在内存当中==》当内存记录过多的时候spill到硬盘上面,如果有分区(Partitioner的话),spill的文件会记录分区的信息,单个spill文件首先按分区排序,然后按key排序==》如果有多个spi. 阅读全文
posted @ 2012-05-10 11:25 nod0620 阅读(5447) 评论(1) 推荐(0)
摘要:在HDFS中可能同时有多个客户端在同一时刻写文件,如果不进行控制的话,有可能多个客户端会并发的写一个文件,所以需要进行控制,一般的想法是用一个互斥锁,在某一时刻只有一个客户端进行写操作,但是在分布式系统中有如下问题: 1.每次写文件前,客户端需要向master获取锁情况,他们之间的网络通讯太频繁。 2.当某个客户端获取锁之后和master失去联系,这个锁一直被该客户端占据,master和其他客户端不能获得锁,后续操作中断。在HDFS中使用了租约解决上面的问题: 1.当写一个文件时,客户端向NameNode请求一个租约,租约有个时间期限,在时间期限内客户端可以写租约中管理的文件,一个文件只... 阅读全文
posted @ 2012-04-10 12:04 nod0620 阅读(866) 评论(0) 推荐(0)
摘要:DFSClient代码很复杂,但是不外乎几种情况:和NameNode的通讯,和DataNode的通讯,写入数据到DataNode和从DataNode读到数据DFSClient和NameNode的通讯就是通过上文分析的RPC.getProxy()获得NameNode的代理进而和NameNode进行通讯DFSCLient和DataNode的通讯就不是这样了,狗血的不明白为什么要这样做,DFSCLient和DataNode之间使用DFSOutputStream和DFSInputStream进行数据写入和读取DFSCLient.DFSOutputStream:DFSCLient和DataNode的通讯 阅读全文
posted @ 2012-03-31 16:18 nod0620 阅读(659) 评论(0) 推荐(0)
摘要:HDFS中简单的分为:Client,DataNode,NameNode三大类,其中他们之间的通讯一共有这么几种:Client <=====>NameNode;Client <=====>DataNode;NameNode <======>DataNode;DataNode<=====>DataNode几种,其中涉及到很多网络通讯的封装,也涉及到Hadoop的IPC机制。 他们的通讯如下: 主要类的类图:HDFS的通讯方面的代码写的不是很优雅,相互依赖太多,只有一点点进行分析总体DFSClient与NameNode的通讯使用了Hadoop自身的ip 阅读全文
posted @ 2012-03-27 19:54 nod0620 阅读(1739) 评论(0) 推荐(0)
摘要:这里将给出HDFS一些主要类的关系图:NameNode后面的一些类的关系:NameNode背后的类图:DataNode存储相关的类图:Block:HDFS内部以Block的形式保存数据,Block的大小比较大,默认64M。BlockInfo:继承了Block,额外包含INodeFile信息,这个在namenode是持久化在磁盘里面的,同时包含了Block所属的DatanodeDescriptor信息以及Block的前后Block信息BlockMap:定义了一个Map结构,是Block到BlockInfo的映射,Map的接口是自定义的轻量级接口,没有使用标准的java.util.Map接口INo 阅读全文
posted @ 2012-03-26 13:19 nod0620 阅读(1327) 评论(0) 推荐(0)
摘要:HDFS是以最少的钱买最烂的机器实现最安全的难度很高的分布式文件系统,可以看出HDFS认为机器故障是种常态,所以设计时充分考虑到单个机器故障,单个磁盘故障,单个文件丢失的情况。 HDFS主要分为client,namenode,datanode三大主题,这里的client更像传统的C/S结构中的C,因为必要时client需要维护一系列的状态,验证数据完整性等;namenode在HDFS中是个单点,是整个HDFS的心脏,他管理着HDFS的文件命名空间,管理整棵文件树的添加,修改,删除,这些都是持久化在硬盘之上的,文件里面的内容包含block的元数据;block和datanode的映射则是放在... 阅读全文
posted @ 2012-03-08 18:46 nod0620 阅读(971) 评论(0) 推荐(0)