Hadoop叢集中新增硬碟
本文轉發自:https://www.cnblogs.com/whtydn/p/4331733.html
Hadoop工作節點擴充套件硬碟空間
接到老闆任務,Hadoop叢集中硬碟空間不夠用,要求加一臺機器到Hadoop叢集,並且每臺機器在原有基礎上加一塊2T硬碟,老闆給力啊,哈哈。
這些我把完成這項任務的步驟和我遇到的問題和解決方法總結一下,分享給大家。
1. 首先,介紹一下用到的基本命令和配置,如果本文的網友時間比較緊,可以直接跳過部分內容,直接看“2. 如何載入新硬碟”部分。
(1)命令fdisk
語法:
fdisk [-b sectorsize] device
fdisk -l [-u] [device...]
fdisk -s partition...
fdisk –v
說明:
-b <sectorsize> 指定每個分割槽的大小。也可以執行fdisk device(如:fdisk /dev/sdb)後,在系統提示時指定。
-l 列出指定的外圍裝置的分割槽表狀況。如果僅執行 fdisk -l,系統會列出已知的分割槽。
-u 搭配"-l"引數列表,會用分割槽數目取代柱面數目,來表示每個分割槽的起始地址。
-s <parttion> 將指定的分割槽的大小輸出到標準輸出上,單位為區塊。
-v 顯示fdisk的版本資訊。
(2)命令mkfs
語法:mkfs [-V][-t fstype] [fs-options] filesys
說明:
-V 顯示簡要的使用方法。
-t <fstype> 指定要建立何種檔案系統,如:ext3, ext4。
fs 指定建立檔案系統時的引數。
-v 顯示版本資訊與詳細的使用方法。
(3)命令mount
語法:
mount [-afFnrsvw] [-t vfstype] [-Llabel] [-o options] device dir
mount [-lhv]
說明:
-a 載入檔案/etc/fstab中設定的所有裝置。
-f 不實際載入裝置。可與-v等引數同時使用以檢視mount的執行過程。
-F 需與-a引數同時使用。所有在/etc/fstab中設定的裝置會被同時載入,可加快執行速度。
-t vfstype 指定載入的檔案系統型別,如:ext3,ext4。
-L label 給掛載點指定一個標籤名稱。
-l 顯示分割槽的label。
-h 顯示幫助資訊。
-v 顯示mount的版本資訊。
device 要掛載的分割槽或檔案。如果device是一個檔案,掛載時須加上-o loop引數。
dir 分割槽的掛載點。
(4)fstab配置說明
/etc/fstab 中一共有6列:
file system:指定要掛載的檔案系統的裝置名稱(如:/dev/sdb)。也可以採用UUID,UUID可以通過使用blkid命令來檢視(如:blkid /dev/sdb)指定裝置的UUID號。
mount point:掛載點。就是自己手動建立一個目錄,然後把分割槽掛載到這個目錄下。
type:用來指定檔案系統的型別。如:ext3, ext4, ntfs等。
option dump:0表示不備份;1表示要將整個<file system>中的內容備份。此處建議設定為0。
pass:用來指定fsck如何來檢查硬碟。0表示不檢查;掛載點為分割槽/(根分割槽)必須設定為1,其他的掛載點不能設定為1;如果有掛載ass設定成大於1的值,則在檢查完根分割槽後,然後按pass的值從小到大依次檢查,相同數值的同時檢查。如:/home 和 /boot 的pass 設定成2,/devdata的pass 設定成3,則系統在檢查完根分割槽,接著同時檢查/boot和/home,再檢查/devdata。
2. 如何載入新硬碟(想詳細瞭解為什麼會這樣操作,請看第三部分“詳解步驟”部分)
(1) 通過命令fdisk –lu,顯示“Disk /dev/sdb doesn't contain a valid partition table”說明sdb就是新新增的硬碟,下面主要針對它進行操作。如圖1所示。
圖1
(2) 下面對sdb進行分割槽,命令:fdisk/dev/sdb,如下圖2所示,按提示操作。
圖2
根據提示,輸入n,想新硬碟新增一個分割槽。出現Commandaction時,輸入e,指定分割槽為擴充套件分割槽(extended)。出現Partition number(1-4)時,輸入1表示只分一個區。
續指定起啟柱面(cylinder)號完成分割槽。如圖3所示。
圖3
(3) 最後輸入p,打印出新硬碟分割槽表,圖4所示。
圖4
(4) 在Command (m for help)提示符後面輸入w,儲存分割槽表。系統提示:Thepartition table has been altered! 如圖5所示。
圖5
(5) 此時,用命令fdisk –lu分割槽情況,如圖6所示
圖6
(6) 對新分割槽進行格式化:sudo mkfs -t ext4 /dev/sdb,(推薦ext4,時間比較快,具體瞭解看第三部分“詳細步驟”)如圖7所示。
圖7
(7) 掛載硬碟sudo mount -t ext4 /dev/sdb /devdata(這裡devdata是自己制定的目錄,你可以指定任意目錄,我載入的目錄是dfs.data.dir指定的目錄),到此時已經完成了所有步驟,下面就是修補。此時就可以用命令sudo df –h查看了,如圖8所示。
圖8
(8) 如果想每次手動載入,使用命令mount –a。如果想讓系統自動載入,需要配置/etc/fstab,如下圖9所示。
圖9
到此載入過程完成。
如果是Hadoop叢集,此時需要將每個工作節點dfs.data.dir目錄重新修改許可權,使用命令:chown –R dm:dm/usr/local/hadoop/data/(這是dfs.data.dir指向的目錄),然後將namenode格式化即可,這裡筆者就是忘了更改dfs.data.dir指向目錄的許可權,導致datanode啟動不起來,汗啊。
3. 詳解步驟
(1)對於2中(1)的名稱sdb,其實Linux對裝置的命名有它自己的一套規則,根據介面型別來區分儲存裝置,按儲存裝置佔用的系統介面編號為其分配識別符號。對於IDE儲存裝置(並口裝置)識別符號為hd,按裝置使用介面的不同,分別命名為had,hdb,hdc等;對於SCSI介面,SATA介面裝置(串列埠)和序列匯流排介面使用sd作為標識,仍按照使用介面編號不同,以sda,sdb等為其命名。
(2)對2中的(2)分割槽。在使用硬碟儲存資料時,還需要對硬碟進行分割槽,按分割槽的使用方法可以將硬碟分割槽分為3種:主分割槽、擴充套件分割槽和邏輯分割槽。其中主分割槽是最基本的分割槽型別,它可以直接掛載並存儲資料,一個硬碟最多隻能有4個主分割槽。Linux系統中對這4個主分割槽使用1、2、3、4作為識別符號。例如硬碟sda上的第1個主分割槽的標識為sda1,同理其他三個標識分別為sda2,sda3, sda4;擴充套件分割槽是一種特殊的主分割槽,如果要使用擴充套件分割槽儲存資料,必須先將擴充套件分區劃分為邏輯分割槽(即邏輯分割槽加你在擴充套件分割槽基礎之上),如果要在一個硬碟上建立4個以上的分割槽,就必須使用擴充套件分割槽。由於擴充套件分割槽也是一種主分割槽,因此擴充套件分割槽也佔用一個主分割槽號;在擴充套件分割槽分割槽基礎之上,可以建立多個邏輯分割槽,邏輯分割槽可以直接掛載並存儲資料。邏輯分割槽的標識數字從5開始,例如sda5,sda6。Linux系統中的硬碟分割槽使用以上識別符號命名並儲存在/dev中,要使用分割槽儲存資料時,需要將對應的塊裝置檔案掛載到一個目錄下。掛載裝置的過程可以描述成:為使用者使用該分割槽存放和讀取資料提供一個介面和途徑。這裡為什麼建立擴充套件分割槽,而不是建立主分割槽,筆者的理由是主分割槽包含啟動的一些附加資訊,而這些資訊是用來引導系統啟動的,這裡的磁碟只是為了擴充原有磁碟的容量來儲存資料,如果擴充套件分割槽直接分成邏輯分割槽,不需要這些附加資訊,從而可以更加充分地利用新硬碟的空間,這個解釋不保證正確,如果有誤,請智者指正。
(3)2中(6)提到了檔案系統ext4,可以參考 http://baike.baidu.com/view/266589.htm#7
(4)2中(8)的fstab設定可參考 http://baike.baidu.com/view/5499388.htm。