簡體   English   中英

在 aws emr 作業流程中,每個步驟是否都收到上一步的 output?

[英]in aws emr job flow, does each step receive the output from the previous step?

我正在 Java 中制作一個 map reduce 程序,它有 4 個步驟。 每一步都是對上一步的output進行操作。

到目前為止,我在本地手動運行了這些步驟,我想開始使用作業流程在 AWS EMR 上運行。
我的教授給了我們一些代碼來配置作業流程的步驟,但現在我們面臨一個問題:

我的每個步驟都期望輸入和 output 路徑作為其主要 function 的參數。JobFlow 允許我將參數傳輸到每個步驟,但據我了解,作業流程中的每個步驟都應該自動接收上一步的 output

有沒有人知道這是不是真的? 步驟中的 map-reduce 應用程序如何實現其輸入位置? 從 JobFlow 隱式傳遞給它的路徑是 arguments 嗎?

我將 AWS SDK 2 用於 Java。

我的代碼:

 public static void main(String args[]) throws IOException, ClassNotFoundException, InterruptedException {
                // AwsCredentialsProvider credentialsProvider = StaticCredentialsProvider
                // .create(ProfileCredentialsProvider.create().resolveCredentials());

                EmrClient mapReduce = EmrClient.builder().credentialsProvider(ProfileCredentialsProvider.create())
                                .build();
                List<StepConfig> steps = new LinkedList<StepConfig>();

                HadoopJarStepConfig hadoopJarStepConfig = HadoopJarStepConfig.builder()
                                .jar("s3n://" + myBucketName + "/" + NCount + jarPostfix)
                                .mainClass(packageName + NCount)
                                .args(??????????????????????)
                                .build();
                steps.add(StepConfig.builder().name(NCount).hadoopJarStep(hadoopJarStepConfig)
                                .actionOnFailure("TERMINATE_JOB_FLOW").build());

                HadoopJarStepConfig hadoopJarStepConfig2 = HadoopJarStepConfig.builder()
                                .jar("s3n://" + myBucketName + "/" + CountNrTr + jarPostfix)
                                .mainClass(packageName + CountNrTr)
                                .args(??????????????????????)
                                .build();
                steps.add(StepConfig.builder().name(CountNrTr).hadoopJarStep(hadoopJarStepConfig2)
                                .actionOnFailure("TERMINATE_JOB_FLOW").build());

                HadoopJarStepConfig hadoopJarStepConfig3 = HadoopJarStepConfig.builder()
                                .jar("s3n://" + myBucketName + "/" + JoinAndCalculate + jarPostfix)
                                .mainClass(packageName + JoinAndCalculate)
                                .args(??????????????????????)
                                .build();
                steps.add(StepConfig.builder().name(JoinAndCalculate).hadoopJarStep(hadoopJarStepConfig3)
                                .actionOnFailure("TERMINATE_JOB_FLOW").build());

                HadoopJarStepConfig hadoopJarStepConfig4 = HadoopJarStepConfig.builder()
                                .jar("s3n://" + myBucketName + "/" + ValueToKeySort + jarPostfix)
                                .mainClass(packageName + ValueToKeySort)
                                .args(??????????????????????)
                                .build();
                steps.add(StepConfig.builder().name(ValueToKeySort).hadoopJarStep(hadoopJarStepConfig4)
                                .actionOnFailure("TERMINATE_JOB_FLOW").build());

                JobFlowInstancesConfig instances = JobFlowInstancesConfig.builder()
                                .instanceCount(2)
                                .masterInstanceType("m4.large")
                                .slaveInstanceType("m4.large")
                                .hadoopVersion("3.3.4")
                                .ec2KeyName(myKeyPair)
                                .keepJobFlowAliveWhenNoSteps(false)
                                .placement(PlacementType.builder().availabilityZone("us-east-1a").build()).build();

EMR 與問題無關。 不,它不是自動的。

我們需要查看您執行的 JAR 的代碼,但我只假設它是您使用 FileInputFormat 的傳統 mapreduce 代碼,如果是這樣,可能有類似Path(args[0])的代碼,這可能是您的輸入。 然后Path(args[1])可能是 output。

因此,您只需在每個步驟中將這些 arguments 鏈接在一起......

step1 = ...
   .args(new String[] {"/in", "/stage1" })
...
final = ...
   .args(new String[] {"/stageN", "/out" }) 

或者,將您的代碼轉換為 Spark/Flink 或 Hive 查詢,其中自動處理多個 mapreduce 階段

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM