4 weekend110的hdfs下载数据源码跟踪铺垫 + hdfs下载数据源码分析-getFileSystem(值得反复推敲和打断点源码)...
?
?
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文檔和類庫源碼進行總結。
?
?
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(值得反复推敲和打断点源码)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU 1010 Tempter of
- 下一篇: CSU1323: ZZY and his