【Hadoop】HDFS開發手冊(JavaAPI)
阿新 • • 發佈:2018-11-09
文章目錄
前言
Hadoop家族有很多重要成員,下面列出來的是準備去搞的。
- hdfs
- hbase
- hive
- sqoop
- zookper
- flume
原理的東西,說簡單很簡單,說複雜很複雜。
小編不跟大神比拼,但是會寫一些遇到的坑,思考,總結。
步入正題,HDFS是什麼。HDFS是一個分散式檔案系統。
針對技術學習上的總結方法,我一般持有這幾個點:
來歷、特點、解決的問題、應用場景
維基百科解析:是一種允許檔案透過網上在多臺主機上分享的檔案系統,可讓多機器上的多使用者分享檔案和儲存空間
這篇部落格主要是寫一下Java API的操作,後續更新在伺服器上的HDFS Shell命令。
同步更新Spark。
深入到原始碼和原理,我希望另外寫文章。先把程式碼敲起來,後面就會好奇原始碼和實現的原理了。
大家可以關注程式碼和小編的總結點。
準備
- 開發環境
- 依賴引入
- 瞭解一下HDFS基本操作
既然是檔案系統,開啟你的WIN10系統,看看最常用的操作是什麼呢?
Core Code
建立資料夾
/**
* 建立資料夾.
*
* @throws IOException the io exception
* @since hui_project 1.0.0
*/
@Test
public void testMakeDir() throws IOException {
fileSystem. mkdirs(new Path("D:\\test\\test"));
}
建立新檔案
/**
* 建立檔案,引數二true代表存在即覆蓋.
*
* @throws IOException the io exception
* @since hui_project 1.0.0
*/
@Test
public void testCreateFile() throws IOException {
fileSystem.create(new Path("D:\\test\\test\\demo.txt"), true);
}
/**
* 建立新檔案 .
* 不同於create是 先執行 exists方法檢視檔案是否存在,不存在才建立
* @throws IOException the io exception
* @since hui_project 1.0.0
*/
@Test
public void testCreateNewFile() throws IOException {
fileSystem.createNewFile(new Path("D:\\test\\test\\demo.txt"));
}
讀取檔案
/**
* 讀取檔案並列印
*
* @throws IOException the io exception
* @since hui_project 1.0.0
*/
@Test
public void testReadFile() throws IOException {
FSDataInputStream fsDataInputStream = fileSystem.open(new Path("D:\\test\\test.txt"));
IOUtils.copyBytes(fsDataInputStream, System.out, configuration);
}
檔案是否存在
/**
* 檔案是否存在.
*
* @throws IOException the io exception
* @since hui_project 1.0.0
*/
@Test
public void testExist() throws IOException {
boolean exists = fileSystem.exists(new Path("D:\\test"));
System.out.println(exists);
}
下載檔案從指定目錄
/**
* 下載檔案從指定目錄.
*
* @throws IOException the io exception
* @since hui_project 1.0.0
*/
@Test
public void downLoadFile() throws IOException {
fileSystem.copyFromLocalFile(new Path("D:\\test\\distance-final.txt"), new Path("D:\\test\\test\\"));
}
上傳檔案到指定目錄
/**
* 上傳檔案到指定目錄.
*
* @throws IOException the io exception
* @since hui_project 1.0.0
*/
@Test
public void uploadFile() throws IOException {
fileSystem.copyFromLocalFile(new Path("D:\\test\\demo.txt"), new Path("D:"));
}
刪除檔案或資料夾
/**
* 刪除檔案或資料夾.
* 引數二的true代表 遞迴刪除
* @throws IOException the io exception
* @since hui_project 1.0.0
*/
@Test
public void deleteFile() throws IOException {
fileSystem.delete(new Path("D:/test/test"), true);
}
追加內容
/**
* 追加內容.
*
* @throws IOException the io exception
* @since hui_project 1.0.0
*/
@Test
public void testAppendContent() throws IOException {
configuration.set("dfs.support.append", "true");
FSDataOutputStream fsDataOutputStream = fileSystem.append(new Path("D:/test/test/demo.txt"));
fsDataOutputStream.write(new String("test something ").getBytes());
}
重新命名檔案或資料夾
/**
* 重新命名檔案或資料夾.
*
* @throws IOException the io exception
* @since hui_project 1.0.0
*/
@Test
public void testRename() throws IOException {
fileSystem.rename(new Path("D:/test/test/demo.txt"), new Path("D:/test/test/demo1.txt"));
}
列出指定資料夾的檔案以及資料夾資訊
/**
* 列出指定資料夾的檔案以及資料夾資訊.
*
* @throws IOException the io exception
* @since hui_project 1.0.0
*/
@Test
public void testListStatus() throws IOException {
FileStatus[] fileStatuses = fileSystem.listStatus(new Path("D:/test"));
for (FileStatus fileStatus : fileStatuses) {
System.out.println(fileStatus.getPath().toString());
}
}
列出指定路徑所有檔案資訊
/**
* 列出指定路徑所有檔案資訊.
* listFiles第二個引數 true 遞迴查詢 會把子資料夾的檔案資訊也查找出來
*
* @throws IOException the io exception
* @since hui_project 1.0.0
*/
@Test
public void testListFile() throws IOException {
RemoteIterator<LocatedFileStatus> fileStatusRemoteIterator = fileSystem.listFiles(new Path("D:/test"), true);
while (fileStatusRemoteIterator.hasNext()) {
LocatedFileStatus next = fileStatusRemoteIterator.next();
System.out.println(next.getPath());
}
}
Github
github更新了HDFS常用操作
常用操作在com.hui.bigdata.hadoop.hdfs.HDFSTest
https://github.com/ithuhui/hui-bigdata-hadoop
總結
針對技術學習上的總結方法,我一般持有這幾個點:
來歷、特點、解決的問題、應用場景
為什麼會出現他:常說大資料分析,分析的前提是你有資料,那那麼多資料總得找地方存吧。
資料越來越大了,存哪裡?一臺機器不夠,那就多臺。
主要理念就是:分塊,不管檔案本身多大,分塊之後都會變得更易於儲存。
應用場景不用多說了: 就是應用在資料的儲存(資料量大)。
特點:
- 儲存量大(儲存空間)
- 可執行在廉價通用的伺服器上(降低成本)
- 不適合訪問要求低延遲的系統(HDFS是為高資料吞吐量應用而設計的,必然以高延遲為代價)
- 儲存小檔案(分塊儲存,小檔案同樣佔用一塊,儘管不滿一塊)
小博主更新很累的…,由簡單入手,我進步一點,深入一點,就更新更深入的內容,
深入到原始碼和原理,我希望另外寫文章。先把程式碼敲起來,後面就會好奇原始碼和實現的原理了。
請求不多,有錯誤指出來,有問題一起討論。轉載就標註一下作者謝謝~