これは最近Web UIで見たものです
Configured Capacity : 232.5 GB
DFS Used : 112.44 GB
Non DFS Used : 119.46 GB
DFS Remaining : 613.88 MB
DFS Used% : 48.36 %
DFS Remaining% : 0.26 %
そして、私はとても混乱していて、Used-dfsは容量の半分以上を占めています。
これは、hadoopストレージの半分が無駄になっていることを意味すると思います
意味のない時間を費やして検索した後、namenodeをフォーマットし、ゼロから始めました。
次に、1つの巨大なテキストファイル(約19ギガバイト)をローカルからHDFS(成功)にコピーしました。
今UIは言う
Configured Capacity : 232.5 GB
DFS Used : 38.52 GB
Non DFS Used : 45.35 GB
DFS Remaining : 148.62 GB
DFS Used% : 16.57 %
DFS Remaining% : 63.92 %
コピーする前は、DFS UsedとNon DFS Usedはどちらも0でした。
DFS Usedは元のテキストファイルサイズの約2倍であり、2つのコピーを構成したため、
DFS Usedはオリジナルとメタの2つのコピーで構成されていると思います。
しかし、私は非DFSユーズドがどこから来たのか、そしてなぜそれがDFSユーズドよりもはるかに多くの容量を必要とするのかという理由を私は知りません。
何が起こった?間違えましたか?
「使用されていないDFS」は、次の式で計算されます。
非DFS使用=構成済み容量-残りスペース-DFS使用
それは、少なくとも私にとってはまだ混乱しています。
なぜなら構成済み容量=合計ディスク容量-予約済み容量
したがって、使用されていないDFS = =(合計ディスク容量-予約済み容量)-残りの容量-DFSが使用されています
例を見てみましょう。 100 GBのディスクがあり、予約領域(dfs.datanode.du.reserved)を30 GBに設定していると仮定します。
ディスクでは、システムと他のファイルは最大40 GBを使用し、DFSは10 GBを使用しました。 df -hを実行すると、そのディスクボリュームに使用可能なスペースが50GBであることがわかります。
HDFS Web UIでは、次のように表示されます
使用されていないDFS = 100GB(合計)-30 GB(予約済み)-10 GB(DFS使用済み)-50GB(残り 10 GB)==
つまり、実際には、DFS以外の使用には30G、HDFSには70Gを予約するように最初に構成しました。ただし、dfs以外の使用量が30Gの予約を超え、HDFSに属するはずの10 GBのスペースを消費することが判明しました。
「非DFSを使用」という用語は、実際には次のような名前に変更する必要があります"構成されたDFS容量がDFS以外の使用によって占有されている量"
そして、df以外の使用がhadoop内で非常に高い理由を理解しようとするのをやめるべきです。
有用なコマンドの1つはlsof | grep delete
は、削除された開いているファイルを特定するのに役立ちます。場合によっては、Hadoopプロセス(Hive、yarn、mapredやhdfsなど)がすでに削除されているファイルへの参照を保持していることがあります。そして、これらの参照はディスク領域を占有します。
またdu -hsx * | sort -rh | head -10
は、上位10個の最大フォルダを一覧表示するのに役立ちます。
使用されている非DFSは、dfs.data.dirs
にないデータノードのファイルシステム内のデータです。これには、ログファイル、mapreduceシャッフル出力、およびデータファイルのローカルコピー(データノードに配置した場合)が含まれます。 du
または同様のツールを使用して、ファイルシステムのスペースを占有しているものを確認します。
正しい簡略化された定義は次のとおりです。「HDFSによってdfs.data.dirs
と同じファイルシステムに書き込まれていないデータ。つまり、hdfs dfs
コマンドを使用してデータをコピーすると、結果的にdfs.data.dirs
の下では「DFSの使用」と見なされます。通常のcp
コマンドを使用してファイルをdfs.data.dirs
にコピーすると、「DFS以外の使用」になります。
もう一つ。Non DFS used = 100GB(Total) - 30 GB( Reserved) - 10 GB (DFS used) - 50GB(Remaining) = 10 GB
ext3/ext4のデフォルトの予約は5%(予約済みブロック数を参照)であるため、Non DFS used = 100GB(Total) - 30 GB( Reserved from App) - 5 GB(Reserved from FS) - 10 GB (DFS used) - 50GB(Remaining) = 5 GB
Sudo tune2fs -l /dev/sdm1
から「予約済みブロック数」を取得します
BTW、tune2fs -m 0.2 /dev/sdm1
で予約済みスペースを調整します。
Non-dfsは、ノードマネージャによって格納されるいくつかのキャッシュファイルになります。あなたは、yarn-site.xmlのyarn.nodemanager.local-dirsプロパティの下のパスを確認することができます
詳細については、デフォルトの yarn-site.xml を参照できます。