Hadoop源码分析之开篇
2013-12-13 10:28
387 查看
看Hadoop也有段时间了,刚开始只是学习在Hadoop上跑MapReduce程序,基本的使用方式都已经了解了,但是很多配置方面的还是很模糊,当看到一个模糊的点时,再网上搜又比较费时,所以索引静下心来看看Hadoop的源代码,搞清楚Hadoop内部运作原理。所以就用写博客的方式来记录看Hadoop源码的过程。
看Hadoop源码,我会从HDFS开始,首先是HDFS的读写,当然在这个过程中会遇到很多问题,因为HDFS使用了Common包,构建再Common包之上,看HDFS时主线是HDFS执行流程,然后遇到Common包中的机制和类时,再来分析Common包。
主要参考书籍是:
《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》
这本书写得还是很好的,主要分析了Common和HDFS,结合Hadoop的源码,很多地方还是比较容易弄懂的,其他书没看过,所以就不多说了。
以后还会参考一些其他文章和书籍,再看到的时候再列出。
使用的Hadoop源码版本是Hadoop-1.2.1,为什么是这个版本,因为我感觉Hadoop-2.x太复杂了,《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》这本书是分析的Hadoop-1.0版本,HDFS和Common部分与Hadoop-1.2.1源码有部分不同,但是对理解HDFS的主要流程没有差别。
下面先看一个HDFS中读取数据的示例:
这个程序主要实现的功能是从HDFS中读取一个文件hdfs://localhost:9000/user/wordcount/,对于如何向HDFS中写如文件可以参考文章:Hadoop第一个程序,利用API向HDFS中写入数据
对于HDFS的源码分析将根据上面的这个程序先分析从HDFS中读取文件的过程,然后是向HDFS中写入文件的过程
看Hadoop源码,我会从HDFS开始,首先是HDFS的读写,当然在这个过程中会遇到很多问题,因为HDFS使用了Common包,构建再Common包之上,看HDFS时主线是HDFS执行流程,然后遇到Common包中的机制和类时,再来分析Common包。
主要参考书籍是:
《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》
这本书写得还是很好的,主要分析了Common和HDFS,结合Hadoop的源码,很多地方还是比较容易弄懂的,其他书没看过,所以就不多说了。
以后还会参考一些其他文章和书籍,再看到的时候再列出。
使用的Hadoop源码版本是Hadoop-1.2.1,为什么是这个版本,因为我感觉Hadoop-2.x太复杂了,《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》这本书是分析的Hadoop-1.0版本,HDFS和Common部分与Hadoop-1.2.1源码有部分不同,但是对理解HDFS的主要流程没有差别。
下面先看一个HDFS中读取数据的示例:
package test.fs; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class LoadDataFromHDFS { public static void main(String[] args) throws IOException { new LoadDataFromHDFS().loadFromHdfs("hdfs://localhost:9000/user/wordcount/"); } public void loadFromHdfs(String hdfsPath) throws IOException { Configuration conf = new Configuration(); Path hdfs = new Path(hdfsPath); FileSystem in = FileSystem.get(conf); FileStatus[] status = in.listStatus(hdfs); for(int i = 0; i < status.length; i++) { BufferedReader br = new BufferedReader(new InputStreamReader(new FSDataInputStream(in.open(status[i].getPath())))); String line = null; while((line = br.readLine()) != null) { System.out.println(line); } br.close(); } } }
这个程序主要实现的功能是从HDFS中读取一个文件hdfs://localhost:9000/user/wordcount/,对于如何向HDFS中写如文件可以参考文章:Hadoop第一个程序,利用API向HDFS中写入数据
对于HDFS的源码分析将根据上面的这个程序先分析从HDFS中读取文件的过程,然后是向HDFS中写入文件的过程
相关文章推荐
- Hadoop源码分析笔记(十二):名字节点--文件系统目录树
- HBase源码分析之org.apache.hadoop.hbase.master.handler包
- Hadoop2源码分析-MapReduce篇
- (转载)Hadoop -- MapReduce源码分析总结
- Hadoop源码分析之DataNode的启动与停止
- Hadoop源码分析之NameNode的启动与停止(续)
- Hadoop2源码分析-MapReduce篇
- hadoop源码分析系列(五)——org.apache.hadoop.hdfs包之balancer篇
- Hadoop源码分析之心跳机制
- Hadoop源码分析笔记(四):Hadoop文件系统简介
- Hadoop-2.4.1学习之Map任务源码分析(上)
- 细水长流Hadoop源码分析(3)RPC Server初始化启动过程
- Hadoop源码分析2: NIO Socket 分析
- Hadoop Common源码分析之SerializationFactory、Serialization
- NHibernate源码分析系列之开篇
- Hadoop源码分析16: IPC流程(11) 整体流程
- Hadoop源码分析29 split和splitmetainfo
- Hadoop心跳机制源码分析
- 2014-11-09---Hadoop的基础学习(二)----HDFS的特性和JavaAPI源码分析
- 3.hadoop namenode -format脚本与源码分析