Hadoop-HDFS分佈式環境

HDFS簡單介紹 node

HDFS的英文全稱是Hadoop Distributed File System,顧名思義,就是Hadoop分佈式文件系統,是根據GoogleGFS的論文,由Doug Cutting使用Java開發的開源項目。HDFS自己是Hadoop項目的一部分,爲Hadoop提供了底層的數據存儲,以供上層的各類實際應用使用(如Map/Reduce)。HDFS是典型的Master/Slave集羣架構,由一個NameNode和多個DataNode組成,NameNode只能是一個,扮演着Master的角色,負責對具體存儲塊的元數據進行保存,如某個存儲塊具體保存在哪一個DataNode上;DataNode能夠爲多個,扮演着Slave的角色,負責對具體的存儲塊進行保存,一個相同的存儲塊根據配置能夠保存到多個DataNode上,以保持數據的高可用性。客戶端與HDFS交互時,典型的,會先詢問NameNode具體的存儲塊在哪一個DataNode上,而後客戶端會直接聯繫相應的DataNode,來獲取或寫入數據。各個DataNode會定時發送心跳至NameNode,以便NameNode瞭解DataNode的可用狀態及存儲狀態,這樣能夠保證某一個DataNode掛掉,NameNode能夠作相應處理,以保證數據的高可用性。 linux

HDFS的目標就是使用大量的廉價PC機,來維護海量的大數據塊,而且保證數據的高可用性,而且HDFS集羣會隨着更多PC機的加入,而提升數據的存儲量(固然這與具體環境的硬盤相關)與吞吐量(固然這與具體環境的網卡帶寬相關),單個Hadoop集羣通常最大可達2000個節點。 apache

在可預見的將來,大數據(BigData)必然會常態化,當前業內的IT巨頭均在對HDFS進行研究,如GoogleYahoo,阿里等,不過,開源世界好就好在,「科技巨頭」搞的玩意,咱們草根也能夠嘗試一下,呵呵,下面就具體介紹一下HDFS的分佈式環境搭建。 安全

 

具體搭建環境描述 bash

由三臺機器組成,1NameNode2DataNode 架構

NameNode:172.16.4.14 併發

DataNode:172.16.4.20 app

DataNode:172.16.3.35 ssh

 

具體搭建過程描述 分佈式

三臺機器的全部配置保持一致就能夠了,下面是以NameNode機器上的配置過程進行描述:

1、安裝Java1.6(略);

2、以root登陸,爲HDFS新建一個賬號(不是必須的,但這樣比較符合linux下的安全規範,呵呵)

[root@test-2 ~]# useradd hdfs

[root@test-2 ~]# passwd hdfs

Changing password for user test.

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

 

3、下載Hadoop軟件包,官方下載地址:http://www.apache.org/dyn/closer.cgi/hadoop/core/

使用hdfs用戶上傳至/home/hdfs目錄,並解壓至 /home/hdfs/hadoop

[hdfs@test-2 ~]# tar -zxvf hadoop-0.21.0.tar.gz

 

4、增長HADOOP_HOME環境變量

.bash_profile中,增長

export HADOOP_HOME /home/hdfs/hadoop

使修改生效

[hdfs@test-2 ~]$ . .bash_profile

 

5、修改JAVA_HOME環境變量

編輯/home/hdfs/hadoop/conf/hadoop-env.sh

JAVA_HOME的值修改成真實有效的地址,若是不知道,請執行echo $JAVA_HOME 查看;

 

6、配置ssh環境

HDFS的各類操做,是經過ssh登陸後進行,默認狀況下,須要屢次輸入密碼,比較麻煩(你能夠執行ssh localhost試一試,看看是否須要輸入密碼),咱們要對ssh進行配置;

執行下面命令:

[hdfs@test-2 ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

[hdfs@test-2 ~]# cat /home/hdfs/.ssh/id_dsa.pub > /home/hdfs/.ssh/authorized_keys

[hdfs@test-2 ~]# chmod 600 /home/hadoop/.ssh/authorized_keys //這句必需要執行

 

而後你能夠經過scp命令,將authorized_keys拷貝至全部的DataNode機器上,並在DataNode機器上對authorized_keys文件賦予600的權限

[hdfs@test-2 ~]# scp -r /home/hdfs/.ssh hdfs@172.16.4.20:/home/hdfs

完成以上操做後,能夠嘗試命令ssh localhost,以及ssh 172.16.4.20,看看如今使用ssh是否須要密碼了,若是不須要,那恭喜你,成功了

 

7、對/home/hdfs/hadoop/conf/下的幾個關鍵配置文件進行配置

core-site.xml配置

 

    

         fs.default.name

         hdfs://172.16.4.14:9000

    

 

 

hdfs-site.xml配置

 

    

         dfs.name.dir

         /home/hdfs/hadoop/data/dfs.name.dir

    

    

         dfs.data.dir

         /home/hdfs/hadoop/data/dfs.data.dir

    

    

         dfs.permissions

         false

    

    

         dfs.replication

         2

    

 

 

masters配置

172.16.4.14

 

slaves配置

172.16.3.35

172.16.4.20

 

並將全部改動的配置文件,同步至每一個DataNode機器的相同文件夾下(仍然可以使用scp命令)

 

8、對NameNode進行格式化(該操做只需對NameNode操做)

執行

[hdfs@test-2 bin]$ /home/hdfs/hadoop/bin/hadoop namenode -format

 

9、啓動!

ok,至此最基本的配置已經完成,是否是還挺簡單的?呵呵

讓咱們來啓動HDFS吧,只須要對master機器進行操做哦(還記得前面說的,會經過ssh連上slave機器,對DataNode進行操做吧?);

執行

[hdfs@test-2 bin]$ /home/hdfs/hadoop/bin/start-dfs.sh

 

若是啓動遇到問題,請對NameNodeDataNode的日誌進行查看,路徑爲/home/hdfs/hadoop/logs,看看是否有Exception拋出。

 

10、簡單對HDFS進行試用

HDFS交互的腳本均在/home/hdfs/hadoop/bin下,咱們這裏主要以./hadoop腳本爲例

建立一個名爲newdir的新目錄

[hdfs@test-2 bin]$ ./hadoop fs -mkdir newdir

查看HDFS文件系統/user/hdfs目錄下的文件列表

[hdfs@test-2 bin]$ ./hadoop fs -ls /user/hdfs

在個人機器上,輸出:

11/10/01 23:55:10 INFO security.Groups: Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000

11/10/01 23:55:10 WARN conf.Configuration: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id

Found 4 items

drwxr-xr-x   - hdfs      supergroup          0 2011-09-26 17:30 /user/hdfs/apk

drwxr-xr-x   - hdfs      supergroup          0 2011-09-22 11:35 /user/hdfs/mydir

drwxr-xr-x   - Doug.Wang supergroup          0 2011-09-22 11:35 /user/hdfs/mydir_1

drwxr-xr-x   - hdfs      supergroup          0 2011-10-01 23:52 /user/hdfs/newdir

 

能夠看到,我以前創建的文件夾apk,mydir,mydir_1newdir,其餘的操做指令可經過./hadoop fs來進行查看

 

寫在最後的

在搭建了HDFS的最簡分佈式環境後,對HDFS集羣進行了簡單的併發訪問測試。首先將13M左右的文件存儲至HDFS,而後客戶端同時進行1000個併發讀的操做,基本上,性能瓶頸就在HDFS節點的網卡上了。

下面這種場景,應該是不適合使用HDFS的:

在同一個IDC內部,部署一個HDFS集羣,而且內部均存儲着較大的文件(1M-100M),在同一個IDC內部,有多臺機器做爲客戶端會訪問HDFS集羣,經過內部千兆以太網去讀取文件。試想,若是客戶端請求較多時,IDC內部的以太網通道立刻就堵塞了,可能會引發「數據風暴」。

所以,在實踐中,咱們對HDFS的使用,大概應當是這樣的:不要將HDFS做爲一個單純的存儲系統來使用,而應當結合HDFS上層的Map/Reduce架構,使HDFS中的大塊數據並不會頻繁地進行傳輸移動。數據在哪,咱們就在哪進行計算。這也是符合Hadoop的設計目標與基本假設的:「移動計算比移動數據更加經濟」。

相關文章
相關標籤/搜索