2011-07-22 5 views
0

入力ファイルが.txt形式のHadoop MapReduceジョブで大量のファイルを分析しています。私のマッパーと私の減速機はPythonで書かれています。Hadoop MapReduceジョブで外部参照テーブルまたはデータベースを使用できるようにするにはどうすればよいですか?

しかし、私のマッパーモジュールは、外部のCSVファイルの内容にアクセスする必要があります。これは、マッパーが実行している変換の参照値を参照するための基本的なテーブルです。

これまでは、ファイルをローカルディレクトリからメモリにロードしてPython変数として利用できるようにしました。ファイルはかなり大きいので(数千の行と列)、ロードに比較的長い時間がかかります(約10秒、私の目的にとっては長すぎます)。問題は、Hadoopが新しい入力ファイルごとにマッパースクリプトを再実行するか、大きな入力ファイルを小さい入力ファイルに分割することで、新しい入力ファイルがメモリに不必要に読み込まれることがあります。ファイルが処理されます。

Hadoopにファイルを一度だけロードさせ、どうにかして「グローバルに」利用できるようにする方法はありますか? Hive、Pig、sqliteのようなグーグル・グーグルの名前がポップアップしていましたが、これが実際にこの目的に役立つかどうかを確認する例は見たことがありません。

基本的に、私はHadoopジョブを実行している間に素早くアクセスするためのデータベースや辞書が必要です。私の参照テーブルのフォーマットはCSVである必要はなく、そのデータをさまざまなフォーマットに変換するのにはかなり柔軟です。

答えて

0

はい、-files optionをあなたのハントストリームのコマンドラインで調べてください。それはあなたがHDFSにロードしたファイルを受け取り、各タスクトラッカーノードにローカルにその1つのコピーをキャッシュし、各マッパーとレデューサータスクのCWDへのソフトリンクを作成します。

ジョブと一緒にバンドルするjarファイルがある場合は、-archivesオプションもあります。

0

おそらくSqoopをご覧ください。データベースからHDFSにデータをインポートするので、Map Reduceを使用して処理できます。

関連する問題