hadoop集羣搭建

一、目的

本文描述瞭如何安裝、配置和管理有實際意義的Hadoop集羣,其規模可從幾個節點的小集羣到幾千個節點的超大集羣。

如果你希望在單機上安裝Hadoop玩玩,從這裏能找到相關細節。

二、先決條件

  1. 確保在你集羣中的每個節點上都安裝了所有必需軟件。

  2. 獲取Hadoop軟件包。

三、安裝

安裝Hadoop集羣通常要將安裝軟件解壓到集羣內的所有機器上。

通常,集羣裏的一臺機器被指定爲 NameNode,另一臺不同的機器被指定爲JobTracker。這些機器是masters。餘下的機器即作爲DataNode作爲TaskTracker。這些機器是slaves

我們用HADOOP_HOME指代安裝的根路徑。通常,集羣裏的所有機器的HADOOP_HOME路徑相同。

 

四、配置

接下來描述瞭如何配置Hadoop集羣。

1、配置文件

對Hadoop的配置通過conf/目錄下的兩個重要配置文件完成:

  1. hadoop-default.xml - 只讀的默認配置。

  2. hadoop-site.xml - 集羣特有的配置。

要了解更多關於這些配置文件如何影響Hadoop框架的細節,請看這裏。

此外,通過設置conf/hadoop-env.sh中的變量爲集羣特有的值,你可以對bin/目錄下的Hadoop腳本進行控制。    

2、集羣配置

要配置Hadoop集羣,你需要設置Hadoop守護進程的運行環境和Hadoop守護進程的運行參數

Hadoop守護進程指NameNode/DataNode 和JobTracker/TaskTracker。

2.1、配置Hadoop守護進程的運行環境

管理員可在conf/hadoop-env.sh腳本內對Hadoop守護進程的運行環境做特別指定。

至少,你得設定JAVA_HOME使之在每一遠端節點上都被正確設置。

管理員可以通過配置選項HADOOP_*_OPTS來分別配置各個守護進程。 下表是可以配置的選項。

 

守護進程配置選項
NameNodeHADOOP_NAMENODE_OPTS
DataNodeHADOOP_DATANODE_OPTS
SecondaryNamenodeHADOOP_SECONDARYNAMENODE_OPTS
JobTracker  HADOOP_JOBTRACKER_OPTS
TaskTrackerHADOOP_TASKTRACKER_OPTS

  

例如,配置Namenode時,爲了使其能夠並行回收垃圾(parallelGC), 要把下面的代碼加入到hadoop-env.sh :    
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"

其它可定製的常用參數還包括:

  • HADOOP_LOG_DIR - 守護進程日誌文件的存放目錄。如果不存在會被自動創建。

  • HADOOP_HEAPSIZE - 最大可用的堆大小,單位爲MB。比如,1000MB。 這個參數用於設置hadoop守護進程的堆大小。缺省大小是1000MB。

 

2.2、配置Hadoop守護進程的運行參數

這部分涉及Hadoop集羣的重要參數,這些參數在conf/hadoop-site.xml中指定。

參數取值備註
fs.default.name  NameNode的URI。hdfs://主機名/
mapred.job.trackerJobTracker的主機(或者IP)和端口。主機:端口
dfs.name.dir  NameNode持久存儲名字空間及事務日誌的本地文件系統路徑。當這個值是一個逗號分割的目錄列表時,nametable數據將會被複制到所有目錄中做冗餘備份。
dfs.data.dir  DataNode存放塊數據的本地文件系統路徑,逗號分割的列表。當這個值是逗號分割的目錄列表時,數據將被存儲在所有目錄下,通常分佈在不同設備上。
mapred.system.dir  Map/Reduce框架存儲系統文件的HDFS路徑。比如/hadoop/mapred/system/。  這個路徑是默認文件系統(HDFS)下的路徑, 須從服務器和客戶端上均可訪問。
mapred.local.dir  本地文件系統下逗號分割的路徑列表,Map/Reduce臨時數據存放的地方。多路徑有助於利用磁盤i/o。
mapred.tasktracker.{map|reduce}.tasks.maximum  某一TaskTracker上可運行的最大Map/Reduce任務數,這些任務將同時各自運行。默認爲2(2個map和2個reduce),可依據硬件情況更改。
dfs.hosts/dfs.hosts.exclude  許可/拒絕DataNode列表。如有必要,用這個文件控制許可的datanode列表。
mapred.hosts/mapred.hosts.exclude  許可/拒絕TaskTracker列表。如有必要,用這個文件控制許可的TaskTracker列表。

 

通常,上述參數被標記爲 final 以確保它們不被用戶應用更改。

2.3、現實世界的集羣配置

這節羅列在大規模集羣上運行sort基準測試(benchmark)時使用到的一些非缺省配置。

      運行sort900的一些非缺省配置值,sort900即在900個節點的集羣上對9TB的數據進行排序:

參數取值備註
dfs.block.size  134217728針對大文件系統,HDFS的塊大小取128MB。
dfs.namenode.handler.count  40啓動更多的NameNode服務線程去處理來自大量DataNode的RPC請求。
mapred.reduce.parallel.copies20reduce啓動更多的並行拷貝器以獲取大量map的輸出。
mapred.child.java.opts-Xmx512M  爲map/reduce子虛擬機使用更大的堆。
fs.inmemory.size.mb  200爲reduce階段合併map輸出所需的內存文件系統分配更多的內存。
io.sort.factor100文件排序時更多的流將同時被歸併。
io.sort.mb  200提高排序時的內存上限。

      運行sort1400和sort2000時需要更新的配置,即在1400個節點上對14TB的數據進行排序和在2000個節點上對20TB的數據進行排序:

參數取值備註
mapred.job.tracker.handler.count  60啓用更多的JobTracker服務線程去處理來自大量TaskTracker的RPC請求。
mapred.reduce.parallel.copies    50
tasktracker.http.threads50爲TaskTracker的Http服務啓用更多的工作線程。reduce通過Http服務獲取map的中間輸出。
mapred.child.java.opts    -Xmx1024M使用更大的堆用於maps/reduces的子虛擬機

2.4、Slaves

通常,你選擇集羣中的一臺機器作爲NameNode,另外一臺不同的機器作爲JobTracker。餘下的機器即作爲DataNode又作爲TaskTracker,這些被稱之爲slaves

在conf/slaves文件中列出所有slave的主機名或者IP地址,一行一個。

2.5、日誌

Hadoop使用Apache log4j來記錄日誌,它由Apache Commons Logging框架來實現。編輯conf/log4j.properties文件可以改變Hadoop守護進程的日誌配置(日誌格式等)。

2.6、歷史日誌

作業的歷史文件集中存放在hadoop.job.history.location,這個也可以是在分佈式文件系統下的路徑,其默認值爲${HADOOP_LOG_DIR}/history。jobtracker的web UI上有歷史日誌的web UI鏈接。

歷史文件在用戶指定的目錄hadoop.job.history.user.location也會記錄一份,這個配置的缺省值爲作業的輸出目錄。這些文件被存放在指定路徑下的“_logs/history/”目錄中。因此,默認情況下日誌文件會在“mapred.output.dir/_logs/history/”下。如果將hadoop.job.history.user.location指定爲值none,系統將不再記錄此日誌。

用戶可使用以下命令在指定路徑下查看歷史日誌彙總  
$ bin/hadoop job -history output-dir    
這條命令會顯示作業的細節信息,失敗和終止的任務細節。    
關於作業的更多細節,比如成功的任務,以及對每個任務的所做的嘗試次數等可以用下面的命令查看    
$ bin/hadoop job -history all output-dir

一但全部必要的配置完成,將這些文件分發到所有機器的HADOOP_CONF_DIR路徑下,通常是${HADOOP_HOME}/conf。

五、Hadoop的機架感知

HDFS和Map/Reduce的組件是能夠感知機架的。

NameNode和JobTracker通過調用管理員配置模塊中的APIresolve來獲取集羣裏每個slave的機架id。該API將slave的DNS名稱(或者IP地址)轉換成機架id。使用哪個模塊是通過配置項topology.node.switch.mapping.impl來指定的。模塊的默認實現會調用topology.script.file.name配置項指定的一個的腳本/命令。 如果topology.script.file.name未被設置,對於所有傳入的IP地址,模塊會返回/default-rack作爲機架id。在Map/Reduce部分還有一個額外的配置項mapred.cache.task.levels,該參數決定cache的級數(在網絡拓撲中)。例如,如果默認值是2,會建立兩級的cache- 一級針對主機(主機 -> 任務的映射)另一級針對機架(機架 -> 任務的映射)。

六、啓動Hadoop

       啓動Hadoop集羣需要啓動HDFS集羣和Map/Reduce集羣。

格式化一個新的分佈式文件系統:  
$ bin/hadoop namenode -format

在分配的NameNode上,運行下面的命令啓動HDFS:  
$ bin/start-dfs.sh

bin/start-dfs.sh腳本會參照NameNode上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上啓動DataNode守護進程。

在分配的JobTracker上,運行下面的命令啓動Map/Reduce:  
$ bin/start-mapred.sh

bin/start-mapred.sh腳本會參照JobTracker上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上啓動TaskTracker守護進程。

七、停止Hadoop

在分配的NameNode上,執行下面的命令停止HDFS:  
$ bin/stop-dfs.sh

bin/stop-dfs.sh腳本會參照NameNode上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上停止DataNode守護進程。

在分配的JobTracker上,運行下面的命令停止Map/Reduce:  
$ bin/stop-mapred.sh

bin/stop-mapred.sh腳本會參照JobTracker上${HADOOP_CONF_DIR}/slaves文件的內容,在所有列出的slave上停止TaskTracker守護進程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章