1. 程式人生 > >Hadoop常用操作

Hadoop常用操作

Hadoop常用操作

1、Hadoop安裝

2、Hadoop配置

3、Hadoop多目錄配置

namenode和datanode節點下都可以進行多個目錄的配置,但是意義不同。namenode的多目錄配置是副本策略,保證資料可靠性,datanode多目錄配置是對容量進行擴容,由於datanode已經有副本機制了。

[hdfs-site.xml]

<!-- namenode多目錄配置 -->
<property>
  <name>dfs.namenode.name.dir</name>
  <value>file://${hadoop.tmp.dir}/dfs/name1,file://${hadoop.tmp.dir}/dfs/name2</value>
</property>
<!-- datanode多目錄配置 -->
<property>
  <name>dfs.datanode.data.dir</name>
  <value>file://${hadoop.tmp.dir}/dfs/data1,file://${hadoop.tmp.dir}/dfs/data2</value>
</property>

其中${hadoop.tmp.dir}是hadoop臨時目錄配置。

[core-site.xml]

<property>
  <name>hadoop.tmp.dir</name>
  <value>/home/centos/hadoop/ha</value>
</property>

4、hadoop配額管理

配額是對空間和目錄個數進行限制,放置目錄下的檔案個數或大小過於龐大。因此配額分為空間配額和目錄配額。

  • 目錄配額

    限制目錄所含檔案或資料夾的個數。如果為1,則保持目錄為空(可以認為將目錄本身也包含在內)。

    #設定配額
    $>hdfs dfsadmin -setQuota 1 data
    #清除配額
    $>hdfs dfsadmin -clsQuota data

  • 空間配額

    由於每份檔案都有三個副本,空間配額計算時也將副本數計算在內,加上每個資料塊檔案預設為128m,因此空間配額至少要指定384m的空間值。即128 * 3 = 384。

    #該設定會出錯,說至少是384m空間
    $>hdfs dfsadmin -setSpaceQuota 384m data

5、快照

快照是對hdfs的目錄進行瞬間照相,內部採用差異化儲存機制。因此不會空間造成大量的消耗。這可以通過檢視blockid來考察。預設情況下目錄是不允許快照的,因此如果要使用該功能,還需要對特定目錄先啟用快照。

#啟用快照
$>hfds dfsadmin -allowSnapshot data
#禁用快照
$>hfds dfsadmin -disallowSnapshot data

#建立快照
$>hdfs dfs -createSnapshot data sp1
#刪除
$>hdfs dfs -deleteSnapshot data sp1
#重新命名
$>hdfs dfs -renameSnapshot data sp1 sp2

注意:刪除目錄時,如果是可快照目錄並且有快照,需要先刪除快照,再刪除目錄。

6、元資料管理

6.1 映象檔案檢視

映象檔案存放的是hdfs的元資料,是最重要的資料檔案。可以通過多種格式進行檢視。內容包括目錄、許可權、配額、資料塊等資訊。

#i:input o:output p:處理方式
$>hdfs oiv -i fsimage_0000000000000207400 -o ~/1.xml -p XML

6.2 編輯日誌檢視

對hdfs的每個寫操作都會記錄到編輯日誌中,檢視方式同映象類似。

$>hdfs oev -i edits_0000000000000200088-00000000000002000199 -o 2.xml -p XML

6.3 映象控制

2nn節點對nn節點會進行週期性檢查,以完成元資料的備份與融合。具體可以通過以下屬性進行控制:

  1. dfs.namenode.checkpoint.period

    檢查週期,多長時間生成一次新的檢查點,預設為3600秒,即1小時。

  2. dfs.namenode.checkpoint.txns

    操作記錄數控制,預設1000,000,發生這些次操作也會生成新的檢查點,即時時間不到1小時。

  3. dfs.namenode.checkpoint.check.period

    <property>
      <name>dfs.namenode.checkpoint.check.period</name>
      <value>60</value>
      <description>The SecondaryNameNode and CheckpointNode will poll the NameNode
        every 'dfs.namenode.checkpoint.check.period' seconds to query the number
        of uncheckpointed transactions.
      </description>
    </property>

  4. dfs.namenode.num.checkpoints.retained

    <property>
      <name>dfs.namenode.num.checkpoints.retained</name>
      <value>2</value>
      <description>The number of image checkpoint files (fsimage_*) that will be retained by
        the NameNode and Secondary NameNode in their storage directories. All edit
        logs (stored on edits_* files) necessary to recover an up-to-date namespace from the oldest retained
        checkpoint will also be retained.
      </description>
    </property>

7、舊節點下線操作

7.1 介紹

舊節點下線操作,需要通過黑白名單進行控制。下線時主要完成舊節點資料的安全轉移。成功後,就可以安全下線了。hdfs的黑白名單由dfs.hosts.exclude和dfs.hosts控制,yarn的黑白名單由yarn.resourcemanager.nodes.exclude-path和yarn.resourcemanager.nodes.include-path控制。

  • dfs.hosts

    白名單,可以連到namenode的datanode節點列表。

  • dfs.hosts.exclude

    黑名單,不允許連線到namenode的datanode節點列表。

黑白名單組合規則:

dfs.hosts dfs.hosts.exclude 結果
NO NO Not
NO YES Not
YES NO YES
YES YES YES並將退役

7.2 HDFS舊節點下線操作

  1. 準備黑白名單

    • dfs_exclude.conf
    • dfs_include.conf
  2. 配置hdfs-site.xml的黑白名單屬性

    [hdfs-site.xml]

    <!-- 白名單 -->
    <property>
      <name>dfs.hosts</name>
      <value>/soft/hadoop/etc/full/dfs_include.conf</value>
    </property>
    <!-- 黑名單 -->
    <property>
      <name>dfs.hosts.exclude</name>
      <value>/soft/hadoop/etc/full/dfs_exclude.conf</value>
    </property>

  3. 新增退役節點地址到黑名單,不要更新白名單

    [dfs_exclude.conf]

    s102

  4. 重新整理nn

    $>hdfs dfsadmin -refreshNodes
  5. 進入webui,檢視退役的節點是否顯式為"退役中",開始複製資料塊到其他節點。

    http://s101:50070/
  6. 一旦複製完成,狀態顯式"Decommissioned",停止退役節點

  7. 從白名單中刪除退役節點

  8. 再次重新整理節點

    $>hdfs dfsadmin -refreshNodes
  9. 從slaves中刪除退役節點

8、HDFS新節點上線

新節點上線時,需要先配置ssh和hadoop軟體包。上線實操過程如下:

  1. 配置新節點ssh和安裝hadoop軟體包以及配置環境變數

  2. 新增新地址到白名單

  3. 重新整理名稱節點

    $>hdfs dfsadmin -refreshNodes
  4. 更新slaves檔案

  5. 單獨啟動新節點的datanode程序

    $>hadoop-daemon.sh start datanode
  6. 檢查webui

9、YARN舊節點下線

  1. 準備黑白名單

    yarn_exclude.conf

    yarn_include.conf

  2. 配置yarn-site.xml的黑白名單屬性

    [yarn-site.xml]

    <!-- yarn白名單 -->
    <property>
      <name>yarn.resourcemanager.nodes.include-path</name>
      <value>/soft/hadoop/etc/full/yarn_include.conf</value>
    </property>
    <!-- yarn黑名單 -->
    <property>
      <name>yarn.resourcemanager.nodes.exclude-path</name>
      <value>/soft/hadoop/etc/full/yarn_exclude.conf</value>
    </property>
  3. 新增退役節點地址到黑名單,不要更新白名單

    [yarn-exclude.conf]

    s102

  4. 重新整理yarn

    $>yarn rmadmin -refreshNodes
  5. 進入webui,檢視退役的節點是否顯式為"退役中",開始複製資料塊到其他節點。

    http://rm:8088/
  6. 一旦複製完成,狀態顯式"Decommissioned",停止退役節點

  7. 從白名單中刪除退役節點

  8. 再次重新整理節點

    $>yarn rmadmin -refreshNodes
  9. 從slaves中刪除退役節點