2

inで実行されている入力ファイル名を取得するにはどうすればよいですかhadoop mapperHadoop Pipes?

次のようなJavaベースのマップレデューサーでファイル名を簡単に取得できます

FileSplit fileSplit = (FileSplit)context.getInputSplit(); 文字列ファイル名 = fileSplit.getPath().getName(); System.out.println("ファイル名"+ファイル名); System.out.println("ディレクトリとファイル名"+fileSplit.getPath().toString());

しかし、どうすれば C++ に入ることができますか。

助けてください

ありがとう

4

6 に答える 6

3

ストリーミング/パイプ ジョブの場合、ジョブ構成は、環境変数を処理するためにシリアル化されます。

入力ファイルを定義するジョブ構成プロパティの名前はmap.input.file. C++ プログラムを起動するPipeMapRedクラスは、このシリアル化を担当し (configureメソッド、行 151)、ジョブ conf プロパティ名がエスケープされることを保証します (addJobConfToEnvironmentメソッド行 206/266) - すべての非a-Za-z0-9文字がアンダースコアに置き換えられることを意味します (safeEnvVarNameメソッド、行 276/284) - したがって、C++ プログラムで探している実際の環境変数の名前はmap_input_file.

私は C++ プログラマーではないので、環境変数を取得する方法を説明することはできませんが、十分に簡単だと確信しています。

于 2012-12-27T19:37:42.720 に答える
1

( new mapreduce_map_input_file) またはmap_input_file(非推奨) 環境変数で、マップ入力ファイル名を取得できます。

注意:
2 つの環境変数は大文字と小文字が区別されます。すべての文字は小文字にする必要があります

于 2014-07-23T09:16:36.603 に答える
0

Pythonでこれを行う方法を考え出しました:

import os
filename = os.environ['map_input_file']

filename は必要な変数です。これにより、マッパーが作業しているファイル名が得られます。

その他の便利な環境変数は次のとおりです。

  • mapred_job_id = 完全なジョブ ID
  • mapred_tip_id = 特定のマッパーまたはリデューサー タスクの ID
于 2013-03-07T17:35:56.187 に答える