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。
引用網址:http://aofengblog.blog.163.com/blog/static/6317021201101502540117/