4 weekend110的hdfs下载数据源码跟踪铺垫 + hdfs下载数据源码分析-getFileSystem(值得反复推敲和打断点源码)...
?
?
Hdfs下載數(shù)據(jù)源碼分析
?
在這里,我是接著之前的,貼下代碼
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配置文件,并解析其內(nèi)容,封裝到conf對(duì)象中
??? Configuration conf = new Configuration();
??? //也可以在代碼中對(duì)conf中的配置信息進(jìn)行手動(dòng)設(shè)置,會(huì)覆蓋配置文件中的讀取的值
??? conf.set("fs.defaultFS", "hdfs://weekend110:9000/");
??? //根據(jù)配置信息,去獲取一個(gè)具體文件系統(tǒng)的客戶(hù)端caozuo
??? fs = FileSystem.get(new URI("hdfs://weekend110:9000/"), conf, "hadoop");
}
/*
?* 上傳文件,比較底層的寫(xiě)法
?*/
?@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);
}
?/*
? * 上傳文件,封裝好的寫(xiě)法
? */
?@Test
public void upload2() throws Exception, IOException?? {
??? fs.copyFromLocalFile(new Path("c:/qingshu.txt"), new Path("hdfs://weekend110:9000/aaa/bbb/ccc/qingshu2.txt"));
?
}
?
?
/*
?* 下載文件,封裝好的寫(xiě)法
?*/
?@Test
public void download() throws Exception, IOException{
??? fs.copyToLocalFile(new Path("hdfs://weekend110:9000/aa/qingshu2.txt"), new Path("c:/qingshu2.txt"));
}
?
/*
?* 查看文件信息,封裝好的寫(xiě)法
?*/
?@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"));
??? }
???
}
?
/*
?* 創(chuàng)建目錄,封裝好的寫(xiě)法
?*/
@Test
public void mkdir() throws Exception, IOException{
??? fs.mkdirs(new Path("/aaa/bbb/ccc"));
}
?
/*
?* 刪除文件或目錄,封裝好的寫(xiě)法
?*/
@Test
public void rm() throws Exception, IOException{
??? fs.delete(new Path("/aa"), true);
}
?
?
}
?
?
拿到mian方法里去了,
?
一般是,清楚之前所有的斷點(diǎn),最好先這樣,不管它有沒(méi)有。
調(diào)出Debug工具框,window -> show view -> other –> Debug ->
?
為什么不一樣的結(jié)果,尋找原因,說(shuō)明沒(méi)有安裝調(diào)用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文檔和類(lèi)庫(kù)源碼的功能,不過(guò)得手工添加才行,下面對(duì)如何在Eclipse中添加java文檔和類(lèi)庫(kù)源碼進(jìn)行總結(jié)。
?
?
2、選中要設(shè)置的jre版本,單擊"Edit",彈出JRE編輯窗口
?
3、添加javadoc:將JRE system libraries下的所有包選中,單擊右邊的“Javadoc Location”按鈕,彈出javadoc設(shè)置窗口。
選擇“Javadoc URL”單選框,單擊“Browse”按鈕,
選中docs/api目錄,然后點(diǎn)擊“OK”
可以看出,已經(jīng)本來(lái)就好的。
?
4、添加source: 將JRE system libraries下的所有包選中,單擊右邊的“Source Attachment”按鈕,彈出source attachment configuration窗口。
單擊“External File”按鈕,選中java安裝目錄中的src.zip文件,然后點(diǎn)擊“OK”
默認(rèn)打開(kāi)是,C:\Program Files\Java\jre7\lib
5、后面就一路OK、確定就行了。
6.在添加好了javadoc與source后,在eclipse中,使用快捷鍵"Shift+F2",可快速調(diào)出選中類(lèi)的api文檔;使用快捷建F3(或在類(lèi)上點(diǎn)擊右鍵,現(xiàn)在查看聲明),可打開(kāi)類(lèi)的源文件。
默認(rèn)是,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窗口的。
?
?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
?
經(jīng)過(guò)上面的處理一些問(wèn)題,通常是如下步驟,進(jìn)行斷點(diǎn)調(diào)試。。。。。
?
?
?
補(bǔ)充知識(shí),F5是跳入方法,F6是向下逐行調(diào)試,F7是跳出方法,F8是直接跳轉(zhuǎn)到下一個(gè)斷點(diǎn)。
?
?
或者,Ctrl + T
?
重新建立斷點(diǎn),
停下,然后,重新運(yùn)行,到斷點(diǎn)那,
還記得如下嗎,就是我們之前手動(dòng),
這里,我們?cè)囈幌?#xff0c;
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"));
?
還記得如下嗎,就是我們之前手動(dòng),
上傳完了之后,在hdfs的虛擬路徑下,有這個(gè)文件,其實(shí),是切分成很多block,放到公共的datanode文件夾下。
134217728/1024/1024=128M,所以,分成2個(gè)Block。
?
所以,文件被是切分成很多block,放到公共的datanode文件夾下。也可以合并,上述,就是合并,照樣,達(dá)到復(fù)原。。。
?
總結(jié):對(duì)于這塊的hdfs下載數(shù)據(jù)源碼分析,值得反復(fù)推敲。
1、? 先清除之前所有的斷點(diǎn),不管有還是沒(méi)有
2、? 打一個(gè)斷點(diǎn),一步一步下來(lái)
3、? 把那邊的斷點(diǎn),放進(jìn)來(lái),
4、? 這部分的常用快捷鍵,F5,F6,F7,Ctrl + o,Ctrl + T,Ctrl + Shift + I,,,
5、? 不斷提升
?
轉(zhuǎn)載于:https://www.cnblogs.com/zlslch/p/5894558.html
總結(jié)
以上是生活随笔為你收集整理的4 weekend110的hdfs下载数据源码跟踪铺垫 + hdfs下载数据源码分析-getFileSystem(值得反复推敲和打断点源码)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HDU 1010 Tempter of
- 下一篇: CSU1323: ZZY and his