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、  不断提升

转载于:https://www.cnblogs.com/zlslch/p/5894558.html

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

  1. 云计算学习笔记004---hadoop的简介,以及安装,用命令实现对hdfs系统进行文件的上传下载

    1.Hadoop简介 1.hadoop的诞生 l  Nutch和Lucene之父Doug Cutting在2006年完成Hadoop项目. l  Hadoop并不是一个单词,它来源于DougCutti ...

  2. 【滤波跟踪】基于matlab捷联惯导仿真【含Matlab源码 1935期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[滤波跟踪]基于matlab捷联惯导仿真[含Matlab源码 1935期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  3. 【Hadoop】HDFS操作、数据上传与下载原理解析、高级特性及底层原理

    HDFS操作.数据上传与下载原理解析.高级特性及底层原理 1 HDFS操作 1.1 Web Console网页工具 1.2 命令行 1.2.1 普通的操作命令 1.2.2 管理员命令 1.3 Java ...

  4. 安装、进程-云计算学习笔记---hadoop的简介,以及安装,用命令实现对hdfs系统进行文件的上传下载-by小雨...

    本文是一篇关于安装.进程-的帖子 1.Hadoop简介 1.hadoop的生诞 l  Nutch和Lucene之父Doug Cutting在2006年成完Hadoop目项. l  Hadoop并非一个 ...

  5. linux应用程序逆向,Linux下查看并下载命令源码包(根据命令/应用程序逆向获取并且安装其所属源码包)...

    使用linux的过程中,我们会熟悉各种命令,偶尔我们不禁会问,这些命令是怎么实现的,学习他们其实是学习linux高级系统编程很快捷的方法. 这些命令的源码肯定是存放在相应的包里面,但是是哪些包呢? 发 ...

  6. java 官网下载jdk源码_openJDK之如何下载各个版本的openJDK源码

    如果我们需要阅读openJDK的源码,那么需要下载,那么该去哪下载呢? 现在JDK已经发展到版本10了,11已经处于计划中,如果需要特定版本的openJDK,它们的下载链接在哪呢? 1.openJDK ...

  7. php博客手机版模板下载器,【织梦模板下载】高端响应式游艇租赁类网站模板(自适应手机端) PHP源码带数据...

    模板名称: 响应式游艇租赁类网站织梦模板(自适应手机端)+PC+wap+利于SEO优化 模板介绍: 织梦最新内核开发的模板,该模板属于电缆.电线类企业都可使用, 这款模板使用范围极广,不仅仅局限于一类 ...

  8. spring session spring:session:sessions:expires 源码跟踪

    2019独角兽企业重金招聘Python工程师标准>>> spring session spring:session:sessions:expires 源码跟踪 博客分类: sprin ...

  9. jdk下没有java源码_openJDK之如何下载各个版本的openJDK源码

    如果我们需要阅读openJDK的源码,那么需要下载,那么该去哪下载呢? 现在JDK已经发展到版本10了,11已经处于计划中,如果需要特定版本的openJDK,它们的下载链接在哪呢? 1.openJDK ...

最新文章

  1. 使用K.function()调试keras
  2. 软件工程-第三次作业
  3. soundtouch源码分析__based on csdn :
  4. python编程自学能学会吗-Python能自学成功吗?
  5. Tips——RN webview如何实现首次加载自动登录及后续定时登录
  6. WorldWind源码剖析系列:外包围盒类BoundingBox和外包围球类BoundingSphere
  7. NYOJ 135 取石子(二)
  8. 封神-性能容量分析报告
  9. 如何找到Fiori Launchpad tile所属的catalog id
  10. 【转载】安卓开发者在使用deepin15.4时可能会遇到的问题
  11. 什么叫缺位_一位父亲能够给予孩子的最好礼物是什么?看看这部电影给出的答案...
  12. Android:Activity统一堆栈管理(实现随时finish特定或是所有Activty)
  13. vue中dom元素和组件的获取
  14. 从0开始学习 GitHub 系列之「GitHub 常见的几种操作」
  15. c语言第三章知识点讲解,C语言考试最新知识点总结讲解.doc
  16. weblogic增大线程数
  17. 营收、净利双收,贝壳找房稳了?
  18. centos彻底删除文件夹、文件命令
  19. Verilog实现快递柜
  20. 程序员必备神器:一款开源的不良坐姿监测应用 「PoseMon 让爷康康」

热门文章

  1. pandas concat_pandas合并几百个csv只需要一分钟?(含代码,拿去即可用)
  2. spring mvc字符编码过滤器 CharacterEncodingFilter ,添加例外url
  3. Intel MKL FATAL ERROR Cannot load mkl_intel_thread.dll
  4. c语言case的应用,switch、case的使用
  5. linux 64 内存管理,[内存管理]linux X86_64处理器的内存布局图
  6. 为什么jsp写script代码报错_JSP 报错:ReferenceError: $ is not defined
  7. location定位_旅游英语必备单词:location
  8. app 隔几秒记录当前经纬度位置_uni-app获取位置经纬度并定位到当前位置
  9. fft 相位谱_FFT和示波器实用指南——深圳零式未来仪器科技
  10. 深度学习——你应该掌握的数学知识