HDFS集羣安裝配置

一、概述

  HDFS集羣主要由NameNodeDataNodes組成,前者負責管理文件系統元數據,後者用於保存真正的數據。
  主要特性:
  1. 可使用商品級硬件(如普通PC)進行分佈式存儲和分佈式計算。高容錯、可擴展、易伸縮。
  2. 可根據不同的需求進行不同的配置。
  3. Hadoop使用Java編寫,支持各主流平臺。
  4. 支持使用類似shell命令與HDFS進行交互。
  5. NameNode和DataNodes集成在了web服務器中,可方便使用web查看集羣狀態。
  6. 其他特性:文件權限驗證、機架感知、安全模式、fsck等等。
  以下筆記由hadoop 2.7.2文檔而來。

二、Web界面

  默認的配置中,NameNode可通過http://namenode-name:50070/來訪問(其中的namenode-name是你自己配置的namenode主機名)。使用Web界面可以查看集羣狀態、瀏覽文件系統、查看DataNodes等。

三、Hadoop集羣安裝

  略,請參考文檔,或自行百度。

四、非安全模式下的Hadoop配置

1. 配置文件主要有兩種:

  • 只讀的默認配置 ——
    • 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

2. 控制Hadoop腳本行爲:

  • etc/hadoop/hadoop-env.sh
  • etc/hadoop/yarn-env.sh
  • etc/hadoop/mapred-env.sh

3. Hadoop後臺進程:

  • Hadoop後臺進程一般各自運行在獨立的主機上
  • HDFS後臺進程
    • NameNode, SecondaryNameNode, DataNode
  • YARN後臺進程
    • ResourceManager, NodeManager, WebAppProxy
  • MapReduce後臺進程(若有)
    • Job History Server

4. Hadoop後臺進程環境配置:

  • Hadoop進程的環境變量在以下3個腳本中設置

    • etc/hadoop/hadoop-env.sh
    • etc/hadoop/yarn-env.sh
    • etc/hadoop/mapred-env.sh
  • 各後臺進程的環境變量如下:

Daemon Environment Variable
NameNode HADOOP_NAMENODE_OPTS
DataNode HADOOP_DATANODE_OPTS
Secondary NameNode HADOOP_SECONDARYNAMENODE_OPTS
ResourceManager YARN_RESOURCEMANAGER_OPTS
NodeManager YARN_NODEMANAGER_OPTS
WebAppProxy YARN_PROXYSERVER_OPTS
MapReduce Job History Server HADOOP_JOB_HISTORYSERVER_OPTS

比如,對NameNode的設置可以如下:
export HADOOP_NAMENODE_OPTS=”-Xmx30720m -XX:+UseParallelGC -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS}”

5. Hadoop後臺進程配置:

  • etc/hadoop/core-site.xml
Parameter Value Notes
fs.defaultFS NameNode URI hdfs://主機名:端口/
io.file.buffer.size 131072 序列化文件的讀/寫緩存大小

  • etc/hadoop/hdfs-site.xml

    NameNode的配置

Parameter Value Notes
dfs.namenode.name.dir 本地文件系統上,NameNode保存命名空間和處理日誌的路徑 如果值指定爲用逗號分隔的目錄列表,命名錶會複製到所有目錄下做一個冗餘。
dfs.hosts /dfs.hosts.exclude 許可/拒絕的DataNodes列表 如果有需要的話,可以使用該屬性來指定哪些DataNodes可用/不可用。
dfs.blocksize 268435456 大型文件系統可指定HDFS的塊大小爲256MB
dfs.namenode.handler.count 100 指定有多少NameNode server線程來處理來自大量DataNodes的RPCs(遠程過程調用)

  DataNode的配置

Parameter Value Notes
dfs.datanode.data.dir 一個DataNode將其數據塊保存在本地文件系統上的指定路徑中,多個路徑使用逗號分隔 如果路徑有多個,那麼數據會保存在所有的目錄下。一般而言,多個路徑位於不同的device下。

  • etc/hadoop/yarn-site.xml
      ResourceManager和NodeManager共有的配置
Parameter Value Notes
yarn.acl.enable true/false 是否開啓ACLs,默認關閉
yarn.admin.acl Admin ACL ACL可設置集羣的管理員。 ACLs是用逗號分隔的用戶空間和用戶組。默認值爲* 表示任何人可以訪問。空白表示無人可訪問。
yarn.log-aggregation-enable false 設置是否允許日誌聚集

  ResourceManager的配置

Parameter Value Notes
yarn.resourcemanager.address ResourceManager 主機名:端口號。用戶向這裏提交作業。 如果設置了主機名:端口號,會覆蓋在 yarn.resourcemanager.hostname中設置的主機名
yarn.resourcemanager.scheduler.address ResourceManager host:port ApplicationMasters向這裏發出資源申請。 如果設置了主機名:端口號, 會覆蓋在 yarn.resourcemanager.hostnamez中設置的主機名
yarn.resourcemanager.resource-tracker.address ResourceManager host:port 供NodeManager使用 如果設置了主機名:端口號, 會覆蓋在 yarn.resourcemanager.hostnamez中設置的主機名
yarn.resourcemanager.admin.address ResourceManager host:port 供管理命令使用 如果設置了主機名:端口號, 會覆蓋在 yarn.resourcemanager.hostnamez中設置的主機名
yarn.resourcemanager.webapp.address ResourceManager web界面 host:port. 如果設置了主機名:端口號, 會覆蓋在 yarn.resourcemanager.hostnamez中設置的主機名
yarn.resourcemanager.hostname ResourceManager 主機. 單獨的主機名可以在所有yarn.resourcemanager*address 中設置。端口號是默認的。
yarn.resourcemanager.scheduler.class ResourceManager Scheduler class. CapacityScheduler (推薦), FairScheduler (推薦), or FifoScheduler
yarn.scheduler.minimum-allocation-mb 分配給Resource Manager容器最小內存。 單位是MB
yarn.scheduler.maximum-allocation-mb 分配給 Resource Manager容器的最大內存 單位是MB
yarn.resourcemanager.nodes.include-path/yarn.resourcemanager.nodes.exclude-path 許可/拒絕的NodeManager列表 If necessary, use these files to control the list of allowable NodeManagers.

  NodeManager的配置

Parameter Value Notes
yarn.nodemanager.resource.memory-mb NodeManager可用的屋裏內存 Defines total available resources on the NodeManager to be made available to running containers
yarn.nodemanager.vmem-pmem-ratio 任務使用的虛擬內存可超出物理內存的最大比率 The virtual memory usage of each task may exceed its physical memory limit by this ratio. The total amount of virtual memory used by tasks on the NodeManager may exceed its physical memory usage by this ratio.
yarn.nodemanager.local-dirs 中間結果寫入的本地文件系統路徑列表,用逗號隔開 Multiple paths help spread disk i/o.
yarn.nodemanager.log-dirs 日誌寫入的本地文件系統路徑列表,用逗號隔開 Multiple paths help spread disk i/o.
yarn.nodemanager.log.retain-seconds 10800 NodeManager保存日誌文件的默認時長(單位爲秒),僅適用於log-aggregation被關閉時。
yarn.nodemanager.remote-app-log-dir /logs 應用程序結束後,程序日誌移動到HDFS 上的相應目錄。需要設置轉移許可權限。僅適用於log-aggregation開啓時。
yarn.nodemanager.remote-app-log-dir-suffix logs 遠程日誌目錄後綴。日誌將被收集到${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}。僅適用於log-aggregation開啓時
yarn.nodemanager.aux-services mapreduce_shuffle MapReduce程序所需的Shuffle 服務

  History Server的配置

Parameter Value Notes
yarn.log-aggregation.retain-seconds -1 收集到的日誌保存多久。 -1 表示不保存。注意,如果該屬性值設置的太小,name node可能會收到垃圾信息。
yarn.log-aggregation.retain-check-interval-seconds -1 聚集日誌保存時間檢查間隔。如果設爲0或負值,值被解釋成聚集日誌保存時間的1/10。注意,如果該屬性值設置的太小,name node可能會收到垃圾信息。

  • 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 更大的數值有利於數據的高效排序
mapreduce.task.io.sort.factor 100 排序時,每次將合併更多的流
mapreduce.reduce.shuffle.parallelcopies 50 map輸出數據量較大時,該屬性可使reduce在抓取map結果時並行更多的拷貝

  MapReduce JobHistory的配置

Parameter Value Notes
mapreduce.jobhistory.address MapReduce JobHistory Server host:port Default port is 10020.
mapreduce.jobhistory.webapp.address MapReduce JobHistory Server Web UIhost:port Default port is 19888.
mapreduce.jobhistory.intermediate-done-dir /mr-history/tmp MapReduce作業將history文件寫入配置的目錄中
mapreduce.jobhistory.done-dir /mr-history/done MR JobHistory Server管理history文件的目錄

五、NodeManagers狀態監控

  管理員可以提供一個腳本讓NodeManager定期運行,檢測節點的狀態。如果腳本檢測出一個節點處於不健康狀態,必須向標準輸出打印一行以”ERROR”開頭的信息。NodeManager定期運行腳本並檢查腳本輸出。如果腳本的輸出包含字符串”ERROR”,將報告節點爲不健康狀態,並且ResourceManager會將該節點加入黑名單。以後的任務將不會在該幾點上運行。不過,如果在NodeManager之後的檢測中發現改節點又恢復健康狀態,則該節點又會從黑名單刪除。
  節點狀態監控腳本的控制參數在etc/hadoop/yarn-site.xml中:

Parameter Value Notes
yarn.nodemanager.health-checker.script.path 腳本路徑 Script to check for node’s health status.
yarn.nodemanager.health-checker.script.opts 腳本參數 Options for script to check for node’s health status.
yarn.nodemanager.health-checker.script.interval-ms 腳本運行間隔 Time interval for running health script.
yarn.nodemanager.health-checker.script.timeout-ms 腳本超時時間 Timeout for health script execution.

  如果僅僅是因爲磁盤出問題,監控腳本不應該打印”ERROR”。NodeManager具備定期檢測本地磁盤健康狀態的能力(特別是檢測nodemanager-local-dirs和nodemanager-log-dirs),一旦不健康的目錄數量達到屬性yarn.nodemanager.disk-health-checker.min-healthy-disks設定的閾值,整個節點就被標記爲不健康,並報告給ResourceManager。引導盤要麼做raid,要麼也納入腳本監控。

六、slaves文件

  etc/hadoop/slaves文件中列出了所有從節點的主機名或IP地址,每行一個。helper腳本會使用etc/hadoop/slaves文件同時在多臺主機上運行命令。這個功能的前提是配置了ssh信任關係(通過ssh免密碼登錄或其他方式,比如Kerberos認證)。

七、機架感知

  許多Hadoop組件都使用了機架感知,並且利用網絡拓撲來獲得性能和安全性的平衡。Hadoop守護進程通過調用管理員配置的模塊來獲取集羣上從節點的機架信息。詳情請參見 Rack Awareness。
  強烈建議啓動HDFS之前,先配置好機架感知。

八、日誌

  Hadoop使用 Apache log4j 來記錄日誌。可通過 etc/hadoop/log4j.properties 文件來定義Hadoop守護進程的日誌配置。

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