集群部署HDFS

翻譯: https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_ig_hdfs_cluster_deploy.html#topic_11_2 
版本: 5.14.2

重要:

有關為NameNode配置高可用性(HA)的說明,請參閱HDFS高可用性。有關使用HDFS訪問控制列表(ACL)的說明,請參閱HDFS擴展ACL

按照以下步驟在群集上部署HDFS。對所有群集執行此操作,無論您是部署MRv1還是YARN:

重要:

  • 在不使用Cloudera Manager的系統上遵循這些命令行指示信息。
  • 此信息特別適用于CDH 5.14.X。有關其他版本的信息,請參閱Cloudera文檔

繼續閱讀:

  1. 復制Hadoop配置和設置選項
  2. 定制配置文件
  3. 配置本地存儲目錄
  4. 配置DataNode以允許本地存儲目錄失敗
  5. 格式化NameNode
  6. 配置遠程NameNode存儲目錄
  7. 配置Secondary NameNode
  8. 啟用垃圾箱
  9. 為DataNodes配置存儲平衡
  10. 啟用WebHDFS
  11. 配置LZO
  12. 啟動HDFS
  13. 部署YARN或MRv1

注意: 運行服務

使用service命令來啟動,停止和重新啟動CDH組件,而不是直接在/etc/init.d中運行腳本。

復制Hadoop配置和設置選項

要自定義Hadoop配置:

  1. 將默認配置復制到您的自定義目錄中:
$ sudo cp -r /etc/hadoop/conf.empty /etc/hadoop/conf.my_cluster

你可以任意調用這個配置; 在這個例子中,它被稱為my_cluster。
重要:
在執行本節中的配置任務時,以及在繼續部署MRv1或YARN時,編輯此自定義目錄中的配置文件。不要在默認目錄/etc/hadoop/conf.empty中創建自定義配置。

  1. CDH使用 alternatives 設置以確定要使用哪個Hadoop配置。使用alternatives 指向您的自定義目錄,如下所示。

    在RHEL兼容系統上手動設置配置:

$ sudo alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
$ sudo alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster

要在Ubuntu和SLES系統上手動設置配置,請執行以下操作:

$ sudo update-alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
$ sudo update-alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster

這告訴CDH使用/etc/hadoop/conf.my_cluster中的配置。

您可以顯示當前alternatives 設置如下。
要在RHEL兼容系統上顯示當前設置:
要顯示Ubuntu,Debian和SLES系統上的當前設置:
您應該看到以下輸出:

sudo alternatives --display hadoop-conf

sudo update-alternatives --display hadoop-conf

hadoop-conf - status is auto. 
link currently points to /etc/hadoop/conf.my_cluster
/etc/hadoop/conf.my_cluster - priority 50 
/etc/hadoop/conf.empty - priority 10 
Current `best' version is /etc/hadoop/conf.my_cluster. 

由于 /etc/hadoop/conf.my_cluster 配置的最高優先級(50),因此CDH將使用該優先級。有關替代方法的更多信息,請參閱alternatives(8)。

定制配置文件

下表顯示了必須為群集配置的最重要的屬性。

注意:

有關其他重要配置屬性和配置文件的信息,請參閱Apache Cluster Setup頁面。

屬性 配置文件 描述
fs.defaultFS core-site.xml 注意:fs.default.name已棄用。以hdfs://<namenode host>:<namenode port>/的形式指定NameNode和默認文件系統關系。默認值是file///。默認文件系統用于解析相對路徑; 例如,如果fs.default.name or fs.defaultFS被設定為 hdfs://mynamenode/,相對URI /mydir/myfile對應 hdfs://mynamenode/mydir/myfile。注意:為了使群集正常工作,<namenode>字符串必須是主機名(例如mynamenode)或啟用HA的邏輯URI,而不是IP地址。
dfs.permissions.superusergroup hdfs-site.xml 指定包含將被HDFS視為超級用戶的用戶的UNIX組。您可以使用'hadoop',或根據您的網站的安全策略選擇自己的組。

示例配置

核心-site.xml中:

<property>
 <name>fs.defaultFS</name>
 <value>hdfs://namenode-host.company.com:8020</value>
</property>

HDFS-site.xml中:

<property>
 <name>dfs.permissions.superusergroup</name>
 <value>hadoop</value>
</property>

配置本地存儲目錄

您需要指定,創建正確的權限并將其分配給希望HDFS守護程序存儲數據的本地目錄。您可以通過配置以下兩個屬性來指定目錄, 在hdfs-site.xml 文件。

屬性 配置文件位置 描述
dfs.name.dir or dfs.namenode.name.dir NameNode上 hdfs-site.xml 此屬性指定NameNode存儲其元數據和編輯日志的目錄的URI。Cloudera建議您至少指定兩個目錄。其中一個應位于NFS安裝點上,除非您將使用HDFS HA配置
dfs.data.dir or dfs.datanode.data.dir 每個datanode上的hdfs-site.xml 此屬性指定DataNode存儲塊所在目錄的URI。Cloudera建議您在JBOD配置中的DataNode上配置磁盤,掛載在 /data/1/ 到 /data/N, 并配置dfs.data.dir 或 dif.datanode.data.dir 的值從 file:///data/1/dfs/dn 到 file:///data/N/dfs/dn/ 。

注意:

dfs.data.dir and dfs.name.dir 已棄用; 你應該使用 dfs.datanode.data.dir and dfs.namenode.name.dirauto ,但他們仍其作用 。

示例配置:

NameNode上的hdfs-site.xml:

<property>
 <name>dfs.namenode.name.dir</name>
 <value>file:///data/1/dfs/nn,file:///nfsmount/dfs/nn</value>
</property>

每個DataNode上的hdfs-site.xml:

<property>
 <name>dfs.datanode.data.dir</name>
 <value>file:///data/1/dfs/dn,file:///data/2/dfs/dn,file:///data/3/dfs/dn,file:///data/4/dfs/dn</value>
</property>

在如上所示指定這些目錄之后,您必須創建目錄并為集群中每個節點上的目錄分配正確的文件權限。

在以下說明中,本地路徑示例用于表示Hadoop參數。更改路徑示例以匹配您的配置。

本地目錄:

  • dfs.name.dir or dfs.namenode.name.dir參數由 /data/1/dfs/nn and /nfsmount/dfs/nn 路徑示例。
  • dfs.data.dir or dfs.datanode.data.dir 參數由 /data/1/dfs/dn, /data/2/dfs/dn, /data/3/dfs/dn, and /data/4/dfs/dn 例。

配置HDFS使用的本地存儲目錄:

  1. 在NameNode主機上:創建 dfs.name.dir or dfs.namenode.name.dir 本地目錄:
$ sudo mkdir -p /data/1/dfs/nn /nfsmount/dfs/nn

重要:
如果您正在使用高可用性(HA)則不應將這些目錄配置為NFS掛載; 在本地存儲上配置它們。

  1. 在所有DataNode主機上:創建 dfs.data.dir or dfs.datanode.data.dir 本地目錄:
$ sudo mkdir -p /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn
  1. 配置目錄的所有者hdfs 用戶:
sudo chown -R hdfs:hdfs /data/1/dfs/nn /nfsmount/dfs/nn /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn

注意:
有關安裝CDH時創建的用戶列表,請參閱Hadoop用戶(用戶:組)和Kerberos主體

目錄 所有者 權限(Footnote1)
dfs.name.dir or dfs.namenode.name.dir ,dfs.data.dir or dfs.datanode.data.dir hdfs:hdfs drwx ------

以下是本地目錄的正確所有者和權限摘要:

目錄 所有者 權限(Footnote1)
dfs.name.dir or dfs.namenode.name.dir ,dfs.data.dir or dfs.datanode.data.dir hdfs:hdfs drwx ------

腳注: 1 Hadoop守護進程自動為您設置正確的權限<dfs.data.dir or dfs.datanode.data.dir 。但對于 dfs.name.dir or dfs.namenode.name.dir ,權限目前被錯誤地設置為drwxr-xr-x(755)。使用chmod 命令來重置這些權限drwx ------(700); 例如:

$ sudo chmod 700 /data/1/dfs/nn /nfsmount/dfs/nn
or
$ sudo chmod go-rx /data/1/dfs/nn /nfsmount/dfs/nn

注意:

如果你指定了不存在的目錄 dfs.data.dir or dfs.datanode.data.dir,CDH 5將關閉。(在以前的版本中,CDH默默地忽略不存在的目錄。)

配置DataNode以允許本地存儲目錄失敗

默認情況下,一個單一dfs.data.dir or dfs.datanode.data.dir 的失敗會導致HDFS DataNode進程關閉,將導致NameNode為DataNode上存在的每個塊調度額外的副本。這導致駐留在沒有失敗的磁盤上的塊的不必要的復制。

為了防止這種情況發生,您可以配置DataNode來容忍失敗; 使用 hdfs-site.xml配置文件中的 dfs.datanode.failed.volumes.tolerated 參數。例如,如果此參數的值為3,則DataNode只會在四個或更多數據目錄失敗后關閉。此值在DataNode啟動時讀取; 在這個例子中,只要不超過三個目錄失敗,DataNode就會重新啟動。

注意:

這很重要, dfs.datanode.failed.volumes.tolerated不能配置為容忍太多的目錄失敗,因為如果DataNode的功能數據目錄很少,DataNode的性能會很差。

格式化NameNode

首次啟動NameNode之前,您需要格式化文件系統。

重要:

  • 確保將NameNode格式化為用戶hdfs 。
  • 如果要重新設置NameNode的格式,請記住這會使DataNode存儲位置無效,因此應在NameNode格式化后刪除這些位置下的數據。
$ sudo -u hdfs hdfs namenode -format

注意:

如果啟用了Kerberos,請不要使用sudo -u <user> hadoop <command> 命令; 他們會因安全錯誤而失敗。相反,使用以下命令: $ kinit <user> (如果您使用密碼) $ kinit -kt <keytab> <principal> (如果你使用的是keytab),然后,對于該用戶執行$ <command> 。

你會得到一個確認提示; 例如:

Re-format filesystem in /data/namedir ? (Y or N)

注意:以大寫字母回應 ; 如果使用小寫字母,則該過程將中止。

配置遠程NameNode存儲目錄

您應該將NameNode配置為寫入多個存儲目錄,包括一個遠程NFS掛載。要在NFS服務器不可用時避免NameNode進程掛起,請將NFS掛載配置為soft mount(以便I / O請求超時失敗而不是掛起),并設置其他選項,如下所示:

tcp,soft,intr,timeo=10,retrans=10

這些選項配置TCP上的soft mount ; 交易將在1分鐘間隔(timeo=10)重試十次(retrans=10),之后才被視為失敗。

例:

mount -t nfs -o tcp,soft,intr,timeo=10,retrans=10, <server>:<export> <mount_point>

其中<server> 是遠程主機,<export> 是導出的文件系統, <mount_point>是本地掛載點。

注意:

Cloudera建議使用類似的共享HA安裝設置,如下例所示。

HA示例:

mount -t nfs -o tcp,soft,intr,timeo=50,retrans=12, <server>:<export> <mount_point>

請注意,在HA 中 timeo 應該設置為50(5秒),而不是10(1秒),并且 retrans 應該設置為12,總的超時時間為60秒。

有關更多信息,請參見手冊頁 mount and nfs。

配置遠程目錄恢復

您可以啟用 dfs.namenode.name.dir.restore 選項,以便NameNode在下一個檢查點恢復先前失敗的數據。這對于恢復由于網絡中斷或間歇性NFS故障而失敗的遠程存儲目錄裝載非常有用。

配置Secondary NameNode

重要:

Secondary NameNode不提供故障轉移或高可用性(HA)。如果您打算為NameNode配置HA,請跳過此部分:請勿安裝或配置Secondary NameNode(備用NameNode執行檢查點設置)。完成HA軟件配置后,請按照部署HDFS高可用性下的安裝說明進行操作。

在非HA部署中,配置一個Secondary NameNode,它將定期將EditLog與FSImage合并,創建一個新的FSImage,其中包含EditLog中的更改。這減少了NameNode上EditLog所占用的磁盤空間量,并且還減少了主NameNode的重啟時間。

標準Hadoop集群(不是Hadoop聯盟或HA配置)只能有一個主名稱節點和一個輔助名稱節點。在生產系統上,Secondary NameNode應該在與主NameNode不同的機器上運行,以提高可伸縮性(因為Secondary NameNode不會與NameNode競爭內存和其他資源來創建系統快照)和持久性(因為副本元數據位于獨立的機器上,如果NameNode硬件發生故障,則可用)。

在單獨的機器上配置Secondary NameNode

要在NameNode的另一臺機器上配置Secondary NameNode,請按以下步驟操作。

  1. 將運行Secondary NameNode的機器的名稱添加到masters 。
  2. 將以下屬性添加到hdfs-site.xml文件:
<property>
  <name>dfs.namenode.http-address</name>
  <value><namenode.host.address>:50070</value>
  <description>
    The address and the base port on which the dfs NameNode Web UI will listen.
  </description>
</property>

注意:

  • dfs.http.address 已棄用; 使用dfs.namenode.http-address.。
  • 在大多數情況下,你應該設置 dfs.namenode.http-address 轉換為具有端口50070的可路由IP地址。但是,在某些情況下(例如Amazon EC2),當NameNode應綁定到多個本地地址時,可能需要設置dfs.namenode.http-address 0.0.0.0:50070 僅在NameNode機器上,并將其設置為輔助NameNode計算機上的實際可路由地址。在這種情況下需要不同的地址,因為HDFS使用dfs.namenode.http地址 出于兩個不同的目的:它定義了NameNode綁定的地址和Secondary NameNode連接到檢查點的地址。運用 0.0.0.0 在NameNode上允許NameNode綁定到它的所有本地地址,而在Secondary NameNode上使用外部可路由地址則為Secondary NameNode提供了一個要連接的真實地址。

有關更多信息,請參閱多主機SecondaryNameNode配置

有關Secondary NameNode的更多信息

Secondary NameNode 參數 不翻

Secondary NameNode的行為由hdfs-site.xml中的以下參數控制。
dfs.namenode.checkpoint.check.period
dfs.namenode.checkpoint.txns
dfs.namenode.checkpoint.dir
dfs.namenode.checkpoint.edits.dir
dfs.namenode.num.checkpoints.retained

有關詳細信息,請參閱https://archive.cloudera.com/cdh5/cdh/5/hadoop/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

啟用垃圾箱

Hadoop垃圾功能有助于防止意外刪除文件和目錄。如果垃圾箱已啟用,并且使用Hadoop shell 刪除文件或目錄,則該文件將被移至Trash 目錄,而不是被刪除。刪除的文件最初移動到Trash的子目錄 Current ,并保留其原始路徑。如果垃圾檢查點已啟用,則Current 目錄將使用時間戳定期重命名。在用戶可配置的時間延遲后被永久刪除。只需將垃圾箱中的文件和目錄移動到垃圾箱外的某個位置即可恢復。

重要:

  • 垃圾箱功能默認為禁用。Cloudera建議您在所有生產群集上啟用它。

  • 垃圾功能默認只適用于使用Hadoop shell 刪除的文件和目錄。使用其他接口(例如WebHDFS或Java API)以編程方式刪除的文件或目錄不會移動到垃圾箱,即使已啟用垃圾箱,除非程序已實施對垃圾箱功能的調用。(例如,Hue自CDH 4.4開始實施垃圾。)

  • 用戶可以在使用shell刪除文件時使用選項-skipTrash 繞過垃圾箱。當需要刪除對用戶配額來說太大的文件時,這會很有用。

在配置文件 core-site.xml中可配置的相關屬性如下:

CDH參數 描述
fs.trash.interval minutes or 0 文件刪除后檢查點檢查的時間間隔。該選項可以在服務器和客戶端上配置。* 如果在服務器配置上啟用垃圾箱,則將使用服務器上配置的值,并忽略客戶端配置。* 如果垃圾箱在服務器配置中被禁用,則檢查客戶端配置。* 如果此屬性的值為零(默認值),則垃圾箱功能將被禁用。
fs.trash.checkpoint.interval minutes or 0 垃圾檢查點間隔的分鐘數。每次檢查點在NameNode上運行時,它都會創建一個“Current”目錄,并刪除比fs.trash.interval 分鐘大的目錄。該值應該小于或等于fs.trash.interval 。該選項在服務器上配置。如果配置為零(默認值),則該值設置為fs.trash.interval的值。

例如,啟用垃圾桶,使用Hadoop shell刪除的文件在24小時內不被刪除,在core-site.xml文件中設置 fs.trash.interval值為1440 。
注意:
文件保留在垃圾箱中的時間段是在文件移動到垃圾箱時開始的,而不是文件的上次修改時間。

為DataNodes配置存儲平衡

您可以為HDFS配置寫入平衡,以平衡DataNode磁盤卷中可用存儲的方式來分配每個DataNode的寫入。

默認情況下,DataNode基于round-robin方式寫入block副本。您可以配置一個卷選擇策略,該策略會導致DataNode在決定放置新副本的位置時考慮每個卷上有多少可用空間。

你可以配置

  • DataNode的各卷的可用磁盤空間差別多大時認為是不平衡的,
  • 為某個卷分配新block會比分配給其他卷帶來更高的可用磁盤空間。

要配置存儲平衡,請在hdfs-site.xml中設置以下屬性。
注意:請記住,如果在啟用存儲平衡時,如果給定DataNode的存儲卷之間的使用率顯著不平衡,則該數據節點上的吞吐量最初將受到影響,因為寫入不成比例地指向未充分利用的卷。

屬性 描述
dfs.datanode. fsdataset. volume.choosing. policy org.apache.hadoop. hdfs.server.datanode. fsdataset. AvailableSpaceVolumeChoosingPolicy 啟用DataNode卷之間的存儲平衡。
dfs.datanode. available-space- volume-choosing- policy.balanced-space-threshold 10737418240(默認) 磁盤空間被視為不平衡時,磁盤空間的容量相差數量。默認值為10737418240(10 GB)。如果每個卷上的可用空間都在這個范圍內,則這些卷將被視為平衡,并且塊分配將在round-robin基礎上完成。
dfs.datanode. available-space- volume-choosing- policy.balanced- space-preference- fraction 0.75(默認) 新塊分配發送給某卷比其他券能獲得更多的可用空間。允許范圍為0.0-1.0,但將其設置在0.5 - 1.0(即50-100%)的范圍內,因為應該沒有理由偏好具有較少可用磁盤空間的卷接收更多塊分配。

啟用WebHDFS

注意:

若要改為配置HttpFs,請參閱HttpFS安裝

如果你想使用WebHDFS,你必須先啟用它。

啟用WebHDFS:

在hdfs-site.xml下面設置屬性:

<property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
</property>

在WebHDFS中啟用數字用戶名:

默認情況下,WebHDFS支持以下用戶名模式:

^[A-Za-z_][A-Za-z0-9._-]*[$]?$

您可以通過設置dfs.webhdfs.user.provider.user.pattern來覆蓋默認的用戶名模式 。例如,要允許數字用戶名,該屬性可以設置如下:

<property>
  <name>dfs.webhdfs.user.provider.user.pattern</name>
  <value>^[A-Za-z0-9_][A-Za-z0-9._-]*[$]?$</value>
</property>

重要提示:用戶名模式應符合所用操作系統的要求。因此,Cloudera建議您使用默認模式并避免修改dfs.webhdfs.user.provider.user.pattern 盡可能。

注意:

配置LZO

如果您安裝了LZO,請按照以下方式進行配置。

配置LZO:

在core-site.xml下面設置屬性。注意:

如果復制并粘貼value 字符串,請確保刪除由于頁面寬度約束而在下面包含的換行符和回車符。

<property>
  <name>io.compression.codecs</name>
  <value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.SnappyCodec</value>
</property>

有關LZO的更多信息,請參閱使用LZO壓縮

啟動HDFS

現在要部署HDFS,請按以下步驟操作。

  1. 部署配置
  2. 啟動HDFS
  3. 創建/ tmp目錄

部署配置

要將您的配置部署到整個群集:

  1. 推送您的自定義目錄(例如/etc/hadoop/conf.my_cluster)添加到群集中的每個節點; 例如:
$ scp -r /etc/hadoop/conf.my_cluster myuser@myCDHnode-<n>.mycompany.com:/etc/hadoop/conf.my_cluster
  1. 手動設置 alternatives 在每個節點上指向該目錄,如下所示。

    在RHEL兼容系統上手動設置配置:

$ sudo alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
$ sudo alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster

要在Ubuntu和SLES系統上手動設置配置,請執行以下操作:

$ sudo update-alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
$ sudo update-alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster

有關替代方法的更多信息,請參閱alternatives(8)。

啟動HDFS

在集群中的每個節點上啟動HDFS,如下所示:

for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done

注意:

這將啟動節點上安裝的所有CDH服務。這通常是你想要的,但如果你愿意,你可以單獨開始服務。

創建/ tmp目錄

重要:

如果你不創建正確地/tmp ,稍后您可能會遇到CDH組件的問題。具體來說,如果你不創建/tmp,另一個進程可能會自動創建限制性權限,這會阻止其他應用程序使用它。

在HDFS啟動并運行后創建/tmp 目錄,并將其權限設置為1777(drwxrwxrwt), 如下:

$ sudo -u hdfs hadoop fs -mkdir /tmp
$ sudo -u hdfs hadoop fs -chmod -R 1777 /tmp

部署YARN或MRv1

要部署MRv1或YARN,并啟動HDFS服務(如果尚未完成),請參閱

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、系統參數配置優化 1、系統內核參數優化配置 修改文件/etc/sysctl.conf,添加如下配置,然后執行s...
    張偉科閱讀 3,792評論 0 14
  • 翻譯: https://www.cloudera.com/documentation/enterprise/lat...
    金剛_30bf閱讀 2,697評論 1 1
  • 首先,我們在使用前先看看HDFS是什麼?這將有助于我們是以后的運維使用和故障排除思路的獲得。 HDFS采用mast...
    W_Bousquet閱讀 4,240評論 0 2
  • (圖文綜合自網絡) 有一個男的,沒考上大學,父母就給他找了個老婆結婚了,結婚后就在本村的小學教書。 由于沒有經驗,...
    微思語閱讀 14,744評論 0 0
  • 人無完人,對人寬容就是對自己寬容,善待他人就是善待自己。 伊蘭是一家公司的高管,她能走到今天,除了一點所謂的天賦以...
    沈姐說說閱讀 3,456評論 6 6