hadoop-2.7.4-翻譯文件-分散式叢集搭建
安裝簡介
安裝Hadoop叢集通常需要在叢集中的所有機器上進行統一安裝,或者通過適合目標作業系統的打包系統進行安裝。
安裝的要點是對不同的節點分配不同的功能。
其他服務(例如Web App Proxy Server和MapReduce作業歷史記錄伺服器)通常根據負載在專用硬體或共享裝置上執行。
叢集中的其餘機器充當DataNode和NodeManager。這些是僕從(slaves)。
在非安全模式下配置Hadoop
Hadoop的Java配置由兩種重要的配置檔案驅動:
1.預設配置:core-default.xml,hdfs-default.xml,yarn-default.xml和mapred-default.xml。 2.具體配置:core-site.xml, hdfs-site.xml, yarm-site.xml和mapred-site.xml。 另外,可以通過設定etc/hadoop/hadoop-env.sh和etc/hadoop/yarn-env.sh的值來控制的bin目錄下的Hadoop指令碼。 要配置Hadoop叢集,您需要配置Hadoop的環境變數以及配置引數。 HDFS守護程序是NameNode,SecondaryNameNode和DataNode。YARN守護程序是ResourceManager,NodeManager和WebAppProxy。 如果要使用MapReduce作業,則MapReduce作業歷史記錄伺服器也將執行。 對於大型叢集,這些節點通常安裝在不同的主機上執行。
配置hadoop守護程序的環境
管理員應該使用[etc/hadoop/hadoop-env.sh]和可選的[etc/hadoop/mapred-env.sh]和[etc/hadoop/yarn-env.sh]指令碼來對Hadoop守護程序環境進行定製。
管理員可以使用下表中顯示的配置選項來配置各個後臺駐留程式:
守護程序 環境變數 NameNode HADOOP_NAMENODE_OPTS DataNode HADOOP_DATANODE_OPTS SecondaryNameNode HADOOP_SECONDARYNAMENODE_OPTS ResourceManager YARN_RESOURCEMANAGER_OPTS NodeManager YARN_NODEMANAGER_OPTS WebAppProxy YARN_PROXYSERVER_OPTS MapReduceJobHistoryServer HADOOP_JOB_HISTORYSERVER_OPTS
例如,要將Namenode配置為使用parallelGC,應在hadoop-env.sh中新增以下語句:
匯出HADOOP_NAMENODE_OPTS =“ - XX:+ UseParallelGC”
您可以自定義的其他有用的配置引數包括:
HADOOP_PID_DIR //儲存程序標識檔案的目錄。
HADOOP_LOG_DIR //守護程序的日誌檔案的儲存目錄。如果日誌檔案不存在,將自動建立日誌檔案。
HADOOP_HEAPSIZE/YARN_HEAPSIZE //最大堆大小,以MB為單位,預設值為1000。
在大多數情況下,應該指定HADOOP_PID_DIR和HADOOP_LOG_DIR目錄,以便只能由要執行hadoop守護程式的使用者寫入。否則有可能發生符號連結攻擊。
在系統範圍的shell環境配置中配置HADOOP_PREFIX也是慣例。例如,/ etc/profile.d中的一個簡單指令碼:
HADOOP_PREFIX=/path/to/hadoop
export HADOOP_PREFIX
守護程序 環境變數
ResourceManager YARN_RESOURCEMANAGER_HEAPSIZE
NodeManager YARN_NODEMANAGER_HEAPSIZE
WebAppProxy YARN_PROXYSERVER_HEAPSIZE
MapReduceJobHistoryServer HADOOP_JOB_HISTORYSERVER_HEAPSIZE
配置Hadoop守護程序引數
一般來說,成功啟動一個簡單的分散式叢集,必須的基本引數配置如下,進行優化則需要新增更多引數。
[core-site.xml]
—-fs.defaultFS, hadoop.tmp.dir
—-//hadoop.tmp.dir為持久化儲存,預設為系統臨時目錄,需修改為指定的持久化目錄。
[hdfs-site.xml]
—-dfs.namenode.secondary.http-address
—-//預設為啟動指令碼的機器,建議修改配置,指定為namenode之外的機器。
[mapred-site.xml]
—-mapreduce.framework.name
[yarn-site.xml]
—-yarn.resourcemanager.hostname,yarn.nodemanager.aux-services注:hadoop-2.7.4存在一個nodemanager無法啟動的小問題,請參照:
[http://blog.csdn.net/anyuzun/article/details/78045601 ]
[core-site.xml]
fs.defaultFS=NameNode URI //預設的檔案系統。
io.fill.buffer.size=131072 //對序列檔案進行讀寫操作時緩衝區的大小
[hdfs.site.xml]
NameNode的配置:
dfs.namenode.name.dir=NameNode持久化儲存在本地系統中用於持久化名字空間和事務日誌的路徑。
//如果該值為用逗號分隔的目錄列表,則在所有目錄中產生副本,存在冗餘。
dfs.hosts/dfs.hosts.exclude=允許/拒絕連線的NameNode列表。
//如果有必要,可以使用檔案來進行該引數設定。
dfs.blocksize=268435456
//對於大型叢集,塊大小一般為256M。預設為128M。
dfs.namenode.handler.count=100
//對於大量的DataNode,採用多個NameNode服務程式設計來處理遠端過程呼叫。
DataNode的配置:
dfs.datanode.data.dir=DataNode在本地系統持久化儲存檔案塊的目錄。
//如果該值為逗號分割的目錄列表,則資料會分開存放在不同的目錄中。
通常這些目錄在不同的裝置上。
[yarn-site.xml]
ResourceManager與NodeManager的共有引數:
yarn.acl.enable=true/false
//是否啟用訪問控制列表。
yarn.admin.acl=Admin ACL
//在叢集上設定管理員的ACL。在叢集上設定管理員的訪問控制列表。
ACL可以是用逗號分隔的使用者空間分隔組。
預設為*,表示所有人都可以訪問。使用特殊值,可以阻止任何人進行訪問。
yarn.log-aggregation-enable=false
//禁用日誌聚合。
ResourceManager的配置:
yarn.resourcemanager.address
//客戶端提交作業的埠。
yarn.resourcemanager.scheduler.address
//ApplicationMasters的主機埠,用於與排程器互動以獲取資源。
yarn.resourcemanager.resource-tracker.address
//NodeManager的主機埠.
yarn.resourcemanager.admin.address
//ResourceManager host:port for administrative commands.命令管理主機埠。
yarn.resourcemanager.webapp.address
//web-ui主機埠。
yarn.resourcemanager.hostname
//如果該值設定,則可以省略所有yarn.resourcemanager.*的地址資源.
如果後者有配置,該單項設定會覆蓋hostname的設定值。
yarn.resourcemanager.scheduler.class
//排程器類,容量排程器(推薦),公平排程器(也推薦)或先入先出排程器。
yarn.scheduler.minimum-allocation-mb
//資源管理器分配給每個容器請求的最小記憶體限制。
yarn.scheduler.maximum-allocation-mb
//資源管理器分配給每個容器請求的最大記憶體限制。
yarn.resourcemanager.nodes.include-path/
yarn.resourcemanager.nodes.exclude-path
//允許/拒絕連線的NodeManager.如果有必要,使用檔案來進行引數控制。
NodeManager的配置:
yarn.nodemanager.resource.memory-MB
//資源即時可用的實體記憶體,以MB為單位。
NodeManager上可用於執行容器的總可用資源
yarn.nodemanager.vmem-pmem-ratio
//每個任務的虛擬記憶體可能超過實體記憶體的比例限制。
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
//在一能用程式完成時,日誌移動到的hdfs目錄。需要設定的許可權。僅在啟用日誌聚合時適用。
yarn.nodemanager.remote-app-log-dir-suffix
//附加到遠端日誌目錄的字尾。日誌將被彙總到
${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}目錄下。
僅在日誌聚合啟用時適用。
yarn.nodemanager.aux-services=mapreduce_shuffle
//為MapReduce應用程式設定的混洗服務。
歷史伺服器的配置(需要移動到別處時):
yarn.log-aggregation.retain-seconds=-1
//聚合日誌的保留時間。-1禁用。如果設定過小,NameNode會收到垃圾資訊。
yarn.log-aggregation.retain-check-interval-seconds=-1
//檢查聚合日誌保留的時間間隔。如果設定為0或負值,則該值計算為聚合日誌保留時間的十分之一。
如果設定過小,NameNode會收到垃圾資訊。
[mapred.site.xml]
MapReduce應用程式的配置:
mapreduce.framework.name=yarn
//執行框架設定為Hadoop YARN。
mapreduce.map.memory.mb=1536
//map任務的資源限制大小。
mapreduce.map.java.opts=-Xmx1024M
//map任務中子虛擬機器的堆大小。
mapreduce.reduce.memory.mb=3072
//reduce任務的資源限制大小。
mapreduce.reduce.java.opts=-Xmx2560M
//reduce任務中子虛擬機器的堆大小。
mapreduce.task.io.sort.mb=512
//進行排序時的記憶體大小。
mapreduce.task.io.sort.factor=100
//檔案排序時,一次合併的流數量。
mapreduce.reduce.shuffle.parallelcopies=50
//從大量map任務中獲取輸入時,reducer執行的並行副本的數量。
MapReduce JobHistory伺服器的配置:
mapreduce.jobhistory.address
//MapReduce JobHistory伺服器主機埠,預設埠為10020。
mapreduce.jobhistory.webapp.address
//MapReduce JobHistory伺服器Web-UI主機:埠,預設埠是19888。
mapreduce.jobhistory.intermediate-done-dir=/mr-history/tmp
//MapReduce任務儲存日誌檔案的目錄。
mapreduce.jobhistory.done-dir=/mr-history/done
//由JobHistory伺服器管理的日誌檔案目錄。
監控節點管理器的執行狀況
Hadoop提供了一種機制,管理員可以通過該機制使NodeManager定期執行管理員提供的指令碼,來確定節點是否健康執行。
管理員可以在指令碼中執行他們選擇的任何檢查來確定節點是否處於健康狀態。
如果指令碼檢測到節點處於不正常狀態,則它必須在標準輸出內輸出一行以error開頭的字串。
NodeManager定期生成指令碼並檢查其輸出。
如果指令碼的輸出包含字串ERROR,如上所述,節點的狀態被報告為非正常狀態,
並且該節點將被ResourceManager列為黑名單,並且不會為此節點分配任何其他任務。
但是,NodeManager會繼續執行指令碼,以便如果節點再次變得健康,
則會自動從ResourceManager上的黑名單節點中刪除。
管理員可以在ResourceManager Web-UI中檢查節點的健康狀況以及指令碼的輸出。
節點健康的時間也顯示在Web介面上。
在[yarn-site.xml]中的以下引數可用於控制節點執行狀況和監視指令碼。
yarn.nodemanager.health-checker.script.path
//節點健康指令碼。
yarn.nodemanager.health-checker.script.opts
//節點健康指令碼選項。
yarn.nodemanager.health-checker.interval-ms
//節點健康指令碼的執行間隔。
yarn.nodemanager.health-checker.script.timeout-ms
//節點健康指令碼的執行超時時間。
如果只有一些本地磁碟損壞,健康檢查指令碼不會給出ERROR。NodeManager能夠定期檢查本地磁碟的執行狀況(具體檢查nodemanager-local-dirs和nodemanager-log-dirs目錄),如果磁碟損壞達到閾值閾值(由yarn.nodemanager .disk-health-checker.min-healthy-disks設定),整個節點被標記為不健康狀態,此資訊也傳送到資源管理器。引導磁碟故障由健康檢查指令碼識別。
從屬檔案
列出您的[etc/hadoop/slaves]檔案中的所有從屬主機名或IP地址,每行一個。輔助指令碼(如下所述)將使用該檔案在列表主機上執行命令。它不用於任何基於Java的Hadoop配置。為了使用此功能,必須為用於執行Hadoop的帳戶建立ssh無祕登入(通過passphraseless ssh或某些其他方式,如Kerberos)。
Hadoop機架感知
許多Hadoop元件具有機架感知功能鞥,並可以利用網路拓撲來提升效能和安全性。Hadoop守護程式通過呼叫管理員配置的模組獲取叢集中從屬的機架資訊。有關更多具體資訊,請參閱機架意識文件。
在啟動HDFS之前,強烈建議配置機架感知。
參照
日誌配置
Hadoop使用Apache log4j通過Apache Commons Logging框架進行日誌記錄。編輯[etc/hadoop/log4j.properties]檔案可以自定義Hadoop守護程式的日誌記錄配置(日誌格式等)。
操作Hadoop叢集
一旦所有必要的配置完成,將檔案分發到所有機器上的HADOOP_CONF_DIR目錄。所有機器應上的該目錄應相同。
一般來說,建議HDFS和YARN以不同的使用者執行。在大多數安裝中,HDFS程序以“hdfs”執行。YARN通常使用“yarn”帳戶。
1.Hadoop啟動
要啟動Hadoop叢集,您將需要啟動HDFS和YARN叢集。
首次升級HDFS時,必須進行格式化。將新的分散式檔案系統格式化為hdfs:
$>hdfs namenode -format <cluster_name>
在指定的節點上使用以下命令啟動HDFS NameNode:
$>hadoop-daemon.sh --config ${HADOOP_CONF_DIR} --script hdfs start namenode
//$>hadoop-daemon.sh start namenode
在每個指定的節點上使用以下命令啟動HDFS DataNode:
$>hadoop-daemon.sh --config ${HADOOP_CONF_DIR} --script hdfs start datanode
//$>hadoop-daemon.sh start datanode
如果配置了slaves檔案和ssh無祕登入,則可以使用實用程式指令碼啟動所有HDFS程序:
$>start-dfs.sh
使用以下命令,在指定的ResourceManager為執行yarn:
$>yarn-daemon.sh --config ${HADOOP_CONF_DIR} start resourcemanager
//$>yarn-daemon.sh start resourcemanager
執行一個指令碼以在每個指定的主機上啟動一個NodeManager作為yarn:
$>yarn-daemons.sh --config ${HADOOP_CONF_DIR} start nodemanager
啟動獨立的WebAppProxy伺服器。
如果使用多個伺服器進行負載平衡,則應在每個伺服器上執行:
$>yarn-daemon.sh --config ${HADOOP_CONF_DIR} start proxyserver
如果配置了[slaves]和ssh無祕登入,所有的YARN程序都可以使用實用程式指令碼啟動:
$>start-yarn.sh
使用以下命令,在指定的伺服器上執行的MapReduce JobHistoryServer:
$>mr.jobhistory.daemon.sh --config ${HADOOP_CONF_DIR} start historyserver
一鍵啟動。。。
$>start-all.sh
2.Hadoop關機
使用以下命令停止NameNode,在指定的NameNode上執行:
$>hadoop-daemon.sh --config ${HADOOP_CONF_DIR} --script hdfs stop namenode
//$>hadoop-daemon.sh stop namenode
使用指令碼來停止DataNode:
$>hadoop-daemon.sh --config ${HADOOP_CONF_DIR} --script hdfs stop datanode
//$>hadoop-daemon.sh stop datanode
如果配置了[slaves]和ssh無祕登入,所有HDFS程序都可以使用程式指令碼停止:
$>stop-dfs.sh
停止使用下面的命令,在指定的ResourceManager執行:
$>yarn-daemon.sh --config ${HADOOP_CONF_DIR} stop resourcemanager
//yarn-daemon.sh stop resourcemanager
執行指令碼來停止從屬上的NodeManager:
$>yarn-daemon.sh --config ${HADOOP_CONF_DIR} stop nodemanager
//yarn-daemon.sh stop nodemanager
如果配置了[slave]和ssh無祕登入,所有的YARN程序都可以使用程式指令碼停止:
$>stop-yarn.sh
停止WebAppProxy伺服器。如果使用多個伺服器進行負載平衡,則應在每個伺服器上執行:
$>yarn-daemon.sh --config ${HADOOP_CONF_DIR} stop proxyserver
停止MapReduce JobHistory伺服器作:
$>mr-jobhistory-daemon.sh --config ${HADOOP_CONF_DIR} stop historyserver
一鍵停止。。。
$>stop-all.sh
Web介面
一旦Hadoop叢集啟動並執行,可以檢查元件的web-ui確定叢集執行情況:
備註
NameNode HTTP:預設HTTP埠為50070。
ResourceManager HTTP:預設HTTP埠為8088。
MapReduce JobHistoryServerHTTP:預設HTTP埠為19888。