次の 3 つのオプションが考えられます。
- オプションを使用し
-files
、HDFS でファイルに名前を付けます (タスク トラッカーは、そのノードで実行されているすべてのジョブに対してファイルを 1 回ダウンロードするため、推奨されます)。
- DistributedCache を使用します (上記と同様のロジック)。ただし、コマンド ラインではなく API 呼び出しを使用してファイルを構成します。
- ファイルを HDFS から直接ロードします (タスクごとに HDFS 経由でファイルをプルするため、効率が低下します)。
一部のコードについては、次のようにロード ロジックをマッパーsetup(...)
または configure(..) メソッドに入れます (新しい API を使用しているか古い API を使用しているかによって異なります)。
protected void setup(Context context) {
// the -files option makes the named file available in the local directory
File file = new File("filename.dat");
// open file and load contents ...
// load the file directly from HDFS
FileSystem fs = FileSystem.get(context.getConfiguration());
InputStream hdfsInputStream = fs.open("/path/to/file/in/hdfs/filename.dat");
// load file contents from stream...
}
DistributedCache には、Javadocsにいくつかのサンプル コードがあります。