1

readthedocs.io ガイドに記載されていない詳細を解決するのに役立つので、事前にご協力いただきありがとうございます。必要なのは、複数のファイルを 1 つの gzip に圧縮することですが、このガイドでは、ファイルのリストを個々の gzip ファイルとして圧縮する方法のみを示しています。繰り返しますが、このセットアップに関するリソースとドキュメントはほとんどないため、助けていただければ幸いです。(追加情報がある場合は、ソースへのリンクを含めてください)

グリッド エンジンをセットアップした後、ガイドのサンプルを実行しました。

grid-computing-toolsを使用して複数のファイルを 1 つの gzip に結合するためのスクリプトがないと仮定するのは正しいですか?

Elasticluster Grid Engine セットアップで複数のファイルを 1 つの gzip に圧縮するソリューションはありますか?

grid-engine-tools を機能させるには、どのような変更を加えることができますか?

編集

クラスターを検討している理由は、ベンダーが注文ごとに 1 つの圧縮ファイルをダウンロードできるように、注文ごとにファイルを圧縮する複数の操作が同時に発生することが予想されるためです。

4

3 に答える 3

1

Matt と私はまったく同じ解決策を提供しましたが、どういうわけか十分ではないようです。

問題定義

  • データを処理するタスクの開始を定義する Order があります。
  • データの処理は複数の計算ノードに分割され、それぞれが GS ディレクトリに格納された結果ファイルを生成します。
  • 目標は次のとおりです。

    1. GS バケットからファイル (各ノードによって生成されたもの) を収集し、
    2. ファイルのコレクションを 1 つのファイルとしてアーカイブし、
    3. 次に、そのアーカイブを圧縮し、
    4. 別の GS の場所に押し戻します。

ちゃんとまとめたら教えてね

ありがとう、ポール

于 2016-07-26T16:49:06.817 に答える
0
  • 問題のファイルは Cloud Storage にありますか?
  • 問題のファイルはローカル ドライブまたはネットワーク ドライブにありますか?

あなたの説明では、「必要なのは、複数のファイルを単一の gzip に圧縮することです」と示しています。これにはコンピューターのクラスターが必要かどうかはわかりません。tarをgzipと一緒に使用したいだけのように思えます。

tar ユーティリティは、同様に圧縮できるアーカイブ ファイルを作成します。例えば:

$ # Create a directory with a few input files
$ mkdir myfiles
$ echo "This is file1" > myfiles/file1.txt
$ echo "This is file2" > myfiles/file2.txt

$ # (C)reate a compressed archive
$ tar cvfz archive.tgz myfiles/*
a myfiles/file1.txt
a myfiles/file2.txt

$ # (V)erify the archive
$ tar tvfz archive.tgz 
-rw-r--r--  0 myuser mygroup      14 Jul 20 15:19 myfiles/file1.txt
-rw-r--r--  0 myuser mygroup      14 Jul 20 15:19 myfiles/file2.txt

コンテンツを抽出するには、次を使用します。

$ # E(x)tract the archive contents
$ tar xvfz archive.tgz 
x myfiles/file1.txt
x myfiles/file2.txt

アップデート:

更新された問題の説明では、複数の注文が同時に処理されている可能性があることを示しています。結果を tar する必要がある頻度が低く、tar された結果を提供するのにそれほど時間がかからない場合は、おそらく単一のノードでこれを行うことができます。

ただし、問題の規模が拡大するにつれて、パイプライン APIの使用を検討することがあります。

固定クラスターを実行し続けるのではなく、顧客の注文が完了すると、"パイプライン" (この場合は単一のタスク) を開始できます。

Pipelines API を呼び出すと、顧客のファイルをダウンロードして tar ファイルを作成し、結果の tar ファイルを Cloud Storage にプッシュすることだけを目的とした VM が開始されます。Pipelines API インフラストラクチャは、Cloud Storage との間でコピーを行います。事実上、tar コマンド ラインを指定するだけで済みます。

ここに似たようなことをする例があります:

https://github.com/googlegenomics/pipelines-api-examples/tree/master/compress

この例では、ファイルのリストをダウンロードし、それぞれを個別に圧縮します。入力ファイルのリストを tar するように簡単に変更できます。

詳細と例については、https://github.com/googlegenomics/pipelines-api-examples github リポジトリをご覧ください。

-マット

于 2016-07-20T22:27:06.747 に答える
0

そのため、さまざまな方法がありますが、問題は、Google Storage でファイルのコレクション (またはディレクトリ) を 1 つのファイルに直接圧縮することはできず、転送する前にローカルで tar/gzip の組み合わせを実行する必要があることです。

必要に応じて、次の方法でデータを自動的に圧縮できます。

gsutil cp -Z

次のリンクで詳しく説明されています。

https://cloud.google.com/storage/docs/gsutil/commands/cp#changeing-temp-directories

また、圧縮されていない結果を Google Storage の圧縮データから取得できるという利点もあります。これは、圧縮解除トランスコーディングを実行できるためです。

https://cloud.google.com/storage/docs/transcoding#decompressive_transcoding

次のスクリプトの最後の行に注目してください。

https://github.com/googlegenomics/grid-computing-tools/blob/master/src/compress/do_compress.sh

次の行は、基本的に現在の圧縮ファイルを Google Cloud Storage にコピーします。

gcs_util::upload "${WS_OUT_DIR}/*" "${OUTPUT_PATH}/"

必要なのは、まずローカルのスクラッチ ディレクトリにあるファイルに対して tar/zip を実行し、次に gsutil で圧縮ファイルを Google ストレージにコピーすることですが、圧縮する必要があるすべてのファイルがスクラッチ ディレクトリにあることを確認してください。それらを圧縮し始める前に。ほとんどの場合、それらをノードの 1 つ (マスター) に SSH コピー (scp) し、Google ストレージに送信する前に、マスター tar/gzip でディレクトリ全体を取得する必要があります。各 GCE インスタンスには独自のスクラッチ ディスクがあると想定していますが、GCE で作業している場合、「gsutil cp」転送は非常に高速です。

Google Storage は Google コンピューティング インスタンスとのデータ転送が高速であるため、追求する最も簡単な 2 番目のオプションは、do_compress.shファイルの 66 ~ 69 行をマークすることです。

https://github.com/googlegenomics/grid-computing-tools/blob/master/src/compress/do_compress.sh

この方法では圧縮は行われませんが、圧縮されていないすべてのファイルを同じ Google ストレージ バケットに転送するために、gsutil::upload を介して最後の行でコピーが行われます。次に、マスター ノードから「gsutil cp」を使用してローカルにコピーし、tar/gz 経由でローカルに圧縮してから、「gsutil cp」を使用して圧縮されたディレクトリ ファイルをバケットにコピーします。

それが役立つことを願っていますが、それはトリッキーです、ポール

于 2016-07-16T23:27:53.013 に答える