1、什么是oozie

      Oozie是一种Java Web应用程序,它运行在Java servlet容器,Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作,把多个Map/Reduce作业组合到一个逻辑工作单元中,从而完成更大型的任务。

 

f472184a-96d5-3307-8d4b-c92fcf5193b1.png

2、oozie的工作流机理

这个工作流定义了三个动作:ingestor、mergeLidar和mergeSignage。并把每个动作都实现为Map/Reduce[4]作业。这个工作流从start节点开始,然后把控制权交给Ingestor动作。一旦ingestor步骤完成,就会触发fork控制节点 [4],它会并行地开始执行mergeLidar和mergeSignage[5]。这两个动作完成之后,就会触发join控制节点[6]。join节点成功完成之后,控制权就会传递给end节点,它会结束这个过程。

<workflow-app xmlns='uri:oozie:workflow:0.1' name='NGMB-IPS-ingestion'> <start to='ingestor'/> <action name='ingestor'> <java> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <configuration> <property> <name>mapred.job.queue.name</name> <value>default</value> </property> </configuration> <main-class>com.navteq.assetmgmt.MapReduce.ips.IPSLoader</main-class> <java-opts>-Xmx2048m</java-opts> <arg>${driveID}</arg> </java> <ok to="merging"/> <error to="fail"/> </action> <fork name="merging"> <path start="mergeLidar"/> <path start="mergeSignage"/> </fork> <action name='mergeLidar'> <java> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <configuration> <property> <name>mapred.job.queue.name</name> <value>default</value> </property> </configuration> <main-class>com.navteq.assetmgmt.hdfs.merge.MergerLoader</main-class> <java-opts>-Xmx2048m</java-opts> <arg>-drive</arg> <arg>${driveID}</arg> <arg>-type</arg> <arg>Lidar</arg> <arg>-chunk</arg> <arg>${lidarChunk}</arg> </java> <ok to="completed"/> <error to="fail"/> </action> <action name='mergeSignage'> <java> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <configuration> <property> <name>mapred.job.queue.name</name> <value>default</value> </property> </configuration> <main-class>com.navteq.assetmgmt.hdfs.merge.MergerLoader</main-class> <java-opts>-Xmx2048m</java-opts> <arg>-drive</arg> <arg>${driveID}</arg> <arg>-type</arg> <arg>MultiCam</arg> <arg>-chunk</arg> <arg>${signageChunk}</arg> </java> <ok to="completed"/> <error to="fail"/> </action> <join name="completed" to="end"/> <kill name="fail"> <message>Java failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <end name='end'/></workflow-app>

 

3、oozie在hadoop安全机制中所起的作用

       Hadoop 1.0后,Hadoop安全机制出现了,该机制基于成熟的kerberos实现,Kerberos本身的复杂性,使得Hadoop 启用安全机制后将变得非常难以管理,

Hadoop 1.0安全机制的引入,使得Hadoop上层系统不能够将实际用户传递到Hadoop层。举例说明,对于Oozie这个作业调度系统而言,通常我们会创建一个叫“oozie”的用户启动这个服务,这样,所以从Oozie发出的作业的提交者全部变成了oozie,不管原始提交者是user1还是user2,也就是说,实际的用户被掩盖了。

 

 

为了解决该问题,Hadoop引入了安全伪装的功能,该功能允许一个超级用户代理其他用户执行作业或者命令,但对外看来执行者仍是普通用户,比如在Oozie中,我们需要达到这样的效果:用户user1提交了一个作业流,该作业流的执行者实际上是oozie,但对外看来应是user1

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐