歡迎使用訪問摩杰斯公司部落格
發(fā)布:admin | 分類:Linux | 引用:0 | 瀏覽:
26 Oct 2014一、目的
本文描述了如何安裝、配置和管理有實際意義的Hadoop集群,其規(guī)??蓮膸讉€節(jié)點的小集群到幾千個節(jié)點的超大集群。如果你希望在單機上安裝Hadoop玩玩,從這里能找到相關(guān)細節(jié)。
二、先決條件
1.確保在你集群中的每個節(jié)點上都安裝了所有必需軟件。
2.獲取Hadoop軟件包。
三、安裝
安裝Hadoop集群通常要將安裝軟件解壓到集群內(nèi)的所有機器上。
通常,集群里的一臺機器被指定為 NameNode,另一臺不同的機器被指定為JobTracker。這些機器是masters。余下的機器即作為DataNode也作為TaskTracker。這些機器是slaves。
我們用HADOOP_HOME指代安裝的根路徑。通常,集群里的所有機器的HADOOP_HOME路徑相同。
四、配置
接下來描述了如何配置Hadoop集群。
1、配置文件
對Hadoop的配置通過conf/目錄下的兩個重要配置文件完成:
1.hadoop-default.xml - 只讀的默認配置。
2.hadoop-site.xml - 集群特有的配置。
要了解更多關(guān)于這些配置文件如何影響Hadoop框架的細節(jié),請看這里。
此外,通過設(shè)置conf/hadoop-env.sh中的變量為集群特有的值,你可以對bin/目錄下的Hadoop腳本進行控制。
2、集群配置
要配置Hadoop集群,你需要設(shè)置Hadoop守護進程的運行環(huán)境和Hadoop守護進程的運行參數(shù)。
Hadoop守護進程指NameNode/DataNode 和JobTracker/TaskTracker。
2.1、配置Hadoop守護進程的運行環(huán)境
管理員可在conf/hadoop-env.sh腳本內(nèi)對Hadoop守護進程的運行環(huán)境做特別指定。
至少,你得設(shè)定JAVA_HOME使之在每一遠端節(jié)點上都被正確設(shè)置。
管理員可以通過配置選項HADOOP_*_OPTS來分別配置各個守護進程。 下表是可以配置的選項。
守護進程 配置選項
NameNode HADOOP_NAMENODE_OPTS
DataNode HADOOP_DATANODE_OPTS
SecondaryNamenode HADOOP_SECONDARYNAMENODE_OPTS
JobTracker HADOOP_JOBTRACKER_OPTS
TaskTracker HADOOP_TASKTRACKER_OPTS
例如,配置Namenode時,為了使其能夠并行回收垃圾(parallelGC), 要把下面的代碼加入到hadoop-env.sh :
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"
其它可定制的常用參數(shù)還包括:
HADOOP_LOG_DIR - 守護進程日志文件的存放目錄。如果不存在會被自動創(chuàng)建。
HADOOP_HEAPSIZE - 最大可用的堆大小,單位為MB。比如,1000MB。 這個參數(shù)用于設(shè)置hadoop守護進程的堆大小。缺省大小是1000MB。
2.2、配置Hadoop守護進程的運行參數(shù)
這部分涉及Hadoop集群的重要參數(shù),這些參數(shù)在conf/hadoop-site.xml中指定。
參數(shù) 取值 備注
fs.default.name NameNode的URI。 hdfs://主機名/
mapred.job.tracker JobTracker的主機(或者IP)和端口。 主機:端口。
dfs.name.dir NameNode持久存儲名字空間及事務(wù)日志的本地文件系統(tǒng)路徑。 當(dāng)這個值是一個逗號分割的目錄列表時,nametable數(shù)據(jù)將會被復(fù)制到所有目錄中做冗余備份。
dfs.data.dir DataNode存放塊數(shù)據(jù)的本地文件系統(tǒng)路徑,逗號分割的列表。 當(dāng)這個值是逗號分割的目錄列表時,數(shù)據(jù)將被存儲在所有目錄下,通常分布在不同設(shè)備上。
mapred.system.dir Map/Reduce框架存儲系統(tǒng)文件的HDFS路徑。比如/hadoop/mapred/system/。 這個路徑是默認文件系統(tǒng)(HDFS)下的路徑, 須從服務(wù)器和客戶端上均可訪問。
mapred.local.dir 本地文件系統(tǒng)下逗號分割的路徑列表,Map/Reduce臨時數(shù)據(jù)存放的地方。 多路徑有助于利用磁盤i/o。
mapred.tasktracker.{map|reduce}.tasks.maximum 某一TaskTracker上可運行的最大Map/Reduce任務(wù)數(shù),這些任務(wù)將同時各自運行。 默認為2(2個map和2個reduce),可依據(jù)硬件情況更改。
dfs.hosts/dfs.hosts.exclude 許可/拒絕DataNode列表。 如有必要,用這個文件控制許可的datanode列表。
mapred.hosts/mapred.hosts.exclude 許可/拒絕TaskTracker列表。 如有必要,用這個文件控制許可的TaskTracker列表。
通常,上述參數(shù)被標(biāo)記為 final 以確保它們不被用戶應(yīng)用更改。
2.3、現(xiàn)實世界的集群配置
這節(jié)羅列在大規(guī)模集群上運行sort基準(zhǔn)測試(benchmark)時使用到的一些非缺省配置。
運行sort900的一些非缺省配置值,sort900即在900個節(jié)點的集群上對9TB的數(shù)據(jù)進行排序:
參數(shù) 取值 備注
dfs.block.size 134217728 針對大文件系統(tǒng),HDFS的塊大小取128MB。
dfs.namenode.handler.count 40 啟動更多的NameNode服務(wù)線程去處理來自大量DataNode的RPC請求。
mapred.reduce.parallel.copies 20 reduce啟動更多的并行拷貝器以獲取大量map的輸出。
mapred.child.java.opts -Xmx512M 為map/reduce子虛擬機使用更大的堆。
fs.inmemory.size.mb 200 為reduce階段合并map輸出所需的內(nèi)存文件系統(tǒng)分配更多的內(nèi)存。
io.sort.factor 100 文件排序時更多的流將同時被歸并。
io.sort.mb 200 提高排序時的內(nèi)存上限。
運行sort1400和sort2000時需要更新的配置,即在1400個節(jié)點上對14TB的數(shù)據(jù)進行排序和在2000個節(jié)點上對20TB的數(shù)據(jù)進行排序:
參數(shù) 取值 備注
mapred.job.tracker.handler.count 60 啟用更多的JobTracker服務(wù)線程去處理來自大量TaskTracker的RPC請求。
mapred.reduce.parallel.copies 50
tasktracker.http.threads 50 為TaskTracker的Http服務(wù)啟用更多的工作線程。reduce通過Http服務(wù)獲取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框架來實現(xiàn)。編輯conf/log4j.properties文件可以改變Hadoop守護進程的日志配置(日志格式等)。
2.6、歷史日志
作業(yè)的歷史文件集中存放在hadoop.job.history.location,這個也可以是在分布式文件系統(tǒng)下的路徑,其默認值為${HADOOP_LOG_DIR}/history。jobtracker的web UI上有歷史日志的web UI鏈接。
歷史文件在用戶指定的目錄hadoop.job.history.user.location也會記錄一份,這個配置的缺省值為作業(yè)的輸出目錄。這些文件被存放在指定路徑下的“_logs/history/”目錄中。因此,默認情況下日志文件會在“mapred.output.dir/_logs/history/”下。如果將hadoop.job.history.user.location指定為值none,系統(tǒng)將不再記錄此日志。
用戶可使用以下命令在指定路徑下查看歷史日志匯總
$ bin/hadoop job -history output-dir
這條命令會顯示作業(yè)的細節(jié)信息,失敗和終止的任務(wù)細節(jié)。
關(guān)于作業(yè)的更多細節(jié),比如成功的任務(wù),以及對每個任務(wù)的所做的嘗試次數(shù)等可以用下面的命令查看
$ bin/hadoop job -history all output-dir
一但全部必要的配置完成,將這些文件分發(fā)到所有機器的HADOOP_CONF_DIR路徑下,通常是${HADOOP_HOME}/conf。
五、Hadoop的機架感知
HDFS和Map/Reduce的組件是能夠感知機架的。
NameNode和JobTracker通過調(diào)用管理員配置模塊中的APIresolve來獲取集群里每個slave的機架id。該API將slave的DNS名稱(或者IP地址)轉(zhuǎn)換成機架id。使用哪個模塊是通過配置項topology.node.switch.mapping.impl來指定的。模塊的默認實現(xiàn)會調(diào)用topology.script.file.name配置項指定的一個的腳本/命令。 如果topology.script.file.name未被設(shè)置,對于所有傳入的IP地址,模塊會返回/default-rack作為機架id。在Map/Reduce部分還有一個額外的配置項mapred.cache.task.levels,該參數(shù)決定cache的級數(shù)(在網(wǎng)絡(luò)拓撲中)。例如,如果默認值是2,會建立兩級的cache- 一級針對主機(主機 -> 任務(wù)的映射)另一級針對機架(機架 -> 任務(wù)的映射)。
六、啟動Hadoop
啟動Hadoop集群需要啟動HDFS集群和Map/Reduce集群。
格式化一個新的分布式文件系統(tǒng):
$ bin/hadoop namenode -format
在分配的NameNode上,運行下面的命令啟動HDFS:
$ bin/start-dfs.sh
bin/start-dfs.sh腳本會參照NameNode上${HADOOP_CONF_DIR}/slaves文件的內(nèi)容,在所有列出的slave上啟動DataNode守護進程。
在分配的JobTracker上,運行下面的命令啟動Map/Reduce:
$ bin/start-mapred.sh
bin/start-mapred.sh腳本會參照JobTracker上${HADOOP_CONF_DIR}/slaves文件的內(nèi)容,在所有列出的slave上啟動TaskTracker守護進程。
七、停止Hadoop
在分配的NameNode上,執(zhí)行下面的命令停止HDFS:
$ bin/stop-dfs.sh
bin/stop-dfs.sh腳本會參照NameNode上${HADOOP_CONF_DIR}/slaves文件的內(nèi)容,在所有列出的slave上停止DataNode守護進程。
在分配的JobTracker上,運行下面的命令停止Map/Reduce:
$ bin/stop-mapred.sh
bin/stop-mapred.sh腳本會參照JobTracker上${HADOOP_CONF_DIR}/slaves文件的內(nèi)容,在所有列出的slave上停止TaskTracker守護進程。
自從有了Blog,我們的世界變得不一樣了,在這里說我想說的,說我能說的,能看到這里的,感謝您的關(guān)注,同時最美好的祝愿送給您。
發(fā)表評論
◎歡迎參與討論,請在這里發(fā)表您的看法、交流您的觀點。