b2c信息网

您现在的位置是:首页 > 热点问题 > 正文

热点问题

hadoop实战源码(hadoop开源项目)

hacker2022-08-16 08:10:22热点问题91
本文目录一览:1、hadoophdfs源码怎么看2、

本文目录一览:

hadoop hdfs 源码怎么看

在使用Hadoop的过程中,很容易通过FileSystem类的API来读取HDFS中的文件内容,读取内容的过程是怎样的呢?今天来分析客户端读取HDFS文件的过程,下面的一个小程序完成的功能是读取HDFS中某个目录下的文件内容,然后输出到控制台,代码如下:

[java] view plain copy

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);

//in = FileSystem.get(URI.create(hdfsPath), conf);//这两行都会创建一个DistributedFileSystem对象

FileStatus[] status = in.listStatus(hdfs);

for(int i = 0; i status.length; i++) {

byte[] buff = new byte[1024];

FSDataInputStream inputStream = in.open(status[i].getPath());

while(inputStream.read(buff) 0) {

System.out.print(new String(buff));

}

inputStream.close();

}

}

}

FileSystem in = FileSystem.get(conf)这行代码创建一个DistributedFileSystem,如果直接传入一个Configuration类型的参数,那么默认会读取属性fs.default.name的值,根据这个属性的值创建对应的FileSystem子类对象,如果没有配置fs.default.name属性的值,那么默认创建一个org.apache.hadoop.fs.LocalFileSystem类型的对象。但是这里是要读取HDFS中的文件,所以在core-site.xml文件中配置fs.default.name属性的值为hdfs://localhost:9000,这样FileSystem.get(conf)返回的才是一个DistributedFileSystem类的对象。 还有一种创建DistributedFileSystem这种指定文件系统类型对像的方法是使用FileSystem.get(Configuration conf)的一个重载方法FileSystem.get(URI uri, Configuration),其实调用第一个方法时在FileSystem类中先读取conf中的属性fs.default.name的值,再调用的FileSystem.get(URI uri, Configuration)方法。

Hadoop 请教学习顺序

虽然从事Hadoop方面工作,但是不是高手,毕竟只有一年经历而已。

分享下本人的学习经历吧。

了解Hadoop运行机制,可以学习Hadoop权威指南或者Hadoop实战;

了解Hadoop运行流程,看懂HADOOP_HOME/bin/下面主要执行脚本。

查看core-default.xml/hdfs-default.xml/mapred-default.xml等默认配置

文件,及core-site.xml/hdfs-site.xml/mapred-site.xml等相关文件,学会

如何进行参数优化,以及掌握如何配置读取压缩文件,默认的gzip,及

自定义的lzo,学会自定义Combiner/Patitioner等,掌握各种输入输出

格式的区别及应用场景,学会自定义输入输出格式,其次学习MapReduce算法,

比如In-Map-Combing,相对频度计算,Pairs算法,Strips算法等。掌握好

mapreduce编程。

在这其中,需要好好阅读HADOOP_HOME/src/目录下的Hadoop源码,

这个就是开源最大的好处。说的比较乱,但是就凑合着借鉴下吧

hadoop的源代码怎么下载?应该下载哪一个文件?不知道选择那个?

根据你的系统和需求来下载

如果你的OS是Fedora ,是64位机的话,可以选择下载后缀是amd64.rpm包,使用rpm命令安装。

如果你的OS是Fedora ,是32位机的话,可以选择下载后缀是i386.rpm包,使用rpm命令安装。

如果你的OS是Debian或Ubuntu, 是64位机的话,可以下载amd64.deb包。

如果你的OS是Debian或Ubuntu, 是32位机的话,可以下载i386.deb包。

如果不确定的话,那么下载tar.gz包,解压缩到你想安装的目录(/usr/local/)即可,然后做环境配置。

如何通过eclipse查看,阅读hadoop2.4源码

1.导入查看hadoop源码

(1)选择Existing Projects into Workspace

(2)选择源码路径

(3)查看源码

这样我们就完成了全部的内容。

2.阅读hadoop源码

其中比较常用的:

Open Call Hierarchy:

用Open Call

Hierarchy可以查看方法的调用层次。如果想知道一个方法在别的什么地方被调用了,这个功能就很好用了,实际中也很常用,比如要重构一个方法时,想

知道他对其它什么地方可能有影响,就可以用这个功能。在方法名上点击右键,选择Open Type

Hierarchy即可,快捷键是Ctrl+Alt+H。可以在Call Hierarchy窗口看到方法的调用层次的导航。

Open Type Hierarchy:

用Open Type Hierarchy可以查看类的继承关系,可以在Hierarchy窗口看到继承层次的导航。在方法或类名上点击右键,选择Open

Type Hierarchy即可,快捷键是F4。

介绍完毕,这里在介绍一些其他的跟踪源码的方法:

1、 用Open Declaration可以查看类、方法和变量的声明。这是最常用的一个功能了,如果在要追踪的对象上点右键,选择Open

Declaration,可以跳转到其声明的地方。这个功能有个快捷键是F3,当然你也可以按住Ctrl键,鼠标移过去会变成一个小手,单击就可以了。

2、用Open Super

Implemention可以查看当前方法在父类中的实现或接口中的声明(前提是该方法是对父类或接口中相应方法的重写),在方法名上点击右键,选择Open Super

Implemention即可。

3、 最后介绍一个超级好用的功能,叫Open

Implemention,就是可以跳转到某个调用的方法的具体实现的地方去。为什么说这个是超级好用呢?用过Spring的人都知道,现在都提倡面向接

口编程,所以,如果使用Open

Declaration来追踪一个方法的调用的话,只会看到该方法在接口中的声明,而看不该方法在具体类中的实现,当然,可以使用Call

Hierarchy先得到该方法的整个的调用层次,然后再导航到具体的实现处,但操作有些麻烦了。

有了Open Implemention,就可以直接看到实现的代码了,在方法名上点击右键,选择Open

Implemention就可以了!只是要享受这个功能,可安装一个Eclipse插件,这里就不在详细介绍了。

为什么编译 hadoop 源码

编译了hadoop,可以方便的查看某个函数的实现。如果不编译就只是自己去翻源代码了。更重要的是如果你编译了hadoop,你可以根据自己的需要改动hadoop的某些实现机制。(hadoop开源的好处)

发表评论

评论列表

  • 只影辙弃(2022-08-16 14:27:52)回复取消回复

    可以直接看到实现的代码了,在方法名上点击右键,选择Open Implemention就可以了!只是要享受这个功能,可安装一个Eclipse插件,这里就不在详细介绍了。为什么编译 hadoop 源码编译了hadoop,可以方便的查看某个函数的实现。如果不编译就只

  • 孤央鸢栀(2022-08-16 14:22:53)回复取消回复

    介绍一个超级好用的功能,叫Open Implemention,就是可以跳转到某个调用的方法的具体实现的地方去。为什么说这个是超级好用呢?用过Spring的人都知道,现在都提倡面向接 口编程,所以,如果使用Open De

  • 弦久晚鲸(2022-08-16 16:03:53)回复取消回复

    t(new String(buff)); } inputStream.close(); } } } FileSystem in = FileSystem.g

  • 嘻友简妗(2022-08-16 14:56:53)回复取消回复

    然后输出到控制台,代码如下:[java] view plain copy public class LoadDataFromHDFS { public static void main(String[] args) throws IOExce

  • 南殷美咩(2022-08-16 10:48:23)回复取消回复

    public class LoadDataFromHDFS { public static void main(String[] args) throws IOException { new LoadDataFromHDFS().loadFromHdfs("