技术开发 频道

Java Web应用程序:Oozie及其使用方式

      简单示例

  为了向你展示Oozie的使用方法,让我们创建一个简单的示例。我们拥有两个Map/Reduce作业[3]——一个会获取最初的数据,另一个会合并指定类型的数据。实际的获取操作需要执行最初的获取操作,然后把两种类型的数据——Lidar和Multicam——合并。为了让这个过程自动化,我们需要创建一个简单的Oozie工作流(代码1)

<!--
Copyright (c) 2011 NAVTEQ! Inc. All rights reserved.
NGMB IPS ingestor Oozie Script
-->
<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>

  代码1: 简单的Oozie工作流

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

  创建工作流之后,我们需要正确地对其进行部署。典型的Oozie部署是一个HDFS目录,其中包含workflow.xml(代码1)、config-default.xml和lib子目录,其中包含有工作流操作所要使用的类的jar文件。

        图1: Oozie部署

  config-default.xml文件是可选的,通常其中会包含对于所有工作流实例通用的工作流参数。代码2中显示的是config-default.xml的简单示例。

<configuration>
    
<property>
        
<name>jobTracker</name>
        
<value>sachicn003:2010</value>
    
</property>
    
<property>
        
<name>nameNode</name>
        
<value>hdfs://sachicn001:8020</value>
    
</property>
    
<property>
        
<name>queueName</name>
        
<value>default</value>
    
</property>
</configuration>

  代码2: Config-default.xml

  完成了工作流的部署之后,我们可以使用Oozie提供的命令行工具[5],它可以用于提交、启动和操作工作流。这个工具一般会运行在Hadoop簇集[7]的edge节点上,并需要一个作业属性文件(参见配置工作流属性),见代码3。

oozie.wf.application.path=hdfs://sachicn001:8020/user/blublins/workflows/IPSIngestion
jobTracker=sachicn003:2010
nameNode=hdfs://sachicn001:8020

  代码3: 作业属性文件

  有了作业属性,我们就可以使用代码4中的命令来运行Oozie工作流。

  oozie job –oozie http://sachidn002.hq.navteq.com:11000/oozie/ -D driveID=729-pp00002-2011-02-08-09-59-34 -D lidarChunk=4 -D signageChunk=20 -config job.properties –run

  列表4: 运行工作流命令

0
相关文章