特定のレコードのサブセットを追加して、各マッパーでレコードの各チャンクとマージしたいのですが、一般的に Hadoop でこれを行うにはどうすればよいですか? およびPythonストリーミングパッケージmrJobでは?
2 に答える
何をしようとしているのか正確にはわかりませんが、分散キャッシュ機能を使用してこれを実現できるかもしれません。
分散キャッシュの使用例:
Input to mapper: customer reviews
You want to process only those reviews which contain certain keywords, which are stored in a "words.txt" file.
You can put words.txt into the Distributed Cache, which makes it available to the mapper & reducer.
Python ストリーミングで正確にどのように行われるかはわかりませんが、理解するのは難しくありません。
DistributedCache は、アプリケーションが必要とするファイル (テキスト、アーカイブ、jar など) をキャッシュするために Map-Reduce フレームワークによって提供される機能です。
アプリケーションは、URL (hdfs:// または http://) を介して、JobConf を介してキャッシュされるファイルを指定します。DistributedCache は、hdfs:// URL で指定されたファイルが、URL で指定されたパスの FileSystem に既に存在していると想定します。
フレームワークは、スレーブ ノードでジョブのタスクが実行される前に、必要なファイルをスレーブ ノードにコピーします。その効率は、ファイルがジョブごとに 1 回だけコピーされるという事実と、スレーブでアーカイブされていないアーカイブをキャッシュする機能に由来します。
DistributedCache を使用して、単純な読み取り専用のデータ/テキスト ファイルや、アーカイブ、jar などのより複雑なタイプを配布できます。アーカイブ (zip、tar、および tgz/tar.gz ファイル) は、スレーブ ノードでアーカイブ解除されます。必要に応じて、基本的なソフトウェア配布メカニズムであるタスクのクラスパスに Jar を追加できます。ファイルには実行権限があります。オプションで、分散キャッシュ ファイルをタスクの作業ディレクトリにシンボリック リンクするように指示することもできます。
DistributedCache は、キャッシュ ファイルの変更タイムスタンプを追跡します。明らかに、キャッシュ ファイルは、ジョブの実行中にアプリケーションまたは外部から変更されるべきではありません。
Python mrJob の場合:-
私はあなたが使用する必要があると思います
mrjob.compat.supports_new_distributed_cache_options(バージョン)
-cacheFile と -cacheArchive の代わりに -files と -archives を使用します。
ここでもっと得られるかもしれません