2

私は完全なHadoopn00bです。私は最初のHadoopプロジェクトとして、次のことを解決しようとしています。アマゾンS3バケットに100万以上のサブフォルダーがあります。これらの各フォルダには2つのファイルがあります。ファイル1には次のようなデータがあります。

date,purchaseItem,purchaseAmount
01/01/2012,Car,12000
01/02/2012,Coffee,4
....................

File2には、次の形式で顧客の情報があります。

ClientId:Id1
ClientName:"SomeName"
ClientAge:"SomeAge"

この同じパターンが、バケット内のすべてのフォルダーで繰り返されます。

このすべてのデータをHDFSに書き込む前に、次のようにFile1とFile2を結合します。

参加ファイル:

ClientId,ClientName,ClientAge,date,purchaseItem,purchaseAmount
Id1,"SomeName","SomeAge",01/01/2012,Car,12000
Id1,"SomeName","SomeAge",01/02/2012,Coffee,4

フォルダーごとにこれを実行してから、この結合されたデータセットをHDFSにフィードする必要があります。Hadoopでこのようなことをどのように達成できるかを誰かが指摘できますか?正しい方向へのプッシュは大歓迎です。

4

2 に答える 2

3

すぐに頭に浮かぶのは、カスケードでの実装です。

プログラムで行を File2 の列に変換して、すべてのフォルダーを反復処理し、最初の列が最初の行になるようにファイルを転置する方法を考え出します。

サブフォルダーが 1 つだけの場合: おそらくTextDelimited、ファイル 1 のスキームとファイル2 のスキームの 2 つのスキームをTextLine設定TapsMultiSourceTapますPipe

この時点MultiSourceTapsで、すべての File1 用に 1 つ、すべての File2 用に 1 つ、2 つの別個のものが必要です。ここでの詳細のいくつかを覚えておいてください。これを1つのサブフォルダーに対して設定し、他の100万のサブフォルダーを反復処理して他の領域に出力しhadoop fs -getmerge 、すべての出力小さなファイルを1つの大きなファイルに取得するために使用するのが最善の場合があります.

Cascading テーマを維持し、s を構築してinside とfunctionPipeを使用してサブフォルダー名を追加し、両方のデータ セットが元のサブフォルダーへの参照を持ち、それらを結合できるようにすることができます... カスケードまたは Hiveを使用してそれらを結合します。 QL ジョイン。new Insert(subfolder_name)EachCoGroup

これよりもはるかに簡単な実装があるかもしれませんが、すぐに思いつくのはこれです。:)

TextDelimitedTextLineMultiSourceTap

于 2013-04-03T18:44:42.187 に答える