Hadoop权威指南学习笔记三
HDFS簡單介紹
聲明:本文是本人基于Hadoop權(quán)威指南學(xué)習(xí)的一些個人理解和筆記,僅供學(xué)習(xí)參考。有什么不到之處還望指出,一起學(xué)習(xí)一起進步。
?轉(zhuǎn)載請注明:http://blog.csdn.net/my_acm
Hadoop說白了就是一個提供了處理分析大數(shù)據(jù)的文件集群,當(dāng)中最重要的無疑是HDFS(Hadoop Distributed File System)即Hadoop分布式文件系統(tǒng)。
?
1、
???????? HDFS是一種以流式數(shù)據(jù)訪問模式(一次寫入多次讀取的模式)存儲超大文件的系統(tǒng)。
其不須要的高端的硬件系統(tǒng),普通市面上的硬件就能滿足要求。
???????? 眼下不適合應(yīng)用HDFS的有:低延遲的數(shù)據(jù)訪問、大量小的文件、多用戶寫入隨意改動文件等。
2、
???????? HDFS存儲以塊為單位,通常塊大小為64M。之所以要分為這么大的塊,主要是為了降低尋址時間,由于眼下來看。傳輸數(shù)據(jù)速率越來越快,對于HDFS處理大數(shù)據(jù)時,假設(shè)頻繁的尋址必定會使得執(zhí)行時間變長。
???????? HDFS集群有兩種節(jié)點名稱節(jié)點和多個數(shù)據(jù)節(jié)點。當(dāng)中名稱節(jié)點充當(dāng)管理者,數(shù)據(jù)節(jié)點充當(dāng)工作者。
名稱節(jié)點相當(dāng)于HDFS文件樹上的枝干分叉點,而數(shù)據(jù)節(jié)點則標(biāo)注著全部塊的存儲信息。所以名稱節(jié)點的丟失就意味著HDFS的癱瘓。
因此Hadoop提供了兩種機制解決這一問題:
一種是復(fù)制組成文件系統(tǒng)元數(shù)據(jù)的持久狀態(tài)文件。即在本地磁盤寫入的同一時候也寫入一個遠程NFS掛載。
還有一種是設(shè)置一個二級名稱節(jié)點。
3、
???????? HDFS提供命令行接口的交互。
4、
???????? Hadoop是一個抽象的文件系統(tǒng)概念,HDFS是當(dāng)中的一個詳細實現(xiàn),java抽象類org.apache.hadoop.fs.FileSystem展示了Hadoop的一個文件系統(tǒng),并且有幾個詳細實現(xiàn)。
如上圖所看到的。Hadoop提供了很多文件的接口,一般是通過URL來確定使用何種文件系統(tǒng)實現(xiàn)交互。
5、
???????? Hadoop是java實現(xiàn)的所以,java接口無疑是當(dāng)中重中之重。以下是java接口的一些詳細實現(xiàn)。
(1)??????數(shù)據(jù)讀取:
?
使用URL讀取數(shù)據(jù)
Java識別Hadoop文件系統(tǒng)的URL方案,就是通過一個FsUrlStreamHandlerFactory實例來調(diào)用在URL中的setURLStreamHandlerFactory方法。
注意:這樣的方法在java虛擬機中僅僅能被調(diào)用一次。所以通常設(shè)置為static,也因此假設(shè)程序其它部件(可能不是在你控制的第三方部件)設(shè)置了一個URLStreamHandlerFactory,那么久再也不能從Hadoop讀取數(shù)據(jù)。
?
代碼:
輸入執(zhí)行:
% hadoop URLCat hdfs://localhost/user/tom/test.txt
結(jié)果:
Hello world Hello world
Hello world
Hello world Hello world
?
使用FileSystem API讀取數(shù)據(jù)
直接看代碼吧。注意看凝視
?
(2)??????數(shù)據(jù)寫入
FileSystem類有一系列創(chuàng)建文件的方法。
public FSDataOutputStream create(Pathf) throws IOException
用create創(chuàng)建文件是可用exists()推斷其父文件夾是否存在。
另一個用于傳遞回調(diào)接口的重載方法 Progressable,如此一來。我們所寫的應(yīng)用就會被告知數(shù)據(jù)寫入數(shù)據(jù)節(jié)點的進度。
package org.apache.hadoop.util;
public interface Progressable{
??????????? publicvoid progress();
}
創(chuàng)建文件的還能夠用例如以下方法:
Public FSDataOutputStream append(Pathf) throws IOException
此方法同意在打開文件的末尾追加數(shù)據(jù)。
?
(3)??????文件夾
FileSystem題目了創(chuàng)建文件夾的方法:
public Boolean mkdirs(Path f) thorwsIOException
(4)??????查詢文件系統(tǒng)
FileStatus類封裝了文件系統(tǒng)中文件和文件夾的元數(shù)據(jù)。包含文件長度、塊大小、副本、改動時間、全部者以及許可信息。
FileSystem的getFileStatus()提供了獲取一個文件或文件夾的狀態(tài)對象方法。
假設(shè)僅僅是推斷一個文件是否存在。則能夠使用前文提到的exists(Path f)方法。
?
Hadoop有時要查詢批量文件時通常要用到通配符。所以它為運行通配符提供了
Hadoop支持與Unix bash同樣的通配符兩個FileSystem方法:
public FileStatus[] globStatus (PathpathPattern) throws IOException
public FileStatus[] globStatus (Path pathPattern,PathFileter filter)throws IOException
通配符:
(5)??????刪除數(shù)據(jù)
FileSystem中的delete()方法能夠永久刪除文件夾。
public Boolean delete(Path f,Boolean recursive) throwsIOException
? ? ? ? ?
轉(zhuǎn)載于:https://www.cnblogs.com/jzssuanfa/p/6958412.html
總結(jié)
以上是生活随笔為你收集整理的Hadoop权威指南学习笔记三的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Chrome浏览器如何不让它缓存?
- 下一篇: iOS开发UI篇—UIButton简介