5

すでに尋ねられた次の質問を参照してください: s3 に 1億個のファイルを書き込み、EMRで開いているファイルが多すぎます

ここで処理されるデータのサイズは、少なくとも約4〜5TBです。正確には-gzip圧縮で300GB。

このステップで時間の経過とともにデータが集計されるため、入力のサイズは徐々に大きくなります。

たとえば、2012年12月までのログには次のものが含まれます。

UDID-1, DateTime, Lat, Lng, Location
UDID-2, DateTime, Lat, Lng, Location
UDID-3, DateTime, Lat, Lng, Location
UDID-1, DateTime, Lat, Lng, Location

このためには、ファイル名としてUDID(一意のデバイス識別子)を使用して個別のファイルを生成し、そのUDIDに属するレコードをファイル内でソートされた順序で生成する必要があります。

元:

UDID-1.dat => File Contents
DateTime1, Lat1, Lng1, Location1
DateTime2, Lat2, Lng2, Location2
DateTime3, Lat3, Lng3, Location3

2013年1月のログがある場合、このステップでは、古いデータ、このステップで以前の月に既に生成されたファイル、およびUDIDのデータを集約するための新しいログの両方を読み取ります。

元:

If the logs for month of Jan has a record as: UDID-1, DateTime4, Lat4, Lng4, Location4, the file UDID-1.dat would need to be updated with this data. Each UDID's file should be chronologically sorted.

このステップでは、データをEBSボリュームに書き込み、後で使用できるようにそのままにしておくことを考えました。ただし、EBSボリュームには1TBの制限があります。参照されている質問ですでに述べたように、s3で直接ファイルを生成するか、HDFSで生成してからs3に移動することは、移動する必要のある小さなファイルが約1億個あるため、このユースケースでは実行可能なオプションではありません。また、s3distcpを使用しても、このような大量のファイルの移動は非常に遅くなります。

そこで、次にs3fsを試してみます。AmazonS3に支えられたFUSEベースのファイルシステムです。誰かがs3fsがどれほどスケーラブルであるかについて何か考えを持っていますか?1億個の小さなファイルを処理できるでしょうか?MRジョブで使用できるように、3〜5 TBのデータを1億ファイルに分散して、s3からローカルファイルシステムに移動するのにどのくらいの時間がかかりますか?また、データをs3に戻すのにどのくらいの時間がかかりますか?s3distcpの使用中に直面したのと同じ問題が発生しますか?

前もって感謝します !

4

1 に答える 1

2

s3fs を使用して大量の小さなファイルをコピーすることはお勧めしません。

HDFS から大量の小さなファイルを移動しようとしたことが何度かありましたが、s3fs デーモンがクラッシュし続けました。と の両方を使用していcpましrsyncた。増分更新を行っている場合、これはさらに悪化します。1 つの代替方法は、use_cacheオプションを使用して、その動作を確認することです。

s3cmd を使用し、Unixfindコマンドを使用して各ファイルを反復処理することに頼りました。このようなもの:

find <hdfs fuse mounted dir> -type f -exec s3cmd put {} s3://bucketname \;

s3cmd sync次のようなものを試すこともできます。

s3cmd sync /<local-dir>/ s3://bucketname
于 2013-12-12T17:55:58.170 に答える