Hadoop 为什么oozie向Thread提交shell操作?

Hadoop 为什么oozie向Thread提交shell操作?,hadoop,scheduler,yarn,oozie,hadoop2,Hadoop,Scheduler,Yarn,Oozie,Hadoop2,我最近在学oozie。我对贝壳的作用有点好奇。我正在执行包含shell命令的shell操作,如 hadoop jar <jarPath> <FQCN> hadoop jar 运行此操作时,有两个正在运行的纱线作业 一个用于hadoop作业 一个用于shell操作 我不明白为什么shell action需要纱线来执行。我还尝试了电子邮件操作。它在没有纱线资源的情况下执行。要回答这个问题,区别在于 独立运行shell脚本(.sh文件或从CLI) 作为oozie工作流的一部

我最近在学oozie。我对贝壳的作用有点好奇。我正在执行包含shell命令的shell操作,如

hadoop jar <jarPath> <FQCN>
hadoop jar 运行此操作时,有两个正在运行的纱线作业

  • 一个用于hadoop作业

  • 一个用于shell操作


  • 我不明白为什么shell action需要纱线来执行。我还尝试了电子邮件操作。它在没有纱线资源的情况下执行。

    要回答这个问题,区别在于

  • 独立运行shell脚本(.sh文件或从CLI)
  • 作为oozie工作流的一部分运行shell操作。(oozie shell操作中的shell脚本)
  • 第一种情况非常明显


    在第二种情况下,oozie通过Thread(资源协商者)启动shell脚本,在安装oozie的集群上运行shell脚本,并在内部运行MR jobs以启动shell操作。因此,shell脚本在内部作为一个应用程序运行。oozie工作流的日志显示了在oozie中启动shell操作的方式。

    电子邮件只需要一个API调用,它不消耗RAM、CPU或磁盘I/O,只消耗一点点网络I/O。实际上,它是在oozie服务器内执行的唯一“操作”。其他一切都被转移到纱线上。这是一个核心的设计选择。记住雅虎!创建Oozie以运行原始MapReduce作业;其余的(java、shell、pig、hive、distcp…)都是在事后添加的,使用一个“启动器”作业,其中只有一个地图作为代理。只需一点谷歌搜索:“Oozie的一个基本设计原则是,除了工作流本身的执行之外,Oozie服务器从不运行用户代码。这通过将用户代码与Oozie的代码隔离开来确保了更好的服务稳定性。Oozie服务器也是无状态的,launcher作业使其保持这种状态成为可能。"