【Hadoop】Hadoop ~ 基本編 / HDFS ~

■ はじめに

https://dk521123.hatenablog.com/entry/2019/09/15/100727

の続き。

HDFS があいまいだったので、こつこつまとめていく。
また、

https://dk521123.hatenablog.com/entry/2020/11/13/145545

でやった EMRFS の基礎になるので、勉強しておく。

目次

【0】前提知識:ファイルシステム
【1】HDFS (Hadoop Distributed File System)
【2】HDFS の構成
 1)Name Node (ネームノード)
 2)Data Node (データノード)
【3】レプリカ
【4】HDFS のメタデータ
 1)メタデータで管理している情報
 2)メタ情報のファイル
【5】hdfsコマンド
 1)hdfs hdfs dfsadmin -report (hadoop dfsadmin -report)
 2)hdfs fsck (hadoop fsck)
【6】設定値
 1)dfs.client.use.datanode.hostname

【0】前提知識:ファイルシステム

* HDDなどの物理ディスク内のデータを
 ファイルやディレクトリという扱いやすい単位で
 管理する仕組み
* 「ブロック」という最小単位で管理

* Windows であれば、「FAT32」「NTFS」
* Linux であれば、「ext2」など

【1】HDFS (Hadoop Distributed File System)

* Hadoop 分散ファイルシステム
* 複数のマシンを1つのストレージとして見せるファイルシステム
 => クラスタ上の複数マシンに、ファイルの実体を分散して配置

その他技術事項

* デフォルトのブロックサイズは、64KB

【2】HDFS の構成

* HDFS は、大きく分けて以下の構成図のように
  NameNode と DataNode で構成されている

構成図 (イメージ)

                      NameNode
                         |
   +-----------+---------+---------+---------+
   |           |         |         |         |
 DataNode  DataNode  DataNode  DataNode  DataNode

1)Name Node (ネームノード)

* どのデータがどの「Data Node」に格納されているかは、
 「Name Node」に格納されている
 => 後述「【4】HDFS のメタデータ」を参照 

2)Data Node (データノード)

* 一定の大きさ(64MB/128MB etc)に
 区切られた断片化されたデータが「Data Node」に格納されている  

【3】レプリカ

* クラスタモード(完全分散 ※1)の場合、
 耐障害性の観点から、ブロックごとにレプリカ(コピー)
 を別のデータノードに格納される

※1:モードには、他に「」がある。

その他技術事項

* レプリカの数は、[hdfs-site.xml]の「dfs.replication」
 => デフォルトは、「3」

【4】HDFSメタデータ

* 複数マシンに分散している訳なので、
 ファイルやディレクトリを管理する必要がある
 => ネームノードで、メタデータとして保持

1)メタデータで管理している情報

* ファイル名 or ディレクトリ名
* パーミッション
* 更新時刻
* アクセス時刻
* 親ディレクトリ

a) ファイルの場合

* レプリケーション設定数
* 推奨ブロックサイズ
* ブロックの配置情報

b) ディレクトリの場合

* ディレクトリ配下のファイルやディレクトリのリスト
* クォータ

2)メタ情報のファイル

a) メタファイル (fsimageファイル)

* メタ情報のスナップショットであるファイルシステムイメージファイル

b) 編集ログ (editsファイル)

* ファイルシステムに対する変更情報が記述されるファイル

【5】hdfsコマンド

参考文献
https://open-groove.net/hadoop/hdfs-operation-command/

1)hdfs hdfs dfsadmin -report (hadoop dfsadmin -report)

* レポート出力
 => 「Missing blocks: X」で、Xが1以上なら問題

コマンド例

hdfs hdfs dfsadmin -report
# hadoop dfsadmin -report でも同じ結果?

2)hdfs fsck (hadoop fsck)

cf. fsck = File System ChecK

コマンド例

hdfs fsck -list-corruptfileblocks

hdfs hdfs fsck / -blocks
hdfs hdfs fsck /user/mapred -blocks

# 壊れたブロック(ファイル)を削除
hdfs hdfs fsck / -delete

【6】設定値

1)dfs.client.use.datanode.hostname

* クライアントが、データノードへ接続する際に、ホスト名を使うかどうか
* default値:false

hdfs-site.xml

<property>
    <name>dfs.client.use.datanode.hostname</name>
    <value>true</value>
    <description>Whether clients should use datanode hostnames when
      connecting to datanodes.
    </description>
</property>

参考文献

https://open-groove.net/hadoop/hdfs-basic/
https://tagomoris.hatenablog.com/entry/20120216/1329370250

関連記事

Hadoop ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/09/15/100727
Hadoop ~ 基本編 / MapReduce
https://dk521123.hatenablog.com/entry/2022/05/02/000000
Amazon EMR ~ EMRFS ~
https://dk521123.hatenablog.com/entry/2020/11/13/145545
Hive / HiveQL ~ テーブル作成 ~
https://dk521123.hatenablog.com/entry/2020/11/03/000000