HDFS詳解一

block

bolck塊一般默認爲128M,運行一個文件會把這個文件分成一個一個的塊來運行
比如160M大小的文件會分成倆個塊,第一個是佔滿的,而剩下的就給第二個塊,也就是第一個塊128M,第二個快32M

那這時我們想一個問題,文件小而且多會造成什麼問題?
比如我們有1億個小文件,每個文件250個字節,假設我們的namenode是4個g,這時就會把它擠爆,所以我們必須要把小文件給合併成一個差不多的文件才行,不過生產上面一般不會
那瞭解了小文件的危害我們要說一下怎麼解決?
解決的辦法:
1.在hdfs之前合併
2.在spark service服務合併
3.通過調度,比如每天調度合併15天

小文件講完了接下來當然還有大文件
大文件的問題就是如果分成128M的塊,那內存的佔用很高,所以解決辦法很簡單,就是可以把我們的塊調大,一般調到256M即可

HDFS的架構

hdfs是主從架構關係
namenode(大哥)負責名稱的命名空間
1.文件名稱
2.塊的副本數
3.目錄結構
4.塊對應運行在datanode節點
5.對datanode進行動態維護

datanode(小弟)負責幹活
1.datanode會3秒給namenode發送一次心跳包,證明自己還活着
2.每隔6小時會發送一次快報告blockreport

sercondarynamenode(二哥)
負責給namenode檢查editlogs進行合併再發送回去

檢查日誌的路徑是[hadoop@hadoop002 dfs]$ cd /tmp/hadoop-hadoop/dfs
然後我們會看到

[hadoop@hadoop002 dfs]$ ll
total 12
drwx------. 3 hadoop hadoop 4096 Jan  4 19:47 data
drwxrwxr-x. 3 hadoop hadoop 4096 Jan  4 19:47 name
drwxrwxr-x. 3 hadoop hadoop 4096 Jan  4 19:48 namesecondary

[hadoop@hadoop002 dfs]$ cd name/current/

cd進去後我們會看見

[hadoop@hadoop002 current]$ ll
total 11352
-rw-rw-r--. 1 hadoop hadoop      42 Jan  4 12:13 edits_0000000000000000001-0000000000000000002
-rw-rw-r--. 1 hadoop hadoop 1048576 Jan  4 12:13 edits_0000000000000000003-0000000000000000003
-rw-rw-r--. 1 hadoop hadoop      42 Jan  4 12:31 edits_0000000000000000004-0000000000000000005
-rw-rw-r--. 1 hadoop hadoop 1048576 Jan  4 12:59 edits_0000000000000000006-0000000000000000196
-rw-rw-r--. 1 hadoop hadoop 1048576 Jan  4 13:02 edits_0000000000000000197-0000000000000000197
-rw-rw-r--. 1 hadoop hadoop 1048576 Jan  4 13:03 edits_0000000000000000198-0000000000000000198
-rw-rw-r--. 1 hadoop hadoop      42 Jan  4 13:46 edits_0000000000000000199-0000000000000000200
-rw-rw-r--. 1 hadoop hadoop 1048576 Jan  4 13:46 edits_0000000000000000201-0000000000000000201
-rw-rw-r--. 1 hadoop hadoop 1048576 Jan  4 13:58 edits_0000000000000000202-0000000000000000202
-rw-rw-r--. 1 hadoop hadoop      42 Jan  4 18:11 edits_0000000000000000203-0000000000000000204
-rw-rw-r--. 1 hadoop hadoop      42 Jan  4 19:11 edits_0000000000000000205-0000000000000000206
-rw-rw-r--. 1 hadoop hadoop 1048576 Jan  4 19:11 edits_0000000000000000207-0000000000000000207
-rw-rw-r--. 1 hadoop hadoop      42 Jan  4 19:24 edits_0000000000000000208-0000000000000000209
-rw-rw-r--. 1 hadoop hadoop 1048576 Jan  4 19:24 edits_0000000000000000210-0000000000000000210
-rw-rw-r--. 1 hadoop hadoop      42 Jan  4 19:32 edits_0000000000000000211-0000000000000000212
-rw-rw-r--. 1 hadoop hadoop 1048576 Jan  4 19:32 edits_0000000000000000213-0000000000000000213
-rw-rw-r--. 1 hadoop hadoop      42 Jan  4 19:37 edits_0000000000000000214-0000000000000000215
-rw-rw-r--. 1 hadoop hadoop 1048576 Jan  4 19:37 edits_0000000000000000216-0000000000000000216
-rw-rw-r--. 1 hadoop hadoop      42 Jan  4 19:49 edits_0000000000000000217-0000000000000000218
-rw-rw-r--. 1 hadoop hadoop   13515 Jan  4 20:49 edits_0000000000000000219-0000000000000000329
-rw-rw-r--. 1 hadoop hadoop      42 Jan  4 21:49 edits_0000000000000000330-0000000000000000331
-rw-rw-r--. 1 hadoop hadoop 1048576 Jan  4 21:49 edits_inprogress_0000000000000000332
-rw-rw-r--. 1 hadoop hadoop    4102 Jan  4 20:49 fsimage_0000000000000000329
-rw-rw-r--. 1 hadoop hadoop      62 Jan  4 20:49 fsimage_0000000000000000329.md5
-rw-rw-r--. 1 hadoop hadoop    4102 Jan  4 21:49 fsimage_0000000000000000331
-rw-rw-r--. 1 hadoop hadoop      62 Jan  4 21:49 fsimage_0000000000000000331.md5
-rw-rw-r--. 1 hadoop hadoop       4 Jan  4 21:49 seen_txid
-rw-rw-r--. 1 hadoop hadoop     207 Jan  4 17:12 VERSION

其中-rw-rw-r--. 1 hadoop hadoop 1048576 Jan 4 21:49 edits_inprogress_0000000000000000332表示正在寫,而這個正在寫就是分割線標識符,表示0000000000000000332之前的都已經寫好了

塊的副本

首先爲什麼要有副本?
答:副本是爲了避免機器出現崩潰等問題導致數據丟失,默認我們是生成三個副本
那我們副本需要怎麼放置?
答:第一個副本一般放在自己datanode的機器中,第二和三個副本放在同一個機架不同機器上
因爲副本也是會佔用實際內存的,就相當於我們windows那樣複製了一份,所以對於有時數據量實在是太多,可以把副本數減小爲2個,這樣可以讓出我們的內存空間

發佈了13 篇原創文章 · 獲贊 10 · 訪問量 893
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章