1ファイルシステム
- ファイルへのアクセスとクエリを容易にする、データの保存と整理の方法です。
- ファイルとツリー ディレクトリの抽象的な論理概念は、ディスクなどの物理デバイスで使用されるデータ ブロックの概念を置き換えます。ファイル システムを使用してデータを保存するユーザーは、基礎となるデータがハード ディスク上のどこに保存されているかを気にする必要はありません。ファイルのディレクトリとファイル名だけを覚えておく必要があります。
- ファイル システムは通常、ディスクや光ディスクなどのストレージ デバイスを使用し、デバイス上のファイルの物理的な場所を維持します。
- ファイル システムは、データの保存、階層構造、アクセス、取得などの操作を実装する一連の抽象データ型です。
ファイル名
DOS オペレーティング システムでは、ファイル名は、ファイルのメイン名と拡張子が小さなドットで区切られて構成されます。
ファイル名は、保存場所を特定したり、さまざまなファイルを区別したりするために使用でき、コンピュータは名前によるアクセスを実装します。
特定の記号には特別な意味があり、通常はファイル名に使用することは許可されません。
メタデータ
メタデータ(metadata)は説明データとも呼ばれ、データを記録するデータ
ファイル システムのメタデータは通常、ファイル サイズ、最終変更時刻、基礎となるストレージの場所、属性、ユーザー、アクセス許可などの情報を指します。
ファイルシステムの分類
- ディスクベースのファイルシステム
これは、ドキュメントを不揮発性メディア (ディスク、光ディスク) に保存する古典的な方法です。セッション間でファイルの内容を保持するために使用されます。ext2/3/4、xfs、ntfs、iso9660、その他のよく知られたファイル システムが含まれます。Linux システムでは df -Th を使用して表示できます
- 仮想ファイルシステム
procなどのカーネル内で生成されるファイルシステム
proc ファイル システムは、Linux カーネル空間とユーザー間の新しい通信方法を可能にする仮想ファイル システムです。
- ネットワークファイルシステム
ネットワーク ファイル システム (NFS、ネットワーク ファイル システム) は、リモート ホスト上のパーティション (ディレクトリ) をネットワーク経由でローカル システムにマウントするメカニズムです。
ローカル コンピュータが別のコンピュータ上のデータにアクセスできるようにします。このようなファイル システム内のファイルに対する操作は、ネットワーク接続を介して実行されます。
2 分散ファイルシステム HDFS
2.1 HDFS の概要
- HDFS (Hadoop 分散ファイル システム) Hadoop 分散ファイル システム。これは、Apache Hadoop のコア コンポーネントの 1 つであり、ビッグ データ エコシステムの最下位レベルの分散ストレージ サービスとして存在します。
- 分散ファイル システムは、ビッグ データをどのように保存するかという問題を解決します。分散とは、複数のコンピュータにまたがるストレージ システムを意味します。
- HDFS は、共通のハードウェア上で実行できる分散ファイル システムです。耐障害性が高く、大規模なデータ セットを扱うアプリケーションに適しています。大規模なデータ (TB PB など) の保存に非常に適しています。
- HDFS は複数のコンピュータを使用してファイルを保存し、通常のファイル システムにアクセスするのと同じように分散ファイル システムを使用して統合アクセス インターフェイスを提供します。
2.2 HDFS の設計目標
- **ハードウェア障害**はよくあることです。HDFS は数百または数千のサーバーで構成されており、各コンポーネントに障害が発生する可能性があります。したがって、障害検出と自動高速リカバリが HDFS の中心となるアーキテクチャ目標です。
- HDFS 上のアプリケーションは主にストリーミング データ アクセス (ストリーミング データ アクセス)を使用します。HDFS は、ユーザー対話型ではなく、バッチ処理用に設計されています。データ アクセスの応答時間と比較して、データ アクセスの高スループットが重視されます。
- 一般的な HDFS ファイル サイズの範囲は GB ~ TB です。すべて、HDFS は大規模なデータ セットをサポートするように調整されています。高い総データ帯域幅を提供し、クラスター内の数百のノードをサポートし、クラスター内の数千万のファイルをサポートする必要があります。
- ほとんどの HDFS アプリケーションでは、ファイルに対して書き込み1 回読み取り複数回のアクセス モデル (1 回の書き込みと何度も読み取り) が必要です。ファイルを作成、書き込み、閉じたら、変更する必要はありません。この仮定により、データの一貫性の問題が単純化され、高スループットのデータ アクセスが可能になります。
- モバイル コンピューティングは、データの移動よりも安価です。アプリケーションによって要求される計算は、アプリケーションが操作するデータに近づくほど効率的になります。データをアプリケーションの場所に移動するよりも、計算をデータの添付ファイルに移動する方が明らかに優れています。
- HDFS は、あるプラットフォームから別のプラットフォームに簡単に移植できるように設計されています。これにより、多数のアプリケーションのプラットフォームとして HDFS が広く使用されるようになります。
2.3 HDFS アプリケーションのシナリオ
該当シーン
大きなファイル
データストリーミングアクセス
一度書いて何度も読む
低コスト導入、安価な PC
高い耐障害性
該当しないシナリオ
小さなファイル
データの対話型アクセス
頻繁かつ恣意的な変更
低遅延処理
2.4 HDFS の重要な機能
1. マスタースレーブアーキテクチャ
HDFS はマスター/スレーブ アーキテクチャを採用しています。一般に、HDFS クラスターは、NameNode と特定の数の DataNode で構成されます。
NameNode は HDFS マスター ノード、DataNode は HDFS スレーブ ノードです。どちらの役割も独自の役割を実行し、分散ファイル ストレージ サービスを完了するために調整します。
2. ブロックストレージの仕組み
HDFS 内のファイルは物理的にブロック (ブロック) に格納されます。ブロックのサイズは、 hdfs-default.xml にある構成パラメーターによって決まりますdfs.blocksize
。デフォルトのサイズは 128M (134217728)
3. コピー機構
ファイルのすべてのブロックがコピーされます。各ファイルのブロック サイズ (dfs.blocksize) とレプリケーション係数 (dfs.replication) は構成可能です。コピー係数は、ファイルの作成時に指定することも、後でコマンドを使用して変更することもできます。
dfs.replication のデフォルト値は 3 です。これは、2 つの追加コピーとそれ自体の合計 3 つのコピーを意味します。
4、名前空間
HDFS は、従来の階層ファイル編成構造をサポートします。ユーザーはディレクトリを作成し、これらのディレクトリにファイルを保存できます。ファイル システムの名前空間階層は、ほとんどの既存のファイル システムの階層と似ており、ユーザーはファイルを作成、削除、移動、または名前変更できます。
NameNode は、ファイル システムの名前空間ネームスペースを維持する責任を負い、ファイル システムの名前空間または属性に対する変更は、NameNode によって記録されます。
HDFS はクライアントに統合された抽象ディレクトリ ツリーを提供し、クライアントはファイルにアクセスするためのパスを提供します。
形式例:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data
5. メタデータ管理
HDFS では、NameNode によって管理される 2 種類のメタデータがあります。
- ファイル自身の属性情報
ファイル名、権限、変更時刻、ファイルサイズ、レプリケーション係数、データブロックサイズ
- ファイルブロックの位置マッピング情報
ブロックとデータノード間のマッピング情報、つまりどのブロックがどのノードに配置されているかを記録します。
6. データブロックストレージ
ファイルの各ブロックの特定のストレージ管理は、DataNode ノードによって行われます。各ブロックは複数のデータノードに保存できます。
7. HDFS ブロック サイズ
HDFS 内のファイルは物理的にブロック (Block) に保存されます。ブロック サイズは構成パラメータ (dfs.blocksize) で設定できます。デフォルトのサイズは、Hadoop2.x/3.x バージョンでは 128M、3.x バージョンでは 64M です。
例えば:
シーク時間が 10ms の場合、送信時間 = 10ms/0.01=1s (アドレッシング時間は送信時間の 1% が最適です)、現在のディスク転送速度が 100MB/s の場合、ブロック サイズ = 1s * 100MB /s = 100MB、すべてのブロック サイズを 128M に設定するのがより適切です
- HDFS のブロック設定が小さすぎるため、シーク時間が長くなり(シーク時間は送信時間よりも長くなります)、プログラムは常にブロックの開始位置を検索します。
- HDFS のブロック設定が大きすぎると、ディスクからデータを転送する時間が、ブロックの開始位置を見つけるのに必要な時間よりも大幅に長くなり(転送時間はシーク時間よりもはるかに長くなります)、データの処理が非常に遅くなります。
- 最適な状態は、アドレス指定時間と送信時間の比率が 1% のときです
- HDFS のブロック サイズ設定は主にディスク転送速度に依存します。
3 HDFS シェル CLI
Hadoop はファイル システム用のシェル コマンド ライン クライアントを提供しており、使用方法は次のとおりです。
hdfs [options] subcommand [subcommand options]
subcommand: admin commands / client command / daemon commands
ファイルシステムの読み書きに関連するコマンドは、hdfs dfs [汎用オプション]です。
- HDFS シェル CLI は、ローカル ファイル システム (file:)、分散ファイル システム (hdfs://nn:8020) などを含む複数のファイル システムの操作をサポートします。
- どのファイル システムが操作されるかは、URL のプレフィックス プロトコルによって決まります。
- プレフィックスが指定されていない場合は、環境変数のfs.defaultFS 属性が読み取られ、この属性値がデフォルトのファイル システムとして使用されます。
hdfs dfs -ls file:/// # 操作本地文件系统(客户端所在的机器)
hdfs dfs -ls hdfs://node1:8020/ # 操作HDFS分布式文件系统
hdfs dfs -ls / # 直接跟目录,没有指定协议,将加载读取fs.defaultFS属性默认值
3.1 HDFS シェル CLI クライアント
Hadoop dfs、hdfs dfs、hadoop fs の違い
- hadoop dfs は HDFS ファイル システム (ローカル FS での操作を含む) のみを操作できますが、非推奨になりました
- hdfs dfs は、一般的に使用されるHDFS ファイル システム (ローカル FS での操作を含む) のみを操作できます。
- hadoop fs は任意のオペレーティング システムで動作できます (hdfs ファイル システムだけでなく、より広範囲のアプリケーションがあります)
現在のバージョンでは、Hadoop fsの使用を公式に推奨しています。
3.2 HDFS シェルの共通コマンド
-mkdir ディレクトリを作成します
hadoop fs -mkdir [-p] <path>
# path 为待创建目录
# -p 表示沿着路径创建父目录
-ls 指定されたディレクトリの内容を表示します
hadoop fs -ls [-h] [-R] [<path> ... ]
# path 指定目录路径
# -h 人性化显示文件size
# -R 递归查看指定目录及其子目录
-アップロードファイルを指定されたディレクトリに置きます
hadoop fs -put [-f] [-p] <localsrc>... <dst>
# -f 覆盖目录文件(如果目标文件存在,则覆盖)
# -p 保留访问和修改时间,所有权和权限
# localsrc 本地文件系统(客户端所在机器)
# dst 目标文件系统(HDFS)
-copyFromLocal はファイルをローカル ファイル システムから HDFS にコピーします。
(put と同じ。put を使用するのが慣例です)
hadoop fs -copyFromLocal <localsrc>... <dst>
-moveFromLocal はローカル ファイル システム ファイルを HDFS にカットします
(つまり、ファイルをローカルから HDFS に切り取ります)
hadoop fs -moveFromLocal <localsrc>... <dst>
# 和-put功能相似,只不过上传结束会删除源数据
-appendToFile はファイルを既存のファイルに追加します
hadoop fs -appendToFile <localsrc> ... <dst>
-cat\-head\-tail HDFS ファイルの内容を表示する
hadoop fs -cat <src> ...
# 对于大文件内容读取,慎重
hadoop fs -head <file>
# 查看文件前1kB的内容
hadoop fs -tail [-f] <file>
# 查看文件最后1kB的内容
# -f 选择可以动态显示文件中追加的内容
-get\coptToLocal\-getmerge HDFS ファイルをダウンロードする
(HDFS からローカルにファイルをコピー)
hadoop fs -get [-f] [-p] <src>... <localdst>
# 下载文件至本地文件系统指定目录,localdst必须是目录
# -f 覆盖目标文件(如果本地文件系统存在该文件,则覆盖)
# -p 保留访问和修改时间,所有权和权限
hadoop fs -copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>
# 等同于get,习惯上使用get
hadoop fs -getmerge [-n1] [-skip-empty-file] <src> <localdst>
# 下载多个文件合并到本地文件系统的一个文件中
# -n1 表示在每个文件的末尾添加换行符
-cp HDFS ファイルをコピーします
hadoop fs -cp [-f] <src> ... <dst>
# -f 覆盖目标文件(若目标文件存在,则覆盖)
-appendToFile はデータを HDFS ファイルに追加します
hadoop fs -appendToFile <localsrc>... <dst>
# 将所给给定的本地文件的内容追加到给定的dst文件
# 若dst文件不存在,将创建文件
# 如果<localsrc>为-,则输入为从标准输入中读取
-df HDFS ディスク容量を表示します
hadoop fs -df [-h] [<path>...]
# 显示文件系统的容量,可以空间和已用空间
-du HDFS ファイルによって使用されているスペースの量を表示します。
hadoop fs -du [-s] [-h] <path>...
# -s 表示显示指定路径文件长度的汇总摘要,而部署单个文件的摘要
# -h 表示人性化显示
-mvHDFS データの移動
hadoop fs -mv <src> ... <dst>
# 移动文件至指定文件夹
# 可以使用该命令移动数据、重命名文件
-rm -r ファイル/フォルダーを削除します
hadoop fs -rm -r 路径
# -r 表示递归
-setrep は HDFS ファイルのコピー数を変更します
hadoop fs -setrep [-R] [-w] <rep> <path>...
# 修改指定文件的副本个数
# -R 表示递归,修改文件夹及其下所有
# -w 客户端是否等待副本修改完毕
例証します:
ここで設定したレプリカの数はNameNodeのメタデータに記録されるだけで、実際にそんなに多くのレプリカが存在するかはDataNodeの数に依存します。現在デバイスが 3 台しかないため、レプリカは最大でも 3 つしかありません。ノード数が 10 に増加した場合にのみ、レプリカの数が 10 に達します。
-chgrp\-chmod\-chown ファイル権限を変更する
-chgrp、-chmod、-chown: Linux ファイル システムでの同じ使用法
hadoop fs -chmod 666 文件所在路径
hadoop fs -chown nhk:nhk 文件所在路径