Hdfs下载数据源码分析

在这里,我是接着之前的,贴下代码

package cn.itcast.hadoop.hdfs;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.net.URI;

import java.net.URISyntaxException;

import org.apache.commons.io.IOUtils;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FSDataOutputStream;

import org.apache.hadoop.fs.FileStatus;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.LocatedFileStatus;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.fs.RemoteIterator;

import org.junit.Before;

import org.junit.Test;

public class HdfsUtil {

FileSystem fs = null;

@Before

public void init() throws IOException, InterruptedException, URISyntaxException {

//读取classpath下的***-site.xml配置文件,并解析其内容,封装到conf对象中

Configuration conf = new Configuration();

//也可以在代码中对conf中的配置信息进行手动设置,会覆盖配置文件中的读取的值

conf.set("fs.defaultFS", "hdfs://weekend110:9000/");

//根据配置信息,去获取一个具体文件系统的客户端caozuo

fs = FileSystem.get(new URI("hdfs://weekend110:9000/"), conf, "hadoop");

}

/*

* 上传文件,比较底层的写法

*/

@Test

public void upload() throws IOException {

Path dst = new Path("hdfs://weekend110:9000/aa/qingshu.txt");

FSDataOutputStream os = fs.create(dst);

FileInputStream is =new FileInputStream("c:/qingshu.txt");

IOUtils.copy(is, os);

}

/*

* 上传文件,封装好的写法

*/

@Test

public void upload2() throws Exception, IOException   {

fs.copyFromLocalFile(new Path("c:/qingshu.txt"), new Path("hdfs://weekend110:9000/aaa/bbb/ccc/qingshu2.txt"));

}

/*

* 下载文件,封装好的写法

*/

@Test

public void download() throws Exception, IOException{

fs.copyToLocalFile(new Path("hdfs://weekend110:9000/aa/qingshu2.txt"), new Path("c:/qingshu2.txt"));

}

/*

* 查看文件信息,封装好的写法

*/

@Test

public void listFiles() throws FileNotFoundException, IllegalArgumentException, IOException {

// listFiles列出的是文件信息,而且提供递归遍历

RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true);

while (files.hasNext()){

LocatedFileStatus file = files.next();

Path filePath = file.getPath();

String fileName = filePath.getName();

System.out.println(fileName);

}

System.out.println("----------------------");

// listStatus列出的是文件和目录的信息,但是不提供自带的递归遍历

FileStatus[] listStatus  = fs.listStatus(new Path("/"));

for(FileStatus status : listStatus ){

String name = status.getPath().getName();

System.out.println(name + (status.isDirectory()?"id dir":"is file"));

}

}

/*

* 创建目录,封装好的写法

*/

@Test

public void mkdir() throws Exception, IOException{

fs.mkdirs(new Path("/aaa/bbb/ccc"));

}

/*

* 删除文件或目录,封装好的写法

*/

@Test

public void rm() throws Exception, IOException{

fs.delete(new Path("/aa"), true);

}

}

拿到mian方法里去了,

一般是,清楚之前所有的断点,最好先这样,不管它有没有。

调出Debug工具框,window -> show view -> other –> Debug ->

为什么不一样的结果,寻找原因,说明没有安装调用javadoc

http://jingyan.baidu.com/article/6079ad0e86f69928ff86dbe6.html

http://blog.csdn.net/jxtrg20111218/article/details/8179415

This element neither has attached source nor attached Javadoc and hence no Javadoc could be found

Eclipse有直接查看java文档和类库源码的功能,不过得手工添加才行,下面对如何在Eclipse中添加java文档和类库源码进行总结。

  1. Window->Pereferences...打开参数选择对话框,展开Java节点,单击“Installed JREs",此时右边窗口会显示已经加载的jre。

2、选中要设置的jre版本,单击"Edit",弹出JRE编辑窗口

 

3、添加javadoc:将JRE system libraries下的所有包选中,单击右边的“Javadoc Location”按钮,弹出javadoc设置窗口。

选择“Javadoc URL”单选框,单击“Browse”按钮,

选中docs/api目录,然后点击“OK”

可以看出,已经本来就好的。

4、添加source: 将JRE system libraries下的所有包选中,单击右边的“Source Attachment”按钮,弹出source attachment configuration窗口。

单击“External File”按钮,选中java安装目录中的src.zip文件,然后点击“OK”

默认打开是,C:\Program Files\Java\jre7\lib

5、后面就一路OK、确定就行了。

6.在添加好了javadoc与source后,在eclipse中,使用快捷键"Shift+F2",可快速调出选中类的api文档;使用快捷建F3(或在类上点击右键,现在查看声明),可打开类的源文件。

默认是,D:\SoftWare\hadoop-2.4.1\share\hadoop\common

成功!

<terminated, exit value: 0>C:\Program Files\Java\jre7\bin\javaw.exe (2016年7月21日 下午8:55:19)

这里,是自出增加Debug窗口的。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

经过上面的处理一些问题,通常是如下步骤,进行断点调试。。。。。

补充知识,F5是跳入方法,F6是向下逐行调试,F7是跳出方法,F8是直接跳转到下一个断点。

或者,Ctrl + T

重新建立断点,

停下,然后,重新运行,到断点那,

还记得如下吗,就是我们之前手动,

这里,我们试一下,

FSDataInputStream is = fs.open(new Path("hdfs://weekend110:9000/jdk-7u65-linux-i586.tar.gz"));

与,

FSDataInputStream is = fs.open(new Path("/jdk-7u65-linux-i586.tar.gz"));

还记得如下吗,就是我们之前手动,

上传完了之后,在hdfs的虚拟路径下,有这个文件,其实,是切分成很多block,放到公共的datanode文件夹下。

134217728/1024/1024=128M,所以,分成2个Block。

所以,文件被是切分成很多block,放到公共的datanode文件夹下。也可以合并,上述,就是合并,照样,达到复原。。。

总结:对于这块的hdfs下载数据源码分析,值得反复推敲。

1、  先清除之前所有的断点,不管有还是没有

2、  打一个断点,一步一步下来

3、  把那边的断点,放进来,

4、  这部分的常用快捷键,F5,F6,F7,Ctrl + o,Ctrl + T,Ctrl + Shift + I,,,

5、  不断提升

4 weekend110的hdfs下载数据源码跟踪铺垫 + hdfs下载数据源码分析-getFileSystem(值得反复推敲和打断点源码)的更多相关文章

  1. 1 weekend110的hdfs源码跟踪之打开输入流 + hdfs源码跟踪之打开输入流总结

    3种形式的元数据,fsimage是在磁盘上,meta.data是在内存上, 我们继续,前面呢,断点是打在这一行代码处, FileSystem fs = FileSystem.get(conf); we ...

  2. hadoop2.6.0汇总:新增功能最新编译 32位、64位安装、源码包、API下载及部署文档

    相关内容: hadoop2.5.2汇总:新增功能最新编译 32位.64位安装.源码包.API.eclipse插件下载Hadoop2.5 Eclipse插件制作.连接集群视频.及hadoop-eclip ...

  3. 异构数据源海量数据交换工具-Taobao DataX 下载和使用

    DataX介绍 DataX是一个在异构的数据库/文件系统之间高速交换数据的工具,实现了在任意的数据处理系统(RDBMS/Hdfs/Local filesystem)之间的数据交换. 目前成熟的数据导入 ...

  4. 好推二维码如何通过应用宝微下载支持微信自动打开APP下载?

    好推二维码 官网 http://www.hotapp.cn 1. 为什么使用应用宝微下载? APP下载二维码,通过微信扫描下载的时候,微信目前只支持应用宝微下载,才能在微信里直接打开下载,否则就需要在 ...

  5. Android开发——通过扫描二维码,打开或者下载Android应用

    Android开发——通过扫描二维码,打开或者下载Android应用   在实现这个功能的时候,被不同的浏览器折磨的胃疼,最后实现了勉强能用,也查考了一下其他人的博客 android实现通过浏览器点击 ...

  6. 浩哥解析MyBatis源码(四)——DataSource数据源模块

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6634880.html 1.回顾 上一文中解读了MyBatis中的事务模块,其实事务操作无非 ...

  7. 浩哥解析MyBatis源码(五)——DataSource数据源模块之非池型数据源

    1 回顾 上一篇中我解说了数据源接口DataSource与数据源工厂接口DataSourceFactory,这二者是MyBatis数据源模块的基础,包括本文中的非池型非池型数据源(UnpooledDa ...

  8. 浩哥解析MyBatis源码(六)——DataSource数据源模块之池型数据源

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6675674.html 1 回顾 上一文中解读了MyBatis中非池型数据源的源码,非池型也 ...

  9. 浩哥解析MyBatis源码(七)——DataSource数据源模块之托管数据源

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6675700.html 1 回顾 之前介绍的非池型与池型数据源都是MyBatis自己定义的内 ...

随机推荐

  1. 通过telnet使用smtp协议发送邮件

    smtp协议是一个简单的邮件传输协议,利用它我们可以将邮件发送给别人,这里将通过telnet这个程序利用smtp协议从网易向gmail发送一封邮件 网上不少有说使用telnet发送邮件的文章,我也看过 ...

  2. Python开发之--前端 HTML基础

    一:HTML介绍 HTML:超文本标记语言,标准通用标记语言下的一个应用.包括"头"部分(英语:Head).和"主体"部分(英语:Body),其中"头 ...

  3. WPF界面特殊字符处理

          界面XAML不支持< .>.&."等字符. 使用字符实体编码进行替代,以下是pro WPF 4.5的摘要表 Special Character        ...

  4. C++中弱符号(弱引用)的意义及实例

    今天读别人代码时看到一个“#pragma weak”,一时没明白,上网研究了一个下午终于稍微了解了一点C.C++中的“弱符号”,下面是我的理解,不正确的地方望大家指正. 本文主要从下面三个方面讲“弱符 ...

  5. uboot start.S分析

    一.概述   1.本文综述及特色  阅读uboot,start.S是第一个源程序文件,主要完成初始化看门狗.定时器.重定位(拷贝代码段到内存中).初始化堆栈.跳转到第二阶段等工作. 网上关于这些内容的 ...

  6. linq 动态排序

    /// <summary> /// 排序 /// </summary> /// <typeparam name="T"></typepar ...

  7. 转:我们是否应该把后端构建为API

    原文来自于:http://www.infoq.com/cn/news/2015/07/api-or-not 不久前,在StackExchange网站上,一位名为SLC的用户提起他正在设计一个ASP.N ...

  8. Python 全栈开发 -- 监控篇

    如果你已经玩转了 Python 编程语言语法,肯定想用这些知识,开发一款应用程序,它可以是在网上,可以炫耀或出售,那就需要全栈式开发 Python.具体如何创建,部署和运行生产 Python Web ...

  9. 【BZOJ 1597】 [Usaco2008 Mar]土地购买 (斜率优化)

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3601  Solved: 1322 Descrip ...

  10. 李洪强iOS开发Swift篇—07_函数

    李洪强iOS开发Swift篇—07_函数 一.函数的定义 (1)函数的定义格式 1 func 函数名(形参列表) -> 返回值类型 { 2 // 函数体... 3 4 } (2)形参列表的格式 ...