HDFS 即Hadoop分布式文件系統(tǒng),之所以使用 HDFS,主要是因為普通的硬盤雖然容量日益增大,但是訪問速度卻比較低。例如,對于常用的1TB的硬盤來說,平均數(shù)據(jù)傳輸率大概在150 MB/秒左右,如果存滿了數(shù)據(jù),要將全盤的數(shù)據(jù)讀取出來,要花費兩個半小時。為了提高速度,可以采取分布讀取的方式加以解決。例如,
可以將原來單個1TB硬盤的數(shù)據(jù)分散存儲100個1T的硬盤上,讓每個磁盤存儲1%的內容,之后讓這些磁盤并行運行,這樣,通過執(zhí)行并發(fā)讀取操作,只需花費兩分鐘左右的時間,就可以讀取原盤上的所有數(shù)據(jù)。
利用HDFS分布式文件系統(tǒng),就可以根據(jù)以上原理,有效提升磁盤的訪問速度,即通過DataNode節(jié)點的添加和刪除,實現(xiàn)HDFS存儲空間動態(tài)的增加和減小。HDFS實際上由群集組成,包含Master和Slave兩類角色。在Master角色上運行NameNode(名稱節(jié)點),在Slave角色上運行的是DataNode(數(shù)據(jù)存儲節(jié)點)。Slave角色承擔存儲數(shù)據(jù)的任務,Master角色僅僅作為客戶端的訪問點和群集的調度服務器使用。
在DataNode節(jié)點上,數(shù)據(jù)以分塊的形式存儲。例如,對于10個DataNode節(jié)點來說,當存儲1000GB的數(shù)據(jù)時,在每個節(jié)點上分別存儲100GB,進行并發(fā)讀取速度自然大大提高。因此,對于HDFS來說,Slave角色增多,不僅可以增大存儲容量,還可以提高讀寫效率和安全性。
在本例中,使用了五臺CentOS 6.5主機,一臺作 為Master主 機, IP為192.168.1.100,其他作為Slave主 機,IP從192.168.1.101到192.168.1.104。為了便于操作,對其進行更名操作。例如,在Master主機上執(zhí)行“vim /etc/sysconfig/network”命令,在編輯界面 中 的“HOSTNAME=” 欄設置合適的主機名,例如“hdfszhuji”。 執(zhí) 行“hostname hdfszhuji”、“bash”命令,使其重啟后可以永久地更改主機名。
執(zhí) 行“vim/etc/sysconfig/networkscripts/ifcfg-eth0” 命令,在網(wǎng)絡配置修改界面中 將“ONBOOT”的 值 設 置為“yes”, 將“BOOTPROTO”的 值 設 置 為“static”,將“IPADDR” 的 值 設 置為“192.168.0.10”, 將“NETMASK”的值設置為“255.255.255.0”。保存文件后,執(zhí)行“/etc/init.d/network restart”命令,重啟網(wǎng)卡使配置生效。
執(zhí) 行“vim /etc/hosts” 命 令,在 其 中添 加“192.168.1.100 hdfszhuji”、“192.168.1.101 hdfscong1”、“192.168.1.102 hdfscong2”、“192.168.1.103 hdfscong3”、“192.168.1.104 hdfscong4”等多行內容,將指定的地址與主機名綁定。為了便于通訊,執(zhí)行“iptables -F”命令,來禁用防火墻。按照同樣的方法,對其余的Slave主機進行配置,名稱從“hdfscong1”到“hdfscong4”。
為了便于安裝軟件,需要配置YUM源,方法是,執(zhí)行“cd /etc/yum.repos.d”、“rm -rf CentOSDebuginfo.repo CentOSVault.repo CentOS-Base.repo”、“vim CentOSMedia.repo”命令,在該文件中只保留“name=CebtOS-$releasever -Media”、“baseurl=file:///media”、“gpgcheck=0”、“enable=1”、“gpgkey=file:///etc/pki/rpm-gpg/RPM-GPGKEY-CentOS-6”等內容,之后插入CentOS 6.5光盤,執(zhí)行“mount /dev/cdrom /media/”命令,配置好YUM源。
搭建HDFS文件系統(tǒng)需要Java組件的支持,所以需要安裝JDK組件。執(zhí)行“tar zxvf jdk-7u65-linux-x64.gz”命令,對JDK包進行解壓。執(zhí)行“mv jdk1.7.0_65//usr/local/jave”, 將 其移動到指定目錄。執(zhí)行“vim /etc/profile” 命令,在該配置文件中的“export PATH”行下面添加“export JAVA_HOME=/usr/local/jave” 和“export PATH=$PATH:$JAVA_HOME/bin”兩行,之后保存該文 件。 執(zhí) 行“source /etc/profile”命 令,執(zhí) 行刷新操作。執(zhí)行“java-version”命令,查看Java配置信息。執(zhí)行“useradd hadoop”命 令,創(chuàng) 建 名 為“hadoop”的賬戶名。執(zhí)行“echo "hadpass" | passwd hadoop --stdin”命令,設置密碼,密碼為“hadpass”。
在所有主機上分別執(zhí)行以上命令,來安裝JDK組件和添加賬戶操作。為了讓名為“hdfszhuji”的主機可以直接控制其他主機,執(zhí)行“su - hadoop”命令,切換到“hadoop”賬戶環(huán)境中,執(zhí)行“ssh-keygen”命令,來生成SSH密鑰對。
在出現(xiàn)的“Enter file in which to save key(/home/hadoop/.ssh/id_rsa)”欄中直接回車,在“enter passphrase” 欄中輸入合適的密碼,例如“key123”,來生成所需的密鑰。執(zhí)行“ssh-copy-id -I.ssh/id_ras.pub hadoop@hdfscong1”命令,按照提示輸入名為“hdfscong1”主機的密碼,將密鑰復制到該機中。
分別執(zhí)行執(zhí)行“sshcopy-id -I .ssh/id_ras.pub hadoop@hdfscong2”、“ssh-copy-id -I .ssh/id_ras.pub hadoop@hdfscong3”、“ssh-copyid -I .ssh/id_ras.pub hadoop@hdfscong4” 命 令,將密鑰分別復制到其余的主機上。為了測試是否可以順利訪問,可以執(zhí)行“ssh hadoop@hdfscong1”,按照提示輸入該密鑰的密碼(即上述“key123”),如果不出現(xiàn)錯誤提示,說明上述操作沒有問題。
執(zhí)行“bash hdfszhuji”,“exit”命令,返回root環(huán)境。之后執(zhí)行“tar -zxvf hadoop-x.x.0.tar.gz” 命令,解壓Hadoop安裝包,因為Hadoop經(jīng)過了編譯處理,所以可以直接使用,這里的“hadoop-x.x.0.tar.gz” 表示具體的版本號。
注意,在安裝Hadoop時需要以root身份進行,在運行時則需要使用“hadoop”賬戶身份進行。
執(zhí)行“mv hadoop-2.4.0/usr/local/hadoop”,將 其移動到指定目錄中。執(zhí)行“cd/usr/local/hadoop”,進 入到指定目錄,執(zhí)行“chown -R hadoop:hadoop /usr/local/hadoop”命令,將該目錄的所有者設置為“hadoop”賬戶。
執(zhí) 行“v i m /e t c/profile” 命 令,在 該 配置文件中的上述位置中添 加“export HADOOP_HOME=/usr/local/hadoop”一 行, 并 將“export PATH=$PATH:$JAVA_HOME/bin”的內容修改為“export PATH=$PATH:$JAVA_HOME/b i n:$H A D O O P_H O M E/bin:$HADOOP_HOME/sbin”,之后保存該文件。執(zhí)行“source /etc/profile”命令,執(zhí)行刷新操作。在其他的主機上分別執(zhí)行以上操作,來安裝并配置Hadoop。
在名為“hdfszhuji”的主機上執(zhí)行“su -hadoop”命令,切換到Hadoop賬戶環(huán)境。執(zhí)行“cd /usr/local/hadoop/etc/hadoop”、“vim hadoop-env.sh”命令,將該文件中的“export JAVA_HOME=${JAVA_HOME}”一行的內容修改為“export JAVA_HOME=/usr/local/java”,指明JAVA的路徑。
執(zhí) 行“vim core-site.xml”命令,在該文件中的“” 之間 添 加“
執(zhí)行“mv mapred-site.xml.template mapredsite.xml”,對該模板文件進行更名處理。執(zhí)行“vim mapred-site.xml” 命 令,對該文件進行編輯,在其中的“”之間添加“
接著,執(zhí)行“vim hdfssite.xml”命令,在其中的“”之間添加“
執(zhí) 行“vim masters”命 令,輸 入“hdfszhuji”,即Master節(jié)點主機名。執(zhí)行“vim slaves” 命 令,逐 行 輸 入“hdfscong1”,“hdfscong2”,“hdfscong3”,“hdfscong4”, 即 四 個Slave主機名。之后,分別執(zhí) 行“scp /usr/local/hadoop/etc/hadoop/*hdfscong1: /usr/local/hadoop/etc/hadoop/”、“scp /usr/local/hadoop/etc/hadoop/* hdfscong2:/u s r/l o c a l/h a d o o p/etc/hadoop/”、“scp /usr/local/hadoop/etc/hadoop/* hdfscong3: /usr/local/hadoop/etc/hadoop/”、“scp /usr/l o c a l/h a d o o p/e t c/hadoop/* hdfscong4: /usr/local/hadoop/etc/hadoop/” 命 令,將 上 述Hadoop配置文件分別復制到Hdfscong1到Hdfscong4主機上。
注意,在復制是需要輸入密碼,該密碼為上述RSA密鑰對的密碼。
執(zhí) 行“hdfs namenode-format”命令,對 Master主機進行初始化操作。當初始化成功后,執(zhí)行“l(fā)l /usr/local/hadoop/name/”命令,如果顯示名稱為“current”文件,說明以上操作是正確的。
執(zhí)行“start -all.sh”命令,來啟動群集,在此期間,先要輸入hdfszhuji主機的密碼,即上述“Hadoop”賬戶的密碼“hadpass”。之后需要多次輸入上述RSA密鑰對的密碼,來分別啟動Hdfscong1到Hdfscong4等主機。之后執(zhí)行“jps”命令,當出現(xiàn)“4113 Jps”、“3718 SecondaryNameNode”、“3853 ResourceManager”、“3545 NameNode”之類的內容時,說明Hadoop已經(jīng)啟動完成。
打開Firefox瀏覽器,訪問“http://192.168.1.100:50070”網(wǎng) 址,在 控 制 頁面 的“Overview”欄 中 顯示Hadoop啟動的摘要信息,包括其啟動時間、版本等。在“Summary”欄中 的“Configured Capacity”欄中顯示HDFS磁盤總容量,在“DFS Used”欄中顯示已經(jīng)使用的容量,在“DFS Used%”欄中顯示空間利用率,在“Live Nodes”欄中顯示處于活動狀態(tài)的節(jié)點數(shù)量。至此,HDFS分布式文件系統(tǒng)已經(jīng)部署完成,之后就可以對其進行管理了。
例如,執(zhí)行“hadoop fs -ls /”命令,可以查看Hadoop根目錄下的內容。在初始狀態(tài)下,其中沒有任何內容。執(zhí)行“hadoop fs -mkdir /data”命令,在其下可以創(chuàng)建名為“data”的目錄。執(zhí)行“hadoop fs -put /usr/local/file/* /data”命令,可以將指定目錄下的所有文件復制到上述“Data”目錄中,實現(xiàn)在Hadoop中的文件存儲操作。執(zhí)行“hadoop fs -ls/data”命令,可以查看其中的內容。執(zhí)行“hdfs dfsadmin-report”命令,可以查看各節(jié)點的詳細信息。