■ はじめに
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
<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