0

現在、Amazon EMR上でPigスクリプトを実行して、S3から一連のファイルをロードしてから、フィルター処理を実行してデータをにグループ化するphone numberため、データはのようになります(phonenumber:chararray, bag:{mydata:chararray})。次に、各電話番号を異なるS3バケット(おそらく、アクセスできる異なるアカウントのバケット)に保存する必要があります。ここorg.apache.pig.piggybank.storage.MultiStorageでは最適な使用法のようですが、私が直面している2つの問題があるため、機能しません。

  1. 多くの電話番号(約20,000)があり、各電話番号を異なるS3バケットに保存するのは非常に遅く、プログラムのメモリも不足しています。
  2. ルックアップテーブルを検索して、バケットを格納する場所を決定する方法はありません。

だから私は誰かが助けることができるかどうか疑問に思っていますか?2つ目は、おそらく自分のUDFストア関数を作成することで解決できますが、1つ目は、どのように解決するのでしょうか。ありがとう。

4

1 に答える 1

0

S3は、アカウントごとに100バケットに制限されています。それ以上に、バケットの準備が整うのを待つ必要があるため、バケットの作成はすぐには行われません。

ただし、バケットには必要な数のオブジェクトを含めることができます。電話番号を別のオブジェクトとして比較的すばやく書き込むことができます。特にオブジェクトの名前に注意している場合:S3のオブジェクトはプレフィックスで保存されます。すべてのオブジェクトに同じプレフィックスを付けると、S3はすべてのオブジェクトを同じ「ホット」領域に配置しようとするため、パフォーマンスが低下します。異なるプレフィックスを選択すると(通常は単にIDまたは時刻を逆にする)、大幅に改善されます。

AWSのスケーラブルなNoSQLDBであるDynamoDBもご覧ください。インデックスを作成するときは、非常に高いスループットを得ることができます。Hive over Elastic MapReduceを使用して、後でS3にエクスポートすることもできます。

于 2013-01-04T16:27:20.030 に答える