[hadoop源码阅读][9]-mapreduce-job提交过程
摘要:1.从wordcount作为入口 public class WordCount{ public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); Job job = new Job(conf, "word count");//job类的主要工作就是设置各...
阅读全文
[hadoop源码阅读][9]-mapreduce-从wordcount开始
摘要:1.wordcount的代码如下 public class WordCount{ public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context conte...
阅读全文
[hadoop源码阅读][9]-mapreduce-概论
摘要:hadoop的mapreduce的运行流程大概就是如下图所示了 如果要是文字描述,估计要大篇幅了,大家可以参考下面的参考文档. 参考文档 1.http://caibinbupt.iteye.com/blog/336467 2.http://hadoop.apache.org/docs/r0.19.2/cn/mapred_tutorial.html 3.http://developer.yahoo.com/hadoop/tutorial/module4.html
阅读全文
[hadoop源码阅读][8]-datanode-datanode
摘要:datanode的定义 public class DataNode extends Configured implements InterDatanodeProtocol, ClientDatanodeProtocol, FSConstants, Runnable, DataNodeMXBeanDataNode实现了两个通信接口,其中ClientDatanodeProtocol是用于和Clien...
阅读全文
[hadoop源码阅读][8]-datanode-BlockSender,BlockReceiver
摘要:BlockSender 在DataNode节点上,主要有四个地方会用到数据块发送器BlockSender: 1.当用户向HDFS读取某一个文件时,客户端会根据数据所在的位置转向到具体的DataNode节点请求对应数据块的数据,此时DataNode节点会用BlockSender向该客户端发送数据; 2.当NameNode节点发现某个Block的副本不足时,它会要求某一个存储了该Block的DataNode节点向其它DataNode节点复制该Block,当然此时仍然会采用流水线的复制方式,只不过数据来源变成了一个DataNode节点; 3.HDFS开了一个调节DataNode负载均衡的工具Bal.
阅读全文
[hadoop源码阅读][8]-datanode-DataXceiver
摘要:DataNode上数据块的接受/发送并没有采用我们前面介绍的RPC机制,原因很简单,RPC是一个命令式的接口,而DataNode处理数据部分,往往是一种流式机制。DataXceiverServer和DataXceiver就是这个机制的实现。其中,DataXceiver还依赖于两个辅助类:BlockSender和BlockReceiver。如下是类图DataXceiverServerDataXceiverServer相对比较简单,创建一个ServerSocket来接受请求,每接受一个连接,就创建一个DataXceiver用于处理请求,并将Socket存在一个名为childSockets的Map中
阅读全文
[hadoop源码阅读][8]-datanode-FSDataset
摘要:与块相关的操作由Dataset相关的类处理,存储结构由大到小是卷(FSVolume)、目录(FSDir)和文件(Block和元数据等) block相关 block类有三个属性 private long blockId;//blockidprivate long numBytes;//block大小private long generationStamp;//block版本号 Block是对一个数据块的抽象,通过前面的讨论我们知道一个Block对应着两个文件,其中一个存数据,一个存校验信息,如下: blk_3148782637964391313 blk_314878263796439...
阅读全文
[hadoop源码阅读][8]-datanode-StorageDirectory
摘要:DataNode节点中的存储路径会分别存储不同的文件数据块。HDFS对节点存储路径的实现被抽象成了一个StorageDirectory类。 StorageDirectory文件 StorageDirectory类主要包含三个属性: File root; // 节点存储目录所在本地文件系统的目录 dfs.data.dir中配置的一个本地路径FileLock lock; // 排它锁,同步控制节点对该存储目录的操作 in_use.lockStorageDirType dirType; // namenode 或者datanoderoot目录下的文件结构在上一篇中已经介绍过了.不过datanode和
阅读全文
[hadoop源码阅读][8]-datanode-DataStorage
摘要:datanode的存储大体上可以分为两部分: 1.与Storage相关的类从宏观上刻画了每个存储目录的组织结构,管理由HDFS属性dfs.data.dir指定的目录,如current、previous、detach、tmp、storage等目录和文件,并定义了对整个存储的相关操作; 2.与Dataset相关的类描述了块文件及其元数据文件的组织方式,如current目录中的文件组织结构,以及对块文件的相关操作。 因为namenode也会用到Storage相关,而namenode并不存储块文件,因而将存储分成这两部分。 Storage类相关 先从一个datanode的配置看起,datanod...
阅读全文
[hadoop源码阅读][7]-HDFS概述(为读源码做准备)
摘要:1.GFS论文 HDFS是GFS的简化开源实现版本,了解GFS是不可缺少的.英文版本论文:http://research.google.com/archive/gfs.html论文中文翻译版:http://blademaster.ixiezi.com/2010/03/27/the-google-file-system%E4%B8%AD%E6%96%87%E7%89%88/其他参考:http://www.nosqlnotes.net/archives/2372.HDFS设计官方文档:http://hadoop.apache.org/common/docs/r0.19.2/cn/hdfs_desi
阅读全文
[hadoop源码阅读][6]-org.apache.hadoop.ipc-protocol和心跳分析
摘要:1. protocol在rpc中的作用通过对org.apache.hadoop.ipc包分析中,Hadoop实现了基于IPC模型的RPC机制,可以不需要像Java中实现的RMI机制一样,在RPC调用的C/S两端分别创建Stub和Skeleton,而是通过一组协议来进行RPC调用就可以实现通信。这主要是由于Hadoop所采用的序列化机制简化了RPC调用的复杂性。Hadoop定义了自己的通信协议,这些协议都是建立在TCP/IP协议之上的,规范了通信两端的约定。Hadoop集群中,不同进程之间通信需要使用合适的协议才能够进行交互。在协议接口中约定了通信双方的特定行为,那么,在实现这些通信协议的实现类
阅读全文
[hadoop源码阅读][6]-org.apache.hadoop.ipc-ipc.server
摘要:1. nio的reactor模式 具体的处理方式: · 1.一个线程来处理所有连接(使用一个Selector) · 2.一组线程来读取已经建立连接的数据(多个Selector,这里的线程数一般和cpu的核数相当); · 3.一个线程池(这个线程池大小可以根据业务需求进行设置) · 4.一个线程处理所有的连接的数据的写操作(一个Selector) 2. 简明流程图 3. RPC ...
阅读全文
[hadoop源码阅读][6]-org.apache.hadoop.ipc-ipc.client
摘要:1.client运行的流程1)创建代理对象; 2)代理对象调用相应方法(invoke()); 3)invoke调用client对象的call方法,向服务器发送请求(参数、方法); 4)再等待call方法的完成; 5)返回请求结果。2.client主要的内部类主要的几个类说明: 1. Call,表示一次rpc的调用请求2. Connection,表示一个client与server之间的连接,一个连接一个线程启动3. ConnectionId:连接的标记(包括server地址,协议,其他一些连接的配置项信息)4. ParallelCall:实现并行调用的请求5. ParallelResults:并
阅读全文
[hadoop源码阅读][6]-org.apache.hadoop.ipc-ipc总体结构和RPC
摘要:1.前言Hadoop的RPC主要是通过Java的动态代理(Dynamic Proxy)与反射(Reflect)实现,源代码在org.apache.hadoop.ipc下,有以下几个主要类:Client:RPC服务的客户端RPC:实现了一个简单的RPC模型Server:服务端的抽象类RPC.Server:服务端的具体类VersionedProtocol:所有的使用RPC服务的类都要实现该接口,在创建代理时,用来判断代理对象是否创建正确。2.Hadoop RPC简单过程简单来说,Hadoop RPC = 动态代理 + 定制好的二进制流。如果不关注细节,从用户的角度来看,它的结构大致像下图 远程的.
阅读全文
[hadoop源码阅读][6]-org.apache.hadoop.ipc-基础知识点(nio,动态代理)
摘要:动态代理http://langyu.iteye.com/blog/410071java niohttp://weixiaolu.iteye.com/blog/1479656http://blog.csdn.net/historyasamirror/article/details/6159248#
阅读全文
[hadoop源码阅读][5]-counter的使用和默认counter的含义
摘要:ps: 在map和reduce的过程中,可以通过设置Context.setStatus()来随时设置状态,这个底层也是使用reporter来设置的 1.在0.20.x版本中使用counter很简单,直接定义即可,如无此counter,hadoop会自动添加此counter. Counter ct = context.getCounter("INPUT_WORDS", "count"); ct.increment(1); 2.在0.19.x版本中,需要定义enum enum MyCounter {INPUT_WORDS }; reporter.incrCo
阅读全文
[hadoop源码阅读][4]-org.apache.hadoop.io.compress系列3-使用压缩
摘要:hadoop中支持的压缩方式有多种,比如Gzip,bzip2,zlib等,其中Gzip是hadoop中内置就支持的一种压缩方式,这种压缩方式在平时linux的开发人员和管理员中使用的比较广泛,压缩比也比较高,压缩速度也还不错,所以很多人都喜欢第一趋向于使用这种压缩格式进行文件的压缩。 在hadoop中,要在mapreduce 的job中使用gzip压缩是比较容易的,不记得是从哪个版本开始,h...
阅读全文
[hadoop源码阅读][4]-org.apache.hadoop.io.compress系列2-选择编解码器
摘要:在考虑如何压缩那些将由MapReduce处理的数据时,考虑压缩格式是否支持分割是很重要的。考虑存储在HDFS中的未压缩的文件,其大小为1GB,HDFS的块大小为64MB,所以该文件将被存储为16块,将此文件用作输入的MapReduce作业会创建1个输人分片(split ,也称为“分块”。对于block,我们统一称为“块”。)每个分片都被作为一个独立map任务的输入单独进行处理。现在假设。该.文件是一个grip格式的压缩文件,压缩后的大小为1GB。和前面一样,HDFS将此文件存储为16块。然而,针对每 一块创建一个分块是没有用的,因为不可能从gzip数据流中的任意点开始读取,map任务也不可能独
阅读全文
[hadoop源码阅读][4]-org.apache.hadoop.io.compress系列1-认识解码器/编码器
摘要:编码器和解码器用以执行压缩解压算法。在Hadoop里,编码/解码器是通过一个压缩解码器接口实现的。因此,例如,GzipCodec封装了gzip压缩的压缩和解压算法。下表列出了Hadoop可用的编码/解码器。 压缩格式 Hadoop压缩编码/解码器 DEFLATE org.apache.hadoop.io.compress.DefaultCodec gzip org.apache.ha...
阅读全文
[hadoop源码阅读][3]-新旧api区别
摘要:http://blog.csdn.net/xw13106209/article/details/6924458hadoop 版本0.20和之前的版本差距较大,包括部分api结构,配置文件结构在hadoop 权威指南中有说明,原文如下:The new Java MapReduce APIRelease 0.20.0 of Hadoop included a new Java MapReduce API, sometimes referred to as “Context Objects,” designed to make the API easier to evolve in the futu
阅读全文