您的位置:首页 > 运维架构

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中读取数据的示例:

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中写入文件的过程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: