私はかなり大きなテキストファイル(19Gb、10億行)とそれをソートするためにUbuntu 12.04を実行するかなり大きなサーバー(16コア、64Gb RAM)を持っています。
コマンドラインsort
ユーティリティ(GNU Core Utilities)を使用してこのファイルをすばやくソートするための最良の方法は何ですか?
--parallel 15
私は(コアを残して)使用できると信じています。RAMディスクに一時ファイルを保存するなどの機能を使用できます1、使用可能なメモリを利用するために使用することができ、-T /run/shm/sortTmp
(それで高速です)。-S 50G
一時ファイルの使用量を減らすために調整することができます--batch-size=15
(ここで良い値が何であるかわかりません...)。
考慮すべき他のオプションはありますか?良いオプションは何ですか--batch-size
?考慮すべき他の事項がありますか?
並べ替え時にコンピュータで他のタスクを実行する必要がないため、すべてのリソースを使用できます。
1. -S
一時ファイル用のRAMディスクと一緒に使用することはお勧めできません!sort
RAMディスクに書き込んでメモリがいっぱいになると、カーネルがシャットダウンする可能性があります。このコメント)
答え1
誰も答えなかったので、私はそうしました。
sort -T /mnt/tmp --parallel=14 -S 50G myBigFile.txt
どれが良い値なのか、たぶんスマートなのか確信が持て--batch-size
ず、使っていませんでした。sort
/mnt
大容量の一時ディスクにインストールされます(マシンはクラウドの仮想マシンです)。/tmp
スペースが十分なディスクであれば省略可能です-T
。十分なスペースがあり、非常に高速なディスクであれば使用してください。
私の記憶が正しい場合は、ソートされるファイルのサイズと同じスペースが必要です。デフォルトでは、ファイルを複数のチャンクに分割します。各チャンクはメモリ内で並べ替えて一時ディスクに保存し、次の操作を行います。マージソートで最終出力を生成します。