你是無意穿堂風(fēng) 偏偏孤倨引山洪
寫在之前
首先我們用 Xshell 連接上云服務(wù)器:
ssh bigdata@47.94.18.202
密碼看群里
連接成功:
連接成功后我們可以查看下java 和 hadoop信息:
(感謝老師幫我們配的環(huán)境)
目錄
1 在介紹HDFS之前要說的
2 為什么我們需要HDFS
3 HDFS的概念
4 HDFS關(guān)鍵運行機制
5 如何使用HDFS
1 介紹HDFS之前
背景
Hadoop和HDFS的關(guān)系
2 為什么我們需要HDFS
分布化的文件系統(tǒng)會因為分布后的結(jié)構(gòu)不完整盼樟,導(dǎo)致系統(tǒng)復(fù)雜度加大熬北,并且引入的網(wǎng)絡(luò)編程,同樣導(dǎo)致分布式文件系統(tǒng)更加復(fù)雜帮毁。
大數(shù)據(jù)不需要搬來搬去:
DFS是用流處理方式處理文件依溯,每個文件在系統(tǒng)里都能找到它的本地化映像耿眉,所以對于用戶來說菌瘪,別管文件是什么格式的蚁袭,也不用在意被分到哪里征懈,只管從DFS里取出就可以了。
一般來說撕阎,文件處理過程中無法保證文件安全順利到達(dá)受裹,傳統(tǒng)文件系統(tǒng)是使用本地校驗方式保證數(shù)據(jù)完整,這就引出了一個問題:DFS存儲文件被散后虏束,難道需要特意安排每個分片文件的校驗碼棉饶?
HDFS的回答是NO!
分片數(shù)量和大小是不確定的镇匀,海量的數(shù)據(jù)本來就需要海量的校驗過程照藻,分片后加入每個分片的跟蹤校驗完全是在數(shù)滿天恒星的同時數(shù)了他們的行星稼跳。
HDFS解決方案是:分片冗余摹菠、本地校驗
(把一個大文件打散 把文件存多份 其中一個損壞 可以用其他恢復(fù))
直觀上看涝缝,我們是給文件系統(tǒng)添堵茄蚯,文件越來越多
實際上媒区,DFS更加喜歡這樣的架構(gòu)逛尚。
數(shù)據(jù)冗余式存儲茄螃,直接將多份分片文件交給分片后的存儲服務(wù)器去校驗盯桦。
冗余后的分片文件還有個額外功能雪猪,只要冗余的分片文件中有一份是完整的栏尚,經(jīng)過多次協(xié)同調(diào)整后,其他分片文件也將完整只恨。
分布后的文件系統(tǒng)有個無法回避的問題译仗,因為文件不在一個磁盤導(dǎo)致讀取訪問操作的延時抬虽,這個是HDFS現(xiàn)在遇到的主要問題。
現(xiàn)階段纵菌,HDFS的配置是按照高數(shù)據(jù)吞吐量優(yōu)化的阐污,可能會以高時間延時為代價的;同時咱圆,我們應(yīng)該注意:按照DFS擅長的方式去使用數(shù)據(jù)(如:MapReduce)
3 HDFS的概念
通過上一節(jié)信息笛辟,我們了解了HDFS就是下面這個抽象圖的具體實現(xiàn):
元數(shù)據(jù)
元數(shù)據(jù)是用于描述要素、數(shù)據(jù)集或數(shù)據(jù)集系列的內(nèi)容闷堡、覆蓋范圍隘膘、質(zhì)量、管理方式杠览、數(shù)據(jù)的所有者弯菊、數(shù)據(jù)的提供方式等有關(guān)的信息。通俗的講踱阿,是描述數(shù)據(jù)的數(shù)據(jù)管钳。
HDFS就是將巨大的數(shù)據(jù)變成大量數(shù)據(jù)和元數(shù)據(jù)
整個海量數(shù)據(jù)分為數(shù)據(jù)塊并 標(biāo)識后 存到磁盤中
塊
磁盤存儲文件時,是按照數(shù)據(jù)塊來存儲的软舌,也就是說才漆,數(shù)據(jù)塊是磁盤的讀/寫最小單位。數(shù)據(jù)塊也稱磁盤塊佛点。
每個塊作為一個獨立的存儲單元
構(gòu)建于單個磁盤上的文件系統(tǒng)是通過塊來管理文件系統(tǒng)醇滥,文件系統(tǒng)塊的大小是扇區(qū)的整數(shù)倍。特別的超营,單個磁盤文件系統(tǒng)鸳玩,小于扇區(qū)的文件會占用整個扇區(qū)。
與其他文件系統(tǒng)不一樣演闭,HDFS中每個小于塊大小的文件不會占據(jù)整個塊的空間不跟。
來看一個很重要的問題:
為什么需要64MB或者更大的一個塊?
如果每個要傳輸?shù)膲K設(shè)置得足夠大米碰,那么從磁盤傳輸數(shù)據(jù)的時間可以明顯大于定位這個塊開始位置的時間窝革。
這樣的設(shè)定使存儲一個文件主要時間就花在傳輸過程中,傳輸一個由多個Block組成的文件的時間就取決于磁盤傳輸速率吕座,這是HSDF的核心技術(shù)虐译。
HDFS提供給MapReduce數(shù)據(jù)服務(wù),而一般來說MapReduce的Map任務(wù)通常一次處理一個塊中的數(shù)據(jù)吴趴,如果任務(wù)數(shù)太少(少于集群中節(jié)點的數(shù)量)菱蔬,就沒有發(fā)揮多節(jié)點的優(yōu)勢,甚至作業(yè)的運行速度就會和單節(jié)點一樣。
分布式的文件抽象帶來的優(yōu)勢是:
- 一個文件可以大于磁盤大小
- 一個文件不用全在一個磁盤上
- 簡化了存儲子系統(tǒng)的設(shè)計
其實拴泌,HDFS對與用戶來說,可以直接看成是一個巨大的硬盤:
所以惊橱,HDFS和文件系統(tǒng)相似蚪腐,用fsck指令可以顯示塊信息。
hadoop fsck / -files -blocks
常用命令
ls
hadoop fs -ls /user
hadoop fs -ls /user/hdfs/hk
hadoop fs -ls -R /user/hdfs/
mkdir
hadoop fs -mkdir /user/hdfs/hk/test
copyFromLocal/put
hadoop fs -put test /user/hdfs/hk
hadoop fs -copyFromLocal test2 /user/hdfs/hk
cat
hadoop fs -cat /user/hdfs/hk/xingbie
tail
copyToLocal/get
hadoop fs -get /user/hdfs/hk/test
hadoop fs -copyToLocal /user/hdfs/hk/test
cp
mv
du
使用方法:hadoop fs -du URI [URI …]
顯示目錄中所有文件的大小税朴,或者當(dāng)只指定一個文件時回季,顯示此文件的大小
dus
使用方法:hadoop fs -dus <args>
顯示文件的大小
stat
使用方法:hadoop fs -stat URI [URI …]
返回指定路徑的統(tǒng)計信息。
示例:
hadoop fs -stat path
test
使用方法:hadoop fs -test -[ezd] URI
選項:
-e 檢查文件是否存在正林。如果存在則返回0泡一。
-z 檢查文件是否是0字節(jié)。如果是則返回0觅廓。
-d 如果路徑是個目錄鼻忠,則返回1,否則返回0杈绸。
示例:
hadoop fs -test -e filename
touchz
使用方法:hadoop fs -touchz URI [URI …]
創(chuàng)建一個0字節(jié)的空文件帖蔓。
其他 Hadoop Shell 命令參見:
http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html
做個小練習(xí):
在自己本機上按自己名字創(chuàng)建一個文件夾
在文件夾里創(chuàng)建一個xingzuo的文件,存儲你的星座
將xingzuo文件put到遠(yuǎn)端/user/hdfs/{yourname}
關(guān)鍵代碼:
hadoop fs -put xingzuo /user/hdfs/hhkk/
hadoop fs -ls /user/hdfs/hhkk/
hadoop fs -cat /user/hdfs/hhkk/xingzuo
下午
hadoop fs -cat /user/hdfs/*/xingzuo
統(tǒng)計hadoop fs -cat /user/hdfs/*/xingzuo 輸出有多少行:
hadoop fs -cat /user/hdfs/*/xingzuo | wc -l
排序:
hadoop fs -cat /user/hdfs/*/xingzuo | sort
排序+統(tǒng)計相同的個數(shù):
hadoop fs -cat /user/hdfs/*/xingzuo | sort | uniq -c
加上數(shù)字標(biāo)識統(tǒng)計后 反排序:
hadoop fs -cat /user/hdfs/*/xingzuo | sort | uniq -c | sort -r
同樣練習(xí)下xingbie:
hadoop fs -cat /user/hdfs/*/xingbie | sort | uniq -c | sort
hadoop fs -cat /user/hdfs/*/xingbie | sort | uniq -c | sort -rn
hadoop fs -cat /user/hdfs/*/xingbie | awk '{print $1}'
統(tǒng)計男生的比例:
hadoop fs -cat /user/hdfs/*/xingbie|awk '{if($1=="nan") ++sum_nan; ++sum}END {print "nv: " sum_nan/sum}'
4 HDFS關(guān)鍵運行機制
HDFS是基于主從結(jié)構(gòu)(master/slaver)構(gòu)件
在HDFS的主從結(jié)構(gòu)中瞳脓,有兩類節(jié)點 namenode和datanode塑娇。他們以管理者-工作者模式工作。
客戶端(client)代表用戶通過與namenode和datanode交互訪問整個文件系統(tǒng)劫侧÷癯辏可以是具體程序,也可以是應(yīng)用烧栋。
客戶端提供一個類似LINUX的文件系統(tǒng)接口
類似操作系統(tǒng)中的文件界面
所以写妥,用戶在編程時,無需知道namenode和datanode也可以實現(xiàn)功能
namenode很重要:
一般有解決方案二
HDFS結(jié)構(gòu)示意圖:
單點問題:
HA即為High Availability劲弦,用于解決NameNode單點故障問題耳标,該特性通過熱備的方式為主NameNode提供一個備用者,一旦主NameNode出現(xiàn)故障邑跪,可以迅速切換至備NameNode次坡,從而實現(xiàn)不間斷對外提供服務(wù)。Federation即為“聯(lián)邦”画畅,該特性允許一個HDFS集群中存在多個NameNode同時對外提供服務(wù)砸琅,這些NameNode分管一部分目錄(水平切分),彼此之間相互隔離轴踱,但共享底層的DataNode存儲資源症脂。
在一個典型的HDFSHA場景中,通常由兩個NameNode組成,一個處于active狀態(tài)诱篷,另一個處于standby狀態(tài)壶唤。Active NameNode對外提供服務(wù),比如處理來自客戶端的RPC請求棕所,而Standby NameNode則不對外提供服務(wù)闸盔,僅同步active namenode的狀態(tài),以便能夠在它失敗時快速進(jìn)行切換琳省。
為了能夠?qū)崟r同步Active和Standby兩個NameNode的元數(shù)據(jù)信息(實際上editlog)迎吵,需提供一個共享存儲系統(tǒng),可以是NFS针贬、QJM(Quorum Journal Manager)或者Bookeeper击费,Active Namenode將數(shù)據(jù)寫入共享存儲系統(tǒng),而Standby監(jiān)聽該系統(tǒng)桦他,一旦發(fā)現(xiàn)有新數(shù)據(jù)寫入蔫巩,則讀取這些數(shù)據(jù),并加載到自己內(nèi)存中瞬铸,以保證自己內(nèi)存狀態(tài)與Active NameNode保持基本一致批幌,如此這般,在緊急情況下standby便可快速切為active namenode嗓节。
5 如何使用HDFS
HDFS是在安裝hadoop-X.X.X.tar.gz配置后荧缘,啟動即可使用。
無論是使用shell腳本拦宣,或者使用WEB UI進(jìn)行操作截粗,使用前必須得明白HDFS的配置。便于存儲操作或者操作優(yōu)化鸵隧。
世界上所有的追求都是因為熱愛
一枚愛編碼 愛生活 愛分享的IT信徒
— hongXkeX