2013年2月4日星期一

JavaコードでEMRの同時に実行するタスク数を設定

Hadoopの一つのMapReduceジョブは複数のMapタスクとReduceタスクがある。タスクがクラスタのサーバへ渡されて実行される。一つのサーバは複数のタスクを実行する。同時に実行するタスクの数の最大値を設定できる。JavaコードでEMRのジョブフローを起動すると、このように設定する:

JobFlowInstancesConfig instances = new JobFlowInstancesConfig();
/** instancesのいろいろな設定
 *  ......
 */
 
RunJobFlowRequest request = new RunJobFlowRequest("MyEMRJob", instances);
/** requireについて他の設定(stepとか)
 *  ......
 */
//tasks.maximumを設定
BootstrapActions bootstrapActions = new BootstrapActions();
request.withBootstrapActions(bootstrapActions.newConfigureHadoop()
 .withKeyValue(ConfigFile.Mapred, "mapred.tasktracker.map.tasks.maximum", "5")
 .withKeyValue(ConfigFile.Mapred, "mapred.tasktracker.reduce.tasks.maximum", "5").build());
 
PropertiesCredentials credentials = new PropertiesCredentials(getClassLoader().getResourceAsStream("AwsCredentials.properties"));
AmazonElasticMapReduce emr = new AmazonElasticMapReduceClient(credentials);
emr.runJobFlow(request);//EMRジョブを起動する

これで、1台のサーバは同時に実行するMapとReduceタスクの最大値を5に設定した。

没有评论:

发表评论