翻譯: 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文檔。
繼續閱讀:
- 復制Hadoop配置和設置選項
- 定制配置文件
- 配置本地存儲目錄
- 配置DataNode以允許本地存儲目錄失敗
- 格式化NameNode
- 配置遠程NameNode存儲目錄
- 配置Secondary NameNode
- 啟用垃圾箱
- 為DataNodes配置存儲平衡
- 啟用WebHDFS
- 配置LZO
- 啟動HDFS
- 部署YARN或MRv1
注意: 運行服務
使用service命令來啟動,停止和重新啟動CDH組件,而不是直接在/etc/init.d中運行腳本。
復制Hadoop配置和設置選項
要自定義Hadoop配置:
- 將默認配置復制到您的自定義目錄中:
$ sudo cp -r /etc/hadoop/conf.empty /etc/hadoop/conf.my_cluster
你可以任意調用這個配置; 在這個例子中,它被稱為my_cluster。
重要:
在執行本節中的配置任務時,以及在繼續部署MRv1或YARN時,編輯此自定義目錄中的配置文件。不要在默認目錄/etc/hadoop/conf.empty中創建自定義配置。
-
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使用的本地存儲目錄:
- 在NameNode主機上:創建 dfs.name.dir or dfs.namenode.name.dir 本地目錄:
$ sudo mkdir -p /data/1/dfs/nn /nfsmount/dfs/nn
重要:
如果您正在使用高可用性(HA),則不應將這些目錄配置為NFS掛載; 在本地存儲上配置它們。
- 在所有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
- 配置目錄的所有者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,請按以下步驟操作。
- 將運行Secondary NameNode的機器的名稱添加到masters 。
- 將以下屬性添加到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 盡可能。
注意:
- 要在安全集群中使用WebHDFS,您必須設置其他屬性來配置安全WebHDFS。有關說明,請參閱Cloudera Security指南。
- 在高可用性(HA)配置中使用WebHDFS時,必須在WebHDFS URI中提供dfs.nameservices值 ,而不是特定NameNode的地址; 例如:hdfs dfs -ls webhdfs://nameservice1/, 而不是 hdfs dfs -ls webhdfs://server1.myent.myco.com:20101/
配置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,請按以下步驟操作。
部署配置
要將您的配置部署到整個群集:
- 推送您的自定義目錄(例如/etc/hadoop/conf.my_cluster)添加到群集中的每個節點; 例如:
$ scp -r /etc/hadoop/conf.my_cluster myuser@myCDHnode-<n>.mycompany.com:/etc/hadoop/conf.my_cluster
-
手動設置 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服務(如果尚未完成),請參閱