HADOOP学习笔记(一):HDFS
前言
HDFS,它是一個文件系統,用于存儲文件,通過目錄樹來定位文件;其次,它是分布式的,由很多服務器聯合起來實現其功能,集群中的服務器有各自的角色。
HDFS的設計適合一次寫入,多次讀出的場景,且不支持文件的修改。適合用來做數據分析,并不適合用來做網盤應用。
HDFS架構
NameNode
- 是整個文件系統的管理節點。?
它維護著整個文件系統的文件文件夾樹,文件/文件夾的元信息和每個文件相應的數據塊列表。
接收用戶的操作請求。
- 文件包括: (詳細查看 dfs.name.dir文件夾)?
- fsimage: 元數據鏡像文件。?
存儲某一時段NameNode內存元數據信息。
-
- edits: 操作日志文件。
- fstime: 保存近期一次checkpoint的時間
- 以上這些文件是保存在linux的文件系統中。
DataNode
- 提供真實文件數據的存儲服務。
- 文件塊(block):最主要的存儲單位。對于文件內容而言,一個文件的長度大小是size。那么從文件的0偏移開始,依照固定的大小,順序對文件進行劃分并編號,劃分好的每個塊稱一個Block。HDFS默認Block大小是128MB。以一個512MB文件,共同擁有4個Block.
- 不同于普通文件系統的是,HDFS中。假設一個文件小于一個數據塊的大小,并不占用整個數據塊存儲空間
- Replication。多副本。默認是三個。
SecondaryNameNode
- HA(High Availability 高可用性)的一個解決方式
但不支持熱備。
配置就可以。
- 運行過程:從NameNode上下載元數據信息(fsimage,edits)。然后把二者合并。生成新的fsimage。在本地保存,并將其推送到NameNode,同一時候重置NameNode的edits.
- 默認在安裝在NameNode節點上,但這樣…不安全!?
HDFS的數據流
寫數據流程
1)客戶端向namenode請求上傳文件,namenode檢查目標文件是否已存在,父目錄是否存在。
2)namenode返回是否可以上傳。
3)客戶端請求第一個 block上傳到哪幾個datanode服務器上。
4)namenode返回3個datanode節點,分別為dn1、dn2、dn3。
5)客戶端請求dn1上傳數據,dn1收到請求會繼續調用dn2,然后dn2調用dn3,將這個通信管道建立完成
6)dn1、dn2、dn3逐級應答客戶端
7)客戶端開始往dn1上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存),以packet為單位,dn1收到一個packet就會傳給dn2,dn2傳給dn3;dn1每傳一個packet會放入一個應答隊列等待應答
8)當一個block傳輸完成之后,客戶端再次請求namenode上傳第二個block的服務器。(重復執行3-7步)
讀數據流程
1)客戶端向namenode請求下載文件,namenode通過查詢元數據,找到文件塊所在的datanode地址。
2)挑選一臺datanode(就近原則,然后隨機)服務器,請求讀取數據。
3)datanode開始傳輸數據給客戶端(從磁盤里面讀取數據放入流,以packet為單位來做校驗)。
4)客戶端以packet為單位接收,先在本地緩存,然后寫入目標文件。
?命令行操作
(1)-help:輸出這個命令參數bin/hdfs dfs -help rm(2)-ls: 顯示目錄信息hadoop fs -ls /(3)-mkdir:在hdfs上創建目錄hadoop fs -mkdir -p /aaa/bbb/cc/dd(4)-moveFromLocal從本地剪切粘貼到hdfshadoop fs - moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd(5)-moveToLocal:從hdfs剪切粘貼到本地hadoop fs - moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt(6)--appendToFile :追加一個文件到已經存在的文件末尾hadoop fs -appendToFile ./hello.txt /hello.txt(7)-cat :顯示文件內容(8)-tail:顯示一個文件的末尾hadoop fs -tail /weblog/access_log.1(9)-text:以字符形式打印一個文件的內容hadoop fs -text /weblog/access_log.1(10)-chgrp 、-chmod、-chown:linux文件系統中的用法一樣,修改文件所屬權限hadoop fs -chmod 666 /hello.txthadoop fs -chown someuser:somegrp /hello.txt(11)-copyFromLocal:從本地文件系統中拷貝文件到hdfs路徑去hadoop fs -copyFromLocal ./jdk.tar.gz /aaa/(12)-copyToLocal:從hdfs拷貝到本地hadoop fs -copyToLocal /aaa/jdk.tar.gz(13)-cp :從hdfs的一個路徑拷貝到hdfs的另一個路徑hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2(14)-mv:在hdfs目錄中移動文件hadoop fs -mv /aaa/jdk.tar.gz /(15)-get:等同于copyToLocal,就是從hdfs下載文件到本地hadoop fs -get /aaa/jdk.tar.gz(16)-getmerge :合并下載多個文件,比如hdfs的目錄 /aaa/下有多個文件:log.1, log.2,log.3,...hadoop fs -getmerge /aaa/log.* ./log.sum(17)-put:等同于copyFromLocalhadoop fs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2(18)-rm:刪除文件或文件夾hadoop fs -rm -r /aaa/bbb/(19)-rmdir:刪除空目錄hadoop fs -rmdir /aaa/bbb/ccc(20)-df :統計文件系統的可用空間信息hadoop fs -df -h /(21)-du統計文件夾的大小信息hadoop fs -du -s -h /aaa/*(22)-count:統計一個指定目錄下的文件節點數量hadoop fs -count /aaa/(23)-setrep:設置hdfs中文件的副本數量hadoop fs -setrep 3 /aaa/jdk.tar.gz?HDFS API操作
詳見github:https://github.com/gloomysun/hadoop-learning/tree/master/01-hdfs
轉載于:https://www.cnblogs.com/lullaby/p/9645085.html
總結
以上是生活随笔為你收集整理的HADOOP学习笔记(一):HDFS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 监听页面url锚点变化 windo
- 下一篇: tiny4412的烧录工具minitoo