web-dev-qa-db-ja.com

強力なクラスター上で数百万の小さなファイルを圧縮(つまり、単一のファイルにアーカイブ)して、ファイルの転送を高速化する最速の方法

重要な注意:圧縮は目標ではなく、アーカイブ/テーピング(すべてのファイルを単一のアーカイブにパックする)が目標です。

数百のサブディレクトリと数百万の小さなファイル(<800 KB)を含む単一のディレクトリをバックアップしたいと思います。 rsyncを使用してこれらのファイルをあるマシンから別のリモートマシンにコピーする場合、転送速度が非常に遅く、約1 MB /秒しかないことに気付きましたが、巨大なファイル(500 GBなど)をコピーする場合は)転送速度は実際には約120MB /秒です。したがって、ネットワーク接続はまったく問題ではありません。

そのような場合、200GBの小さなファイルだけを移動するのに約40時間かかりました。そのため、これらのファイルを含むディレクトリ全体を圧縮してから、圧縮されたアーカイブをリモートマシンに転送し、その後、リモートマシンで解凍することを考えています。このアプローチで40時間から5時間に短縮されるとは思っていませんが、間違いなく40時間未満かかると思います。

14 CPUコア(56スレッド-Intel(R)Xeon(R)Gold 5120 CPU @ 2.20GHz)および128のクラスターにアクセスできますGBRAM。したがって、CPU/RAMの電力は問題ではありません。

しかし、非常に多くのファイルから単一のアーカイブを作成するための最も速くて効率的な方法は何ですか?私は現在、これらのアプローチについてのみ知っています。

しかし、どちらが速いのか、最大速度を達成するためにパラメーターをどのように調整する必要があるのか​​わかりませんか? (たとえば、7ZipですべてのCPUコアを使用するのが良いですか、それとも1つだけを使用するのが良いですか?)

N.B. ファイルサイズと圧縮率はまったく関係ありません。スペースを節約しようとはしていません。転送速度が1MB /秒ではなく120MB /秒になるように、非常に多くのファイルから1つのアーカイブを作成しようとしています。

[〜#〜]関連[〜#〜]7-Zipを高速化する方法

2
vivoru

tarを使用しますが、gzipの部分は省略します。 TARの要点は、ファイルを単一のストリームに変換することです(テープアーカイブの略です)。プロセスによっては、ストリームをディスクに書き込んでコピーすることもできますが、より効率的には、(SSHなどを介して)他のマシンにパイプすることもできます。同時に解凍することもできます。

プロセスはCPUを集中的に使用するのではなく、IOであるため、プロセスを並列化してもあまり役に立ちません。ファイル転送サイズを減らすことができます(ファイルがブロックサイズで正確に分割できない場合)。 、そして、各ファイルをネゴシエートするための前後を持たないことにより、たくさん節約できます。

非圧縮のtarファイルを作成するには:

tar -cf file.name /path/to/files

ネットワークを介してストリーミングするには:

tar -c /path/to/files | ssh [email protected] 'cd /dest/dir && tar -x'

注:例1のように中間ファイルをハードドライブに書き込む場合、適切な量の圧縮があると、ディスクに書き込まれる量が少なくなるため、実際にはファイルをgzipで圧縮する方が速い場合があります。プロセス。

3
davidgo