Amazon EMR上で実行される4つの連鎖MapReduceジョブで構成されるアプリケーションを作成しています。 JobFlowインターフェイスを使用してジョブを連鎖させています。各ジョブはそれ自身のクラスに含まれており、独自のmain
メソッドを持っています。これらはすべてS3に保存された.jar
にパックされており、ラップトップの小さなローカルアプリからクラスタが初期化され、JobFlowRequest
がEMRに送信されます。 クラスタを起動しようとする試行のほとんどは、エラーメッセージTerminated with errors On the master instance (i-<cluster number>), bootstrap action 1 timed out executing
で失敗します。この問題に関する情報を調べましたが、クラスタのブートストラップ時間が45分を超えると、この例外がスローされます。しかし、これは要求がEMRに提出されてから15分後に発生します。要求されたクラスタサイズを無視して、4 EC2インスタンス、10または20でもかまいません。これは全く意味がありません。何が欠けていますか?EMRクラスタブートストラップの失敗(タイムアウト)は、ほとんどの場合、クラスタの初期化時に発生します。
いくつかの技術仕様:Javaの1.7.79 -Theは、EMRの画像を要求して が-TheプロジェクトがコンパイルされたJava V用AWS SDKを使用してHadoopの2.7.2 -I'mを使用した、4.6.0である1.10。 0.64
これは設定し、JobFlowRequest
を提出し、私の地元の主要な方法で、次のとおりです。私は4.6.0のさえバニラEMRクラスタが失敗していた同様の問題に遭遇し、しばらく前
import com.amazonaws.AmazonClientException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.ec2.model.InstanceType;
import com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduce;
import com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClient;
import com.amazonaws.services.elasticmapreduce.model.*;
public class ExtractRelatedPairs {
public static void main(String[] args) throws Exception {
if (args.length != 1) {
System.err.println("Usage: ExtractRelatedPairs: <k>");
System.exit(1);
}
int outputSize = Integer.parseInt(args[0]);
if (outputSize < 0) {
System.err.println("k should be positive");
System.exit(1);
}
AWSCredentials credentials = null;
try {
credentials = new ProfileCredentialsProvider().getCredentials();
} catch (Exception e) {
throw new AmazonClientException(
"Cannot load the credentials from the credential profiles file. " +
"Please make sure that your credentials file is at the correct " +
"location (~/.aws/credentials), and is in valid format.",
e);
}
AmazonElasticMapReduce mapReduce = new AmazonElasticMapReduceClient(credentials);
HadoopJarStepConfig jarStep1 = new HadoopJarStepConfig()
.withJar("s3n://dsps162assignment2benasaf/jars/ExtractRelatedPairs.jar")
.withMainClass("Phase1")
.withArgs("s3://datasets.elasticmapreduce/ngrams/books/20090715/eng-gb-all/5gram/data/", "hdfs:///output1/");
StepConfig step1Config = new StepConfig()
.withName("Phase 1")
.withHadoopJarStep(jarStep1)
.withActionOnFailure("TERMINATE_JOB_FLOW");
HadoopJarStepConfig jarStep2 = new HadoopJarStepConfig()
.withJar("s3n://dsps162assignment2benasaf/jars/ExtractRelatedPairs.jar")
.withMainClass("Phase2")
.withArgs("shdfs:///output1/", "hdfs:///output2/");
StepConfig step2Config = new StepConfig()
.withName("Phase 2")
.withHadoopJarStep(jarStep2)
.withActionOnFailure("TERMINATE_JOB_FLOW");
HadoopJarStepConfig jarStep3 = new HadoopJarStepConfig()
.withJar("s3n://dsps162assignment2benasaf/jars/ExtractRelatedPairs.jar")
.withMainClass("Phase3")
.withArgs("hdfs:///output2/", "hdfs:///output3/", args[0]);
StepConfig step3Config = new StepConfig()
.withName("Phase 3")
.withHadoopJarStep(jarStep3)
.withActionOnFailure("TERMINATE_JOB_FLOW");
HadoopJarStepConfig jarStep4 = new HadoopJarStepConfig()
.withJar("s3n://dsps162assignment2benasaf/jars/ExtractRelatedPairs.jar")
.withMainClass("Phase4")
.withArgs("hdfs:///output3/", "s3n://dsps162assignment2benasaf/output4");
StepConfig step4Config = new StepConfig()
.withName("Phase 4")
.withHadoopJarStep(jarStep4)
.withActionOnFailure("TERMINATE_JOB_FLOW");
JobFlowInstancesConfig instances = new JobFlowInstancesConfig()
.withInstanceCount(10)
.withMasterInstanceType(InstanceType.M1Small.toString())
.withSlaveInstanceType(InstanceType.M1Small.toString())
.withHadoopVersion("2.7.2")
.withEc2KeyName("AWS")
.withKeepJobFlowAliveWhenNoSteps(false)
.withPlacement(new PlacementType("us-east-1a"));
RunJobFlowRequest runFlowRequest = new RunJobFlowRequest()
.withName("extract-related-word-pairs")
.withInstances(instances)
.withSteps(step1Config, step2Config, step3Config, step4Config)
.withJobFlowRole("EMR_EC2_DefaultRole")
.withServiceRole("EMR_DefaultRole")
.withReleaseLabel("emr-4.6.0")
.withLogUri("s3n://dsps162assignment2benasaf/logs/");
System.out.println("Submitting the JobFlow Request to Amazon EMR and running it...");
RunJobFlowResult runJobFlowResult = mapReduce.runJobFlow(runFlowRequest);
String jobFlowId = runJobFlowResult.getJobFlowId();
System.out.println("Ran job flow with id: " + jobFlowId);
}
}
この問題を持っていなかったブートストラップアクション障害がクラスタがあることを意味していても、新しく作成されたクラスタノードのDNS名を設定し、解決する問題を抱えていましたスタートアップを完了することさえできず、まだステップを実行していない。 withHadoopVersionを削除します。リリースラベルでは不要です。デフォルト設定のバニラEMRクラスタはWebコンソールを使用し始めますか? – ChristopherB