我有气流作业,它们在EMR集群上运行良好。我需要的是,假设我有4个气流作业,需要一个EMR集群,比如说20分钟来完成任务。为什么我们不能在DAG运行时创建一个EMR集群,一旦作业完成,它将终止创建的EMR集群。
最好的方法可能是在创建EMR集群的Airflow DAG的根部有一个节点,然后在DAG的最末端有另一个节点,在所有其他节点完成后将集群向下旋转。
检查我的实现,DAG将创建emr集群,并针对s3中的数据运行spark作业,完成后自动终止。
https://beyondexperiment.com/vijayravichandran06/aws-emr-orchestrate-with-airflow/
当然,这将是资源的最有效利用。让我警告你:这里面有很多细节;我会尽量列出尽可能多的让你开始。我鼓励您添加自己的全面答案,列出您遇到的任何问题和解决方案(一旦您完成此操作)
关于集群创建/终止
>
不要担心,如果你不使用AWS
秘书访问密钥
(并完全依赖于IAM
角色);实例化任何AWS
相关的钩子
或操作符
在气流
将自动返回到基础EC2
的附加IAM
角色
如果您没有使用EMR-Steps API进行作业提交,那么您还必须使用Sensors
手动检测上述操作。已经有一个用于轮询创建阶段的传感器叫做EmrJobFlowSensor
,您可以稍微修改它来创建一个用于终止的传感器
在job_flow_extra
中传递群集配置JSON。您也可以传递配置在一个连接
的(如my_emr_conn
)额外的
参数,但避免这样做,因为它经常打破SQLAlChemy
ORM加载(因为它是一个大的json
)
关于工作提交
>
对于特定于应用程序的情况(如Hive
,Livy
),您可以使用它们的特定方式。例如,您可以使用HiveServer2Hook
提交Hive
作业。这里有一个棘手的部分:run\u job\u flow()
调用(在集群创建阶段进行)只会为您提供一个job\u flow\u id
(集群id)。必须使用EmrHook
调用description\u cluster()
来获取主节点的私有IP。使用此选项,您将能够以编程方式创建连接
(例如Hive Server 2 Thrift
连接),并使用它将计算提交到集群。在完成工作流程之前,不要忘记删除这些连接(为了美观)。
最后是与集群交互的老bash。为此,您还应该在群集创建阶段传递一个EC2
密钥对。之后,您可以以编程方式创建一个SSH
连接,并使用它(带有SSHHook
或SSHoperator
)在群集上运行作业。在Airflow
中阅读更多关于SSH的内容
特别是对于提交Spark
作业到远程Emr
集群,请阅读此讨论
我希望创建一个EMR集群,其中出于安全原因,没有为任何实例分配公共IP地址。我已经能够在我的VPC中启动集群,并使用我自己的自定义安全组,但由于某些原因,默认情况下所有节点都分配了一个公共IP地址。 我在EMR CLI文档中找不到有关如何禁用此功能的任何信息:http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-
我们有一个Hadoop集群,运行在带有Spark 1.6.1的AWS弹性MapReduce(EMR)中。进入集群主机并提交Spark作业没有问题,但我们希望能够从另一个独立的EC2实例提交它们。 另一个“外部”EC2实例设置了安全组,以允许所有TCP流量进出EMR实例主从实例。它有一个直接从Apache网站下载的Spark的二进制安装。 我不知道是怎么回事。非常感谢您的任何帮助。
我有一个EMR集群,运行一个火花流作业成功了几天。但几天后,群集因步骤失败而终止。我查了日志上面写着 对于此错误,我进行了检查,发现对于JRE内存不足。 我发现集群创建EMR steps日志并存储在路径/mnt/var/logs/hadoop/steps/step_id/上,在创建集群时,我给出了一个logUri路径,日志根据该路径复制到s3位置。所以我的猜测是,由于这些日志,步骤失败正在发生。
我们正在EC2实例上构建一个airflow服务器,该服务器与EMR集群通信以运行spark作业。我们试图提交一个BashOperator DAG,它为一个简单的wordcount应用程序运行spark-submit命令。下面是我们的spark提交命令: 我们得到以下错误:线程“main”org.apache.spark.sparkException中的异常:当使用主“yarn”运行时,必须在环境中
这是我第一次尝试配置纱线调度器,但它不像我希望的那样工作。集群最初作为FIFO工作,我试图让作业并行运行。我已经在yarn-site.xml的顶部添加了 然后添加文件/etc/hadoop/conf.empty/fail-scheduler.xml: 因此,在这之后,我停止并启动了yarn资源管理器,我在yarn应用控制台上看到了Fair Scheduler!但是,当尝试在集群上运行多个作业时,A
我刚刚设置了一个AWS EMR集群(带有Spark 2.3.2的EMR版本5.18)。我ssh进入主maschine,并运行spark-shell或pyspark,得到以下错误: 我是新的火花和EMR,不知道该怎么做。是否有一些配置步骤我错过了或任何其他我必须提供使其工作? 谢谢你的帮助!