摘要: Java并发编程总结---Hadoop核心源码实例解读(2011-05-26 10:42:44)转载▼标签:并发编程分类: 编程程序设计需要同步(synchronization),原因:1)复杂的功能要求的需要使用多线程编程,线程之间存在读写共享变量。2)读写共享变量(shared mutual variable),JVM的内存模型(Memory model: decide when and how changes made by one thread become visuble to others)受到其它因素干扰。3)对共享变量的操作非原子性。例如 i++;就不是原子操作,它分为两部分, 阅读全文
posted @ 2012-11-22 12:25 蜗牛123 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 由于Hadoop的MapReduce和HDFS都有通信的需求,需要对通信的对象进行序列化。Hadoop并没有采用Java的序列化,而是引入了它自己的系统。org.apache.hadoop.io中定义了大量的可序列化对象,他们都实现了Writable接口。实现了Writable接口的一个典型例子如下:[java] view plaincopyprint?publicclassMyWritableimplementsWritable{//Somedata private<SPANstyle="COLOR:#ff0000">intcounter;</SPAN& 阅读全文
posted @ 2012-11-22 12:21 蜗牛123 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 下面给出了Hadoop的包的功能分析。PackageDependencestool提供一些命令行工具,如DistCp,archivemapreduceHadoop的Map/Reduce实现filecache提供HDFS文件的本地缓存,用于加快Map/Reduce的数据访问速度fs文件系统的抽象,可以理解为支持多种文件系统实现的统一文件访问接口hdfsHDFS,Hadoop的分布式文件系统实现ipc一个简单的IPC的实现,依赖于io提供的编解码功能参考:http://zhangyu8374.iteye.com/blog/86306io表示层。将各种数据编码/解码,方便于在网络上传输net封装部分 阅读全文
posted @ 2012-11-22 12:20 蜗牛123 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 这个blog是对hadoop源码分析比较全的文章,虽然时间有点久了,但是很多东西还是很有借鉴价值的,慢慢学习中。经济不行啦,只好潜心研究技术。Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。GoogleCluster: http://research.google.com/archive/googlecluster.htmlChubby:http://labs.google.com/papers/chubby.htmlGFS:http://labs.google.com/papers/gfs.htmlBigTable:http://labs 阅读全文
posted @ 2012-11-22 12:19 蜗牛123 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 前面讲了InputFormat,就顺便讲一下Writable的东西吧,本来应当是放在HDFS中的。 当要在进程间传递对象或持久化对象的时候,就需要序列化对象成字节流,反之当要将接收到或从磁盘读取的字节流转换为对象,就要进行反序列化。Writable是Hadoop的序列化格式,Hadoop定义了这样一个Writable接口。[html] view plaincopyprint?publicinterfaceWritable{voidwrite(DataOutputout)throwsIOException;voidreadFields(DataInputin)throwsIOException; 阅读全文
posted @ 2012-11-22 11:39 蜗牛123 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 1.下面是主要的类层次图2.Writable和WritableComparable的子类们基本大同小异3.RawComparator和WritableComparator举例如下,以下以text类型的comparator每个字符从高到低位比较,对于数字类型的字符串也是比较适用的/** A WritableComparator optimized for Text keys. */publicstaticclass Comparator extends WritableComparator { publicint compare(byte[] b1, int s1, int l1, byte[] 阅读全文
posted @ 2012-11-22 11:18 蜗牛123 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 键默认的排序处理是,从一个流中读键类型的实例,使用键类型的readFields()方法来解析字节流,然后对这两个对象调用compareTo()方法。为了更快的排序,可以只通过检视字节流而不用解析出包含在其中的数据来判断这两个key的顺序。比如,考虑比较字符串文本。如果字符按照顺序读入,我们就可以在第一个字符不同的地方确定它们的顺序。即使是需要读入所有的字节,对象自身也没有初始化的必要。要支持这个高速的排序机制,你可以在你自己的数据类型的比较器实现中继承WritableComparable类。然后,重载下面的方法:public int compare(byte[] b1, int s1, int 阅读全文
posted @ 2012-11-22 11:09 蜗牛123 阅读(192) 评论(0) 推荐(0) 编辑