转自:http://www.it165.net/admin/html/201402/2382.html 在上一篇文章Hadoop源码分析之DataNode的启动与停止中分析了DataNode节点的启动大致过程,下面来重点分析DataNode节点中启动过程中的与NameNode节点的几个通信过程. IPC对象创建 在DataNode类中有一个成员变量namenode,它是DatanodeProtocol类型,DatanodeProtocol接口是DataNode节点与NameNode节点间进行IP…
转自:http://www.it165.net/admin/html/201312/2178.html org.apache.hadoop.conf.Configuration类是Hadoop所有功能的基础类,每一种功能执行之前都需要有先得到一个Configuration对象.Hadoop使用了XML文件作为配置文件,来保存运行时的配置信息,然后将配置加载到Configuration对象中,要使用配置信息时直接从Configuration对象中取. Hadoop配置文件 将下载的Hadoop压缩…
一.客户端 Map-Reduce的过程首先是由客户端提交一个任务开始的. 提交任务主要是通过JobClient.runJob(JobConf)静态函数实现的: public static RunningJob runJob(JobConf job) throws IOException { //首先生成一个JobClient对象 JobClient jc = new JobClient(job); …… //调用submitJob来提交一个任务 running = jc.submitJob(jo…
Hadopo提供了一个抽象的文件系统模型FileSystem,HDFS是其中的一个实现. FileSystem是Hadoop中所有文件系统的抽象父类,它定义了文件系统所具有的基本特征和基本操作. FileSystem类在org.apache.hadoop.fs包中.在eclipse中按ctrl+shift+T进行搜索,提示导入源码包hadoop-hdfs-client-3.0.0-sources.jar.导入即可. 一.成员变量 1.Hadoop使用的默认的文件系统的配置项,在core-defa…
    用户提交 MapReduce 作业后,JobClient 会调用 InputFormat 的 getSplit方法 生成 InputSplit 的信息.     一个 MapReduce 任务可以有多个 Split,其用于分割用户的数据源,根据用户设定的切割大小把数据源切割成 InputSplit元数据和 InputSplit原始数据. 元数据的作用:被JobTracker使用,生成Task的本地行的数据结构. 原始数据的作用:被Map Task初始化时使用,用来获取要处理的数据. 以下…
源码位于Hadoop-common ipc包下 abstract class Server 构造Server protected Server(String bindAddress, int port, Class<? extends Writable> rpcRequestClass, int handlerCount, int numReaders, int queueSizePerHandler, Configuration conf, String serverName, Secret…
有了上面Mapper输出的内存存储结构和硬盘存储结构讨论,我们来细致分析MapOutputBuffer的流程.首先是成员变量.最先初始化的是作业配置job和统计功能reporter.通过配置,MapOutputBuffer能够获取本地文件系统(localFs和rfs),Reducer的数目和Partitioner. SpillRecord是文件spill.out{spill号}.index在内存中的相应抽象(内存数据和文件数据就差最后的校验和),该文件保持了一系列的IndexRecord,例如以…
以下轮到FSNamesystem 出场了. FSNamesystem.java 一共同拥有4573 行.而整个namenode 文件夹下全部的Java 程序总共也仅仅有16876 行,把FSNamesystem 搞定了,NameNode 也就基本搞定. FSNamesystem 是NameNode 实际记录信息的地方,保存在FSNamesystem 中的数据有: 文件名称数据块列表(存放在FSImage 和日志中) 合法的数据块列表(上面关系的逆关系) 数据块DataNode(仅仅保存在内存中,…
Map的结果,会通过partition分发到Reducer上.Reducer做完Reduce操作后,通过OutputFormat,进行输出.以下我们就来分析參与这个过程的类.   Mapper的结果,可能送到可能的Combiner做合并,Combiner在系统中并没有自己的基类,而是用Reducer作为Combiner的基类.他们对外的功能是一样的.仅仅是使用的位置和使用时的上下文不太一样而已. Mapper终于处理的结果对<key, value>,是须要送到Reducer去合并的,合并的时候…
转自: http://blog.csdn.net/workformywork/article/details/21783861 从NameNode节点获取数据块所在节点等信息 客户端在和数据节点建立流式接口的TCP连接,读取文件数据前需要定位数据的位置,所以首先客户端在 DFSClient.callGetBlockLocations() 方法中调用了远程方法 ClientProtocol.getBlockLocations() ,调用该方法返回一个LocatedBlocks对象,包含了一系列的L…