使用 Oozie 在 AWS EMR 上进行 Apache Crunch 作业

问题描述 投票:0回答:1

背景:

  • 我想在 AWS EMR 上运行 apache crunch 作业
  • 此作业是 oozie java 操作和 oozie 子工作流管道的一部分(此特定作业是子工作流的一部分)。在oozie中,我们有一个主工作流程,在这个工作流程中,我们有多个java操作(指定条目,它应该运行的java类)和一个子工作流程(其中包含多个java操作。其中一个java操作有我们的作业驱动程序类) ).
  • 此作业正在从 HDFS 读取一些数据并写入 HDFS(读取 PCollection 中的数据 -> 对其进行一些处理 -> 将 PCollection 写入 HDFS。

问题:

  • PCollection 未写入 hdfs(虽然我们执行了 PCollection.write,但我们在 HDFS 上看不到任何内容,但在该目录中生成了 _SUCCESS 文件)。

我所看到的事情:

  • 我创建了一个虚拟方法,它采用一个 PCollection(由 3 个字符串生成),对其进行映射(将所有字母更改为大写),然后将生成的 PCollection 写入 HDFS。我在子工作流 java 操作(包含不写入 HDFS 的作业的操作)和顶级 java 操作(我所说的顶级 java 操作是指主工作流程下的操作)中添加了这段代码。在子工作流程中我遇到了同样的问题,结果不是写入 HDFS,而是在顶层 Java Action 上写入虚拟输出,我可以看到写入 HDFS 的文件。

oozie 管道示例:

  • 主要工作流程
  •   Java_Action_1 (which points to a java class that is being run)
    
  •   Java_Action_2 (which points to a java class that is being run)
    
  •   Java_Action_3 (which points to a java class that is being run)
    
  •   Subworkflow_1 (has a fork and join step, seen it in the Oozie UI)
    
  •         Java_Action_1_in_subworkflow (which points to a java class that is being run) -> job that is not writing to HDFS
    
  •          Java_Action_1_in_subworkflow (which points to a java class that is being run)
    
  •   Java_Action_4 (which points to a java class that is being run)
    
  •   Java_Action_5 (which points to a java class that is being run)
    
  •   etc.
    
hadoop mapreduce amazon-emr oozie apache-crunch
1个回答
0
投票

问题出在 fs.defaultFS hadoop 属性上。我们使用的是 viewfs,并且提供给 apache crunch 的输出路径以 viewfs:// 为前缀。因此它无法写入 HDFS。所以我们在写入阶段将defaultFS设置为hdfs://。读取来自 s3 存储桶,该存储桶作为 /folder_name 安装在 hdfs 上。对于读取阶段,文件必须以 viewfs:// 为前缀。

© www.soinside.com 2019 - 2024. All rights reserved.