何かが足りない場合を除いてProperties
、M / Rジョブに必要なすべてのプロパティを含むオブジェクトがある場合は、オブジェクトのコンテンツをProperties
HadoopConfiguration
オブジェクトに書き込むだけです。たとえば、次のようなものです。
Configuration conf = new Configuration();
Properties params = getParameters(); // do whatever you need here to create your object
for (Entry<Object, Object> entry : params.entrySet()) {
String propName = (String)entry.getKey();
String propValue = (String)entry.getValue();
conf.set(propName, propValue);
}
Context
次に、M / Rジョブ内で、オブジェクトを使用して、次のようConfiguration
にマッパー(map
関数)またはレデューサー(関数)の両方に戻ることができますreduce
。
public void map(MD5Hash key, OverlapDataWritable value, Context context)
Configuration conf = context.getConfiguration();
String someProperty = conf.get("something");
....
}
オブジェクトを使用するときは、およびメソッドにConfiguration
アクセスすることもできます。これは、必要に応じて初期化を行うのに役立ちます。Context
setup
cleanup
また、オブジェクトからaddResource
メソッドを直接呼び出して、プロパティをまたはファイルとして直接追加することもできますが、これは通常のHadoop XML構成のようなXML構成である必要があるため、やり過ぎかもしれません。Configuration
InputStream
編集:文字列以外のオブジェクトの場合は、シリアル化を使用することをお勧めします:オブジェクトをシリアル化してから、文字列に変換できます(通常、異常な文字がある場合はどうなるかわからないため、たとえばBase64でエンコードします) )、次にマッパー/リデューサー側で、内部のプロパティから取得した文字列からオブジェクトを逆シリアル化しますConfiguration
。
別のアプローチは、同じシリアル化手法を実行することですが、代わりにHDFSに書き込み、これらのファイルをに追加しますDistributedCache
。少しやり過ぎに聞こえますが、これはおそらくうまくいくでしょう。