目錄
4.5.Hadoop機架意識(Rack Awareness)
1.目的
本文檔介紹瞭如何安裝和配置Hadoop集羣,範圍從幾個節點到具有數千個節點的超大型集羣。 要使用Hadoop,您可能首先需要將其安裝在單臺計算機上(請參閱單節點設置)。
本文檔不涉及安全或高可用性等高級主題。
2.先決條件
- 安裝Java。 有關已知的良好版本,請參見 Hadoop Wik。
- 從Apache鏡像下載穩定的Hadoop版本。
3.安裝
安裝Hadoop羣集通常涉及在羣集中的所有計算機上解壓縮軟件,或通過適用於您的操作系統的打包系統進行安裝。將硬件劃分爲功能很重要。
通常,將羣集中的一臺機器專門指定爲NameNode,將另一臺機器指定爲ResourceManager。這些是僱主(masters)。其他服務(例如Web App代理服務器和MapReduce作業歷史服務器)通常根據負載在專用硬件或共享基礎結構上運行。
羣集中的其餘計算機同時充當DataNode和NodeManager。這些都是工人(workers)。
4.在非安全模式下配置Hadoop
Hadoop的Java配置由兩種重要的配置文件驅動:
- 只讀默認配置:- core-default.xml, hdfs-default.xml, yarn-default.xml 和 mapred-default.xml.。
- 基於於站點的配置:etc/hadoop/core-site.xml, etc/hadoop/hdfs-site.xml, etc/hadoop/yarn-site.xml 和 etc/hadoop/mapred-site.xml。
此外,你可以控制分配的bin/目錄下的Hadoop腳本,由通過在etc/hadoop/hadoop-env.sh 和 etc/hadoop/yarn-env.sh中設置站點的具體數值。
要配置Hadoop集羣,您將需要配置Hadoop守護程序執行的環境以及Hadoop守護程序的配置參數。
HDFS守護程序是NameNode,SecondaryNameNode和DataNode。 YARN守護程序是ResourceManager,NodeManager和WebAppProxy。 如果要使用MapReduce,則MapReduce作業歷史服務器也將運行。 對於大型安裝,它們通常在單獨的主機上運行。
4.1.Hadoop守護程序的配置環境
管理員應使用etc/hadoop/hadoop-env.sh以及可選的etc/hadoop/mapred-env.sh和etc/hadoop/yarn-env.sh腳本對Hadoop守護進程的處理環境進行特定於站點的自定義。
至少必須指定JAVA_HOME,以便在每個遠程節點上正確定義它。
管理員可以使用下表中顯示的配置選項來配置各個守護程序:
Daemon | Environment Variable |
---|---|
NameNode | HDFS_NAMENODE_OPTS |
DataNode | HDFS_DATANODE_OPTS |
Secondary NameNode | HDFS_SECONDARYNAMENODE_OPTS |
ResourceManager | YARN_RESOURCEMANAGER_OPTS |
NodeManager | YARN_NODEMANAGER_OPTS |
WebAppProxy | YARN_PROXYSERVER_OPTS |
Map Reduce Job History Server | MAPRED_HISTORYSERVER_OPTS |
例如,要將Namenode配置爲使用parallelGC和4GB Java Heap,應在hadoop-env.sh中添加以下語句:
export HDFS_NAMENODE_OPTS="-XX:+UseParallelGC -Xmx4g"
有關其他示例,請參見etc/hadoop/hadoop-env.sh。
您可以自定義的其他有用的配置參數包括:
- HADOOP_PID_DIR-守護程序的進程ID文件的存儲目錄。
- HADOOP_LOG_DIR-守護程序日誌文件的存儲目錄。 如果日誌文件不存在,則會自動創建。
- HADOOP_HEAPSIZE_MAX-用於Java heapsize的最大內存量。 此處也支持JVM支持的單元。 如果不存在任何單位,則將假定該數字以兆字節爲單位。 默認情況下,Hadoop將讓JVM確定使用多少資源。 可以使用上面列出的適當的_OPTS變量逐個守護程序覆蓋此值。 例如,設置HADOOP_HEAPSIZE_MAX=1g和HADOOP_NAMENODE_OPTS="-Xmx5g"將爲NameNode配置5GB的堆。
在大多數情況下,您應該指定HADOOP_PID_DIR和HADOOP_LOG_DIR目錄,以便它們只能由將要運行hadoop守護程序的用戶寫入。 否則可能會發生符號鏈接攻擊。
在系統級外殼環境配置中配置HADOOP_HOME也是傳統的做法。 例如,/etc/profile.d中的一個簡單腳本:
HADOOP_HOME=/path/to/hadoop
export HADOOP_HOME
4.2.配置Hadoop守護程序
本節介紹在給定的配置文件中指定的重要參數:
- etc/hadoop/core-site.xml
Parameter | Value | Notes |
---|---|---|
fs.defaultFS | NameNode URI | hdfs://host:port/ |
io.file.buffer.size | 131072 | Size of read/write buffer used in SequenceFiles. |
- etc/hadoop/hdfs-site.xml
- 配置NameNode:
Parameter | Value | Notes |
---|---|---|
dfs.namenode.name.dir |
NameNode持久存儲名稱空間和事務日誌的本地文件系統上的路徑 |
如果這是用逗號分隔的目錄列表,則將名稱表複製到所有目錄中,以實現冗餘。 |
dfs.hosts / dfs.hosts.exclude | permitted/excluded DataNodes的列表。 | 如有必要,請使用這些文件來控制允許的數據節點列表。 |
dfs.blocksize | 268435456 | 大型文件系統的HDFS塊大小爲256MB。 |
dfs.namenode.handler.count | 100 | 更多的NameNode服務器線程可處理來自大量DataNode的RPC。 |
- 配置DataNode:
Parameter | Value | Notes |
---|---|---|
dfs.datanode.data.dir | 逗號分隔的DataNode本地文件系統上應存儲其塊的路徑列表。 | 如果這是逗號分隔的目錄列表,則數據將存儲在所有命名的目錄中,通常在不同的設備上。 |
- etc/hadoop/yarn-site.xml
- 配置ResourceManager和NodeManager:
Parameter | Value | Notes |
---|---|---|
yarn.acl.enable | true / false | Enable ACLs? Defaults to false. |
yarn.admin.acl | Admin ACL | ACL用於在羣集上設置管理員。 ACL適用於逗號分隔的用戶空間逗號分隔的組。 默認爲特殊值*,表示任何人。 僅有空格的特殊價值意味着沒有人可以使用。 |
yarn.log-aggregation-enable | false | 啓用或禁用日誌聚合的配置 |
- 配置ResourceManager:
Parameter | Value | Notes |
---|---|---|
yarn.resourcemanager.address | ResourceManager host:port 供客戶端提交作業 |
host:port 如果已設置, 將覆蓋在yarn.resourcemanager.hostname中設置的hostname |
yarn.resourcemanager.scheduler.address | ResourceManager host:port ,ApplicationMaster可以與Scheduler通信以獲取資源。 |
host:port 如果已設置, |
yarn.resourcemanager.resource-tracker.address | ResourceManager host:port for NodeManagers. |
host:port 如果已設置, |
yarn.resourcemanager.admin.address | ResourceManager host:port for administrative commands. | host:port 如果已設置, 將覆蓋在yarn.resourcemanager.hostname中設置的hostname |
yarn.resourcemanager.webapp.address | ResourceManager web-ui host:port. | host:port 如果已設置, 將覆蓋在yarn.resourcemanager.hostname中設置的hostname |
yarn.resourcemanager.hostname | ResourceManager host. |
host 可以設置單個主機名來代替設置所有yarn.resourcemanager*address資源。生成ResourceManager組件的默認端口。 |
yarn.resourcemanager.scheduler.class | ResourceManager Scheduler class. | CapacityScheduler (推薦), FairScheduler (也推薦), or FifoScheduler. 使用完全限定的類名稱, 例如, org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler. |
yarn.scheduler.minimum-allocation-mb | 在資源管理器中分配給每個容器請求的最小內存限制。 | In MBs |
yarn.scheduler.maximum-allocation-mb | 在資源管理器中分配給每個容器請求的最大內存限制。 | In MBs |
yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path | List of permitted/excluded NodeManagers. | 如有必要,請使用這些文件來控制允許的NodeManager列表。 |
- 配置NodeManager:
Parameter | Value | Notes |
---|---|---|
yarn.nodemanager.resource.memory-mb | 資源,即給定的NodeManager可用的物理內存(MB) | 在NodeManager上定義可供運行中的容器使用的總可用資源 |
yarn.nodemanager.vmem-pmem-ratio | 任務的虛擬內存使用率可能超過物理內存的最大比率 | 每個任務的虛擬內存使用量可能超過此物理內存限制的比率。 NodeManager上的任務使用的虛擬內存總量可能超過其物理內存使用量達此比率。 |
yarn.nodemanager.local-dirs | 逗號分隔的本地文件系統上寫入中間數據的路徑列表。 | 多個路徑有助於傳播磁盤 i/o. |
yarn.nodemanager.log-dirs | 逗號分隔的本地文件系統上寫入日誌的路徑列表。 | 多個路徑有助於傳播磁盤 i/o. |
yarn.nodemanager.log.retain-seconds | 10800 | 在NodeManager上保留日誌文件的默認時間(以秒爲單位)僅在禁用日誌聚合時適用。 |
yarn.nodemanager.remote-app-log-dir | /logs | 應用程序完成時將應用程序日誌移動到的HDFS目錄。 需要設置適當的權限。 僅在啓用日誌聚合的情況下適用。 |
yarn.nodemanager.remote-app-log-dir-suffix | logs | 後綴附加到遠程日誌目錄。 日誌將彙總到${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam} ,僅在啓用日誌彙總的情況下適用。 |
yarn.nodemanager.aux-services | mapreduce_shuffle | 需要爲Map Reduce應用程序設置Shuffle服務。 |
yarn.nodemanager.env-whitelist | 容器從NodeManagers繼承的環境屬性 | 對於mapreduce應用程序,除了默認值之外,還應添加HADOOP_MAPRED_HOME。 屬性值應爲JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME |
- 配置History Server(需要移至其他位置):
Parameter | Value | Notes |
---|---|---|
yarn.log-aggregation.retain-seconds | -1 | 刪除聚合日誌前要保留多長時間。 -1禁用。 請注意,將此值設置得太小,您將向名稱節點發送垃圾郵件(spam)。 |
yarn.log-aggregation.retain-check-interval-seconds | -1 | 檢查聚合日誌保留之間的時間。 如果設置爲0或負值,則該值將被計算爲聚合日誌保留時間的十分之一。 請注意,將此值設置得太小,您將向名稱節點發送垃圾郵件。 |
- etc/hadoop/mapred-site.xml
- 配置MapReduce Applications:
Parameter | Value | Notes |
---|---|---|
mapreduce.framework.name | yarn | 執行框架設置爲Hadoop YARN。 |
mapreduce.map.memory.mb | 1536 | Larger resource limit for maps. |
mapreduce.map.java.opts | -Xmx1024M | Larger heap-size for child jvms of maps. |
mapreduce.reduce.memory.mb | 3072 | Larger resource limit for reduces. |
mapreduce.reduce.java.opts | -Xmx2560M | Larger heap-size for child jvms of reduces. |
mapreduce.task.io.sort.mb | 512 | Higher memory-limit while sorting data for efficiency. |
mapreduce.task.io.sort.factor | 100 | More streams merged at once while sorting files. |
mapreduce.reduce.shuffle.parallelcopies | 50 | Higher number of parallel copies run by reduces to fetch outputs from very large number of maps. |
- 配置MapReduce JobHistory Server:
Parameter | Value | Notes |
---|---|---|
mapreduce.jobhistory.address | MapReduce JobHistory Server host:port | Default port is 10020. |
mapreduce.jobhistory.webapp.address | MapReduce JobHistory Server Web UI host:port | Default port is 19888. |
mapreduce.jobhistory.intermediate-done-dir | /mr-history/tmp | Directory where history files are written by MapReduce jobs. |
mapreduce.jobhistory.done-dir | /mr-history/done | Directory where history files are managed by the MR JobHistory Server. |
4.3.監視NodeManager的運行狀況
Hadoop提供了一種機制,管理員可以通過該機制將NodeManager配置爲定期運行管理員提供的腳本,以確定節點是否正常。
管理員可以通過在腳本中執行對其選擇的任何檢查來確定節點是否處於健康狀態。如果腳本檢測到該節點處於不正常狀態,則它必須從標準字符串ERROR開始打印一行到標準輸出。NodeManager會定期生成腳本並檢查其輸出。如上所述,如果腳本的輸出包含字符串ERROR,則該節點的狀態報告爲unhealthy,並且ResourceManager將其列入黑名單。沒有其他任務將分配給該節點。但是,NodeManager會繼續運行該腳本,因此,如果該節點再次恢復正常,則它將自動從ResourceManager的黑名單節點中刪除。節點的運行狀況以及腳本的輸出(如果運行狀況不正常)對於管理員在ResourceManager Web界面(interface)中可用。 Web界面(interface)上還顯示自節點運行狀況良好以來的時間。
以下參數可用於控制 etc/hadoop/yarn-site.xml 中的節點運行狀況監視腳本。
Parameter | Value | Notes |
---|---|---|
yarn.nodemanager.health-checker.script.path | Node health script | Script to check for node’s health status. |
yarn.nodemanager.health-checker.script.opts | Node health script options | Options for script to check for node’s health status. |
yarn.nodemanager.health-checker.interval-ms | Node health script interval | Time interval for running health script. |
yarn.nodemanager.health-checker.script.timeout-ms | Node health script timeout interval | Timeout for health script execution. |
如果僅某些本地磁盤出錯,則運行狀況檢查器腳本不應給出ERROR。 NodeManager能夠定期檢查本地磁盤的運行狀況(特別是檢查nodemanager-local-dirs和nodemanager-log-dirs),並根據配置屬性yarn.nodemanager.disk-health-checker.min-healthy-disks的值達到錯誤目錄數量的閾值後,整個節點被標記爲unhealthy,並且此信息也發送到資源管理器。 啓動磁盤被檢查,或者運行狀況檢查程序腳本標識了啓動磁盤中的故障。
4.4.奴隸(Slaves)文件
在您的etc/hadoop/workers文件中列出所有工作者主機名或IP地址,每行列出一個。 幫助程序腳本(如下所述)將使用etc/hadoop/workers 文件在多個主機上一次運行命令。 它不用於任何基於Java的Hadoop配置。 爲了使用此功能,必須爲用於運行Hadoop的帳戶建立ssh信任(通過無密碼ssh或其他某種方式,例如Kerberos)。
4.5.Hadoop機架意識(Rack Awareness)
許多Hadoop組件都知道機架,並利用網絡拓撲來提高性能和安全性。 Hadoop守護程序通過調用管理員配置的模塊來獲取集羣中工作線程的機架信息。 有關更多特定信息,請參閱機架意識文檔(Rack Awareness)。
強烈建議在啓動HDFS之前配置機架感知。
4.6.Logging
Hadoop通過Apache Commons Logging框架使用 Apache log4j進行日誌記錄。 編輯 etc/hadoop/log4j.properties文件以自定義Hadoop守護程序的日誌配置(日誌格式等)。
4.7.操作Hadoop集羣
完成所有必要的配置後,將文件分發到所有計算機上的HADOOP_CONF_DIR目錄。 在所有計算機上,該目錄應該是相同的目錄。
通常,建議HDFS和YARN以單獨的用戶身份運行。 在大多數安裝中,HDFS進程以“hdfs”的身份執行。 YARN通常使用的是“yarn”帳戶。
4.7.1.Hadoop啓動
要啓動Hadoop集羣,您將需要同時啓動HDFS和YARN集羣。
首次啓動HDFS時,必須對其進行格式化。 將新的分佈式文件系統格式化爲hdfs:
[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format <cluster_name>
在指定節點上將以下命令作爲hdfs啓動HDFS NameNode:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start namenode
在每個指定的節點上將以下命令作爲hdfs啓動HDFS DataNode:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start datanode
如果配置了 etc/hadoop/workers 和ssh可信訪問權限(請參閱單節點設置),則可以使用實用程序腳本啓動所有HDFS進程。 作爲hdfs:
[hdfs]$ $HADOOP_HOME/sbin/start-dfs.sh
使用以下命令啓動YARN,在指定的ResourceManager上以yarn的身份運行:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start resourcemanager
運行腳本以在每個指定的主機上以yarn形式啓動NodeManager:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start nodemanager
啓動獨立的WebAppProxy服務器。 以yarn的形式在WebAppProxy服務器上運行。 如果將多個服務器用於負載平衡,則應在每個服務器上運行該服務器:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start proxyserver
如果配置了etc/hadoop/workers和ssh信任訪問權限(請參閱單節點設置),則可以使用實用程序腳本啓動所有YARN進程。 作爲yarn:
[yarn]$ $HADOOP_HOME/sbin/start-yarn.sh
使用以下命令啓動MapReduce JobHistory服務器,以mapred在指定服務器上運行:
[mapred]$ $HADOOP_HOME/bin/mapred --daemon start historyserver
4.7.2.Hadoop關閉
使用以下命令停止NameNode,在指定的NameNode上以hdfs的身份運行:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop namenode
運行腳本以將DataNode停止爲hdfs:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop datanode
如果配置了etc/hadoop/workers和ssh可信訪問權限(請參閱單節點設置),則可以使用實用程序腳本停止所有HDFS進程。 作爲hdfs:
[hdfs]$ $HADOOP_HOME/sbin/stop-dfs.sh
使用以下命令停止ResourceManager,在指定的ResourceManager上以yarn身份運行:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop resourcemanager
運行腳本以停止NodeManager在一個工人(worker) 以yarn身份運行:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop nodemanager
如果配置了etc/hadoop/workers和ssh信任訪問權限(請參閱單節點設置),則可以使用實用程序腳本停止所有YARN進程。 作爲yarn:
[yarn]$ $HADOOP_HOME/sbin/stop-yarn.sh
停止WebAppProxy服務器。 以yarn的形式在WebAppProxy服務器上運行。 如果將多個服務器用於負載平衡,則應在每個服務器上運行該服務器:
[yarn]$ $HADOOP_HOME/bin/yarn stop proxyserver
使用以下命令停止MapReduce JobHistory Server,以mapred在指定服務器上運行:
[mapred]$ $HADOOP_HOME/bin/mapred --daemon stop historyserver
4.8.Web Interfaces
Hadoop集羣啓動並運行後,如下所述檢查組件的Web UI:
Daemon | Web Interface | Notes |
---|---|---|
NameNode | http://nn_host:port/ | Default HTTP port is 9870. |
ResourceManager | http://rm_host:port/ | Default HTTP port is 8088. |
MapReduce JobHistory Server | http://jhs_host:port/ | Default HTTP port is 19888. |