您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Hadoop分布式文件系統中的HDFS是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
超大文件 PB 級
流式數據訪問
一次寫入,多次讀取是最高效的訪問模式
商用硬件 (不需要高昂且高可用的硬件)
節點故障率較高,某些應用不適合
低時間延遲的數據訪問
要求低時間延遲的數據訪問,例如幾十毫秒范圍不適合在HDFS上運行
大量的小文件
namenode 將文件系統的元數據存儲在內容中,因此該文件系統所能存儲的文件總數受限于 namenode 的內存容量
根據經驗 每個文件、目錄和數據塊的存儲信息大約占150字節
多用戶寫入,任意 修改文件
HDFS中的文件只支持單個寫入者,而且寫操作總是以“只添加”方式在文件末尾寫數據,它不支持多個寫入者的操作,也不支持在文件的任意位置進行修改。
數據塊 默認128mb
HDFS 小于一個塊大小的文件不會占據整個塊的空間
hdfs fsck / -files -blocks
namenode 和datanode
1.備份那些組成文件系統元數據持久狀態的文件,一般的配置是,將持久狀態寫入本地磁盤的同時,寫入NFS
運行輔助namenode 一般在單獨的物理機運行。主節點掛了之后,啟用輔助節點不能保證數據完整性
namenode 管理文件系統的命名空間。它維護著文件系統樹及整棵樹內所有的文件和目錄。這些信息以兩個文件形式永久保存在本地磁盤上:命名空間鏡像文件和編輯日志文件。namenode 也記錄著每個文件中各個塊所在的數據節點信息,但它并不永久保存塊的位置信息,因為這些信息會在系統啟動時根據數據節點信息重建。
datanode 根據需要存儲并檢索數據塊,并且定期向namenode發送它們所存儲的塊的列表
namenode 容錯機制
塊緩存
默認 一個塊緩存在一個datanode的內存中
提高讀 的性能
緩存池
聯邦HDFS
聯邦HDFS 允許系統通過添加namenode 實現擴展
每個namenode 管理文件系統命名空間的一部分
兩兩之間互不通信
HDFS 的高可用
namenode 之間需要通過高可用共享存儲實現編輯日志的共享
datanode 需要同時向兩個namenode 發送數據塊處理報告,因為數據塊的映射信息存儲在namenode 內存中,而非磁盤
客戶端需要使用特定的機制來處理namenode 的失效問題,這一機制對用戶是透明的
輔助namenode的角色被備用namenode所包含
共享存儲的選擇 NFS或群體日志管理器(QJM)
故障切換與規避
撤銷namenode 訪問共享存儲目錄的權限
屏蔽網絡端口
斷電等等...
備份namenode 的方式無法實現高可用
HA 的架構支持
namenode 運行端口8020
從本地copy 文件到 hdfs /user/hadoop/ 目錄下
hadoop fs -copyFromLocal max_temperature.sh a.sh
把文件復制回本地文件系統
hadoop fs -copyToLocal a.sh my.sh
md5sum max_temperature.sh my.sh
新建目錄
hadoop fs -mkdir books
hadoop fs -ls .
默認情況下 安全措施處于停用狀態,生產環境應該啟用 dfs.premissions.enabled
對文件而言 執行權限沒有意義
HDFS 只是其中一種實現
Hadoop 文件系統 Local,HDFS,WebHDFS,Secure WebHDFS, HAR, View, FTP, S3, Azure, Swift
列出本地文件系統根目錄下的文件 hadoop fs -ls file:///
盡管運行的MapReduce 程序可以訪問任何文件系統,但在處理大數據集的時候,建議還是選擇一個有數據本地化優勢的分布式文件系統,如HDFS
接口
用戶控件文件系統, 允許將用戶空寂那實現的文件系統作為Unix 文件系統進行集成。
通過使用Fuse-DFS 模塊,HDFS均可以作為一個標準的本地文件系統進行掛載。
NFS 網關是更好的方案,應該選擇
使用hadoop 的NFSv3 網關將HDFS掛載為本地客戶端的文件系統是可行的。
可以使用Unix程序與該文件系統交互
HDFS僅能以追加模式寫文件,因此可以往文件末尾添加數據,但不能隨機修改文件
HTTP接口比原生的Java客戶端要慢,不要用它來傳出特大數據
訪問方式 直接訪問(namenode 和 datanode 內嵌的 web服務器作為 WebHDFS 的端節點運行 dfs.webhdfs.enabled 設置為true)
通過代理訪問
HttpFS代理提供和 WebHDFS 相同的HTTp接口 使用httpfs.sh 腳本
HTTP
c 語言(libhdfs,libwebhdfs)底層代碼都是java
NFS
FUSE
java接口
hadoop jar hadoopdemo-1.0-SNAPSHOT.jar URLCat hdfs:///user/hadoop/output/part-r-00000
public class FileSystemCat { public static void main(String[] args) throws Exception { String uri = args[0]; Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create(uri), conf); InputStream in = null; try { in = fs.open(new Path(uri)); IOUtils.copyBytes(in, System.out, 4096, false); } finally { IOUtils.closeStream(in); } } }
hadoop jar hadoopdemo-1.0-SNAPSHOT.jar FileSystemCat hdfs:///user/hadoop/output/part-r-00000
hadoop jar hadoopdemo-1.0-SNAPSHOT.jar FileSystemDoubleCat hdfs:///user/hadoop/output/part-r-00000
新建文件
FSDataOutputStream
目錄 public boolean mkdirs(Path f) throws IOException
查詢文件系統
FileStatus 類封裝了文件系統中文件和目錄的元數據
public boolean exists(Path f) throws IOException
寫入數據
FSDataOutputStream create(FileSystem fs,Path file, FsPermission permission) throws IOException FSDataOutputStream append(Path f) throws IOException //代碼 String localSrc = args[0]; String dst = args[1]; InputStream in = new BufferedInputStream(new FileInputStream(localSrc)); Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create(dst), conf); OutputStream out = fs.create(new Path(dst), new Progressable() { public void progress() { System.out.println("."); } }); IOUtils.copyBytes(in, out, 4096, false);
FSDataInputStream seek()是一個相對高開銷的操作,需要謹慎使用,建議用流數據來構建應用的訪問模式,而非執行大量的seek()方法 hadoop jar hadoopdemo-1.0-SNAPSHOT.jar FileSystemDoubleCat hdfs:///user/hadoop/output/part-r-00000
通過 FileSystem
通過URL讀取數據 FsUrlStreamHandlerFactory IOUtils
上述就是小編為大家分享的Hadoop分布式文件系統中的HDFS是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。