參考https://www.cnblogs.com/sdksdk0/p/5585047.htmlhtml
【HDFS原理】node
Hadoop分佈式文件系統(HDFS)被設計成適合運行在通用硬件(commodity hardware)上的分佈式文件系統。HDFS體系結構中有兩類節點,一類是NameNode,又叫"元數據節點";另外一類是DataNode,又叫"數據節點"。這兩類節點分別承擔Master和Worker具體任務的執行節點。總的設計思想:分而治之——將大文件、大批量文件,分佈式存放在大量獨立的服務器上,以便於採起分而治之的方式對海量數據進行運算分析。linux
HDFS是一個主/從(Mater/Slave)體系結構,從最終用戶的角度來看,它就像傳統的文件系統同樣,能夠經過目錄路徑對文件執行CRUD(Create、Read、Update和Delete)操做。但因爲分佈式存儲的性質,HDFS集羣擁有一個NameNode和一些DataNode。NameNode管理文件系統的元數據,DataNode存儲實際的數據。客戶端經過同NameNode和DataNodes的交互訪問文件系統。客戶端聯繫NameNode以獲取文件的元數據,而真正的文件I/O操做是直接和DataNode進行交互的。
HDFS通常是用來「一次寫入,屢次讀取」,不適合作實時交互性很強的事情,不適合存儲大量小文件(固然,若是你偏要存大量小文件的話本文末尾會有解決方案).服務器
1 分佈式文件系統,它所管理的文件是被切塊存儲在若干臺datanode服務器上.
2 hdfs提供了一個統一的目錄樹來定位hdfs中的文件,客戶端訪問文件時只要指定目錄樹的路徑便可,不用關心文件的具體物理位置.
3 每個文件的每個切塊,在hdfs集羣中均可以保存多個備份(默認3份),在hdfs-site.xml中,dfs.replication的value的數量就是備份的數量.
4 hdfs中有一個關鍵進程服務進程:namenode,它維護了一個hdfs的目錄樹及hdfs目錄結構與文件真實存儲位置的映射關係(元數據).而datanode服務進程專門負責接收和管理"文件塊"-block.默認大小爲128M(可配置),(dfs.blocksize).(老版本的hadoop的默認block是64M的)app
【HDFS Shell經常使用操做】分佈式
--appendToFile ----追加一個文件到已經存在的文件末尾oop
-->hadoop fs -appendToFile ./hello.txt hdfs://hadoop-server01:9000/hello.txt設計
能夠簡寫爲:Hadoop fs -appendToFile ./hello.txt /hello.txtserver
-cat ---顯示文件內容 xml
-->hadoop fs -cat /hello.txt
-chgrp
-chmod
-chown
上面三個跟linux中的用法同樣
-->hadoop fs -chmod 666 /hello.txt
-copyFromLocal #從本地文件系統中拷貝文件到hdfs路徑去
-->hadoop fs -copyFromLocal ./jdk.tar.gz /aaa/
-copyToLocal #從hdfs拷貝到本地
Eg: hadoop fs -copyToLocal /aaa/jdk.tar.gz
-count #統計一個指定目錄下的文件節點數量
-->hadoop fs -count /aaa/
-cp #從hdfs的一個路徑拷貝hdfs的另外一個路徑
hadoop fs -cp/aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
-createSnapshot
-deleteSnapshot
-renameSnapshot
以上三個用來操做hdfs文件系統目錄信息快照
-->hadoop fs -createSnapshot /
-df #統計文件系統的可用空間信息
-du
-->hadoop fs -df -h /
-->hadoop fs -du -s -h /aaa/*
-get #等同於copyToLocal,就是從hdfs下載文件到本地
-getmerge #合併下載多個文件
--> 好比hdfs的目錄 /aaa/下有多個文件:log.1, log.2,log.3,...
hadoop fs -getmerge /aaa/log.* ./log.sum
-help #輸出這個命令參數手冊
-ls #顯示目錄信息
-->hadoop fs -ls hdfs://hadoop-server01:9000/
這些參數中,全部的hdfs路徑均可以簡寫
-->hadoop fs -ls / 等同於上一條命令的效果
-mkdir #在hdfs上建立目錄
-->hadoop fs -mkdir -p /aaa/bbb/cc/dd
-moveFromLocal #從本地剪切粘貼到hdfs
-moveToLocal #從hdfs剪切粘貼到本地
-mv #在hdfs目錄中移動文件
-put #等同於copyFromLocal
-rm #刪除文件或文件夾
--> hadoop fs -rm -r/aaa/bbb/
-rmdir #刪除空目錄
-setrep #設置hdfs中文件的副本數量
-->hadoop fs -setrep 3 /aaa/jdk.tar.gz
-stat #顯示一個文件或文件夾的元信息
-tail #顯示一個文件的末尾
-text #以字符形式打印一個文件的內容
【HDFS寫入比讀取複雜】