Cloudera Manager 中Oozie 配置HIVE workflow

参考博客地址:http://shiyanjun.cn/archives/664.html

前提是你的hive和你的oozie都已经配置好了。hive配置很简单,oozie配置中的问题可以看我的上一篇博客。

分为几步,
1 hive-site.xml 及对应版本的hive的jar包,都要上传到hdfs。你肯定在hdfs上已经建立了对应的目录。
      针对我装的cm5.7,相对应的目录是:
            hive-site.xml:/opt/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/etc/hive/conf.dist/hive-site.xml
            相对应的hive jar包:/opt/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/lib/hive/lib(注意mysql的驱动jar包也放在里面,如果你的hive元数据库为Mysql)
2 配置主要是三个文件,
job.properties      
workflow.xml       流程定义
script.q           存放你要执行的hql语句,参数可以通过workflow.xml中的param传过来。

job.properties 中需要加上
hiveSitePath=hdfs://node1:8020/user/root/hive/hive-site.xml    root是我的oozie用户,可以改成你的hdfs目录
oozie.libpath=hdfs://node1:8020/user/root/share/lib/hive

此外,需要注意的就是 job.properties 中,jobTracker=node1:8032根据你的hadoop的实际配置来填写,如果没有在配置中找不到这样的设置,就像这样去填写yarn的端口就可以了。

最后   oozie.use.system.libpath=true
例如我的job.properties如下配置:
nameNode=hdfs://cloud171:8020
jobTracker=cloud171:8032(这个是基于yarn的,hadoop的是8021)
queueName=default(job.properties里面的参数会在workflow.xml中引用${queueName})
hiveSitePath=hdfs://cloud171:8020/user/hive/hive-site.xml
oozie.libpath=hdfs://cloud171:8020/user/hive/share/lib(就是上面的hive依赖的jar包put到hdfs上这个)

在Oozie workflow的hive action中,也可以支持hive脚本的参数变量,使用${VARIABLES}来表示。

以下是官网中对hive action的语法例子:


    ...
    
        
            [JOB-TRACKER]
            [NAME-NODE]
            
               
               ...
               
               ...
            
            [HIVE SETTINGS FILE]
            
                
                    [PROPERTY-NAME]
                    [PROPERTY-VALUE]
                
                ...
            
            
            [PARAM-VALUE]
                ...
            [PARAM-VALUE]
            [FILE-PATH]
            ...
            [FILE-PATH]
            ...
        
        
        
    
    ...

介绍一下这个语法中有几个参数:

  1. prepare 如果需要在hive作业之前创建或删除HDFS目录,则可以增加prepare参数,指定需要创建或删除的HDFS路径。
  2. job-xml 指定hive-site.xml所在HDFS上的路径;如果是CDH搭建的集群,则可以在任何一台hive gateway机器上的/etc/hive/conf目录下找到该配置文件。如果不指定该文件路径,hive action就不work。
  3. configuration 包含传递给hive作业的参数,可以没有这个配置项,这样就全部使用默认配置
  4. script 指定hql脚本所在HDFS上的路径;这个参数是hive action必须的。这个hql脚本中,可以使用${VARIABLES}来表示参数,获取在hive action中定义的param参数配置
  5. param 定义在hql脚本中所需要的变量值
如下是我在生产环境中使用hive action的一个样例:



    

    
        
            ${jobTracker}
            ${nameNode}
            ${nameNode}/user/hive/hive-site.xml
          
            
                
                    mapred.job.queue.name
                    ${queueName}
                
            
            
 
        
        
        
    

    
        Hive failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
    
    


重点:oozie作业流程解析

1)job.properties文件可以不上传到hdfs中,是在执行oozie job ...... -config时,批定的linux本地路径
2)workflow.xml文件,一定要上传到job.properties的oozie.wf.application.path对应的hdfs目录下
3)job.properties中的oozie.use.system.libpath=true指定oozie使用系统的共享目录
4)job.properties中的oozie.libpath=${nameNode}/user/${user.name}/apps/mymr,可以用来执行mr时,作业导出的jar包存放位置,否则可能报找不到类的错误
5)oozie调度作业时,本质也是启动一个mapreduce作业来调度,workflow.xml中设置的队列名称为调度作业mr的队列名称。所以如果想让作业运行在指定的队列时,需要在mr或hive中指定好
Cloudera Manager 中Oozie 配置HIVE workflow_第1张图片


7、检测workflow.xml文件的正确性
      oozie validate workflow.xml
     

8、编写workflow.xml文件
        控制节点:
      1)start节点
           

      2)end节点
             

      3)kill节点
           
                "logmsg"
           

      4)decision决策节点
           
               
                    [PREDICATE]
                    ......
                   
               
           

      5)fork分支节点
           
               
                ......
               
           

      6)join会签节点
           
动作节点:
       1)map-reduce配置:
     
   
   
       
            ${jobTracker}
            ${nameNode}
           
               
           
           
               
                    mapred.job.queue.name
                    ${queueName}
               
               
                    mapred.mapper.class
                    org.apache.oozie.example.SampleMapper
               
               
                    mapred.reducer.class
                    org.apache.oozie.example.SampleReducer
               
               
                    mapred.map.tasks
                    1
               
               
                    mapred.input.dir
                    /user/${wf:user()}/${examplesRoot}/input-data/text
               
               
                    mapred.output.dir
                    /user/${wf:user()}/${examplesRoot}/output-data/${outputDir}
               
           
       
       
       
   
   
        Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
   
   

     2)hive动作节点配置
   
   
   
       
            ${jobTracker}
            ${nameNode}
           
               
               
           
           
               
                    mapred.job.queue.name
                    ${queueName}
               
           
           
            INPUT=/user/${wf:user()}/${examplesRoot}/input-data/table
            OUTPUT=/user/${wf:user()}/${examplesRoot}/output-data/hive
       
       
       
   
   
        Hive failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
   
   


 3)sqoop动作节点
   
   
   
       
            ${jobTracker}
            ${nameNode}
           
               
               
           
           
               
                    mapred.job.queue.name
                    ${queueName}
               
           
            import --connect jdbc:hsqldb:file:db.hsqldb --table TT --target-dir /user/${wf:user()}/${examplesRoot}/output-data/sqoop -m 1
            db.hsqldb.properties#db.hsqldb.properties
            db.hsqldb.script#db.hsqldb.script
       
       
       
   
   
        Sqoop failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
   
   


最后执行hive workflow命令如下:

在命令行下执行:oozie job -oozie https://cloud174:11000/oozie -config  /opt/job.properties -run

因为我的job.properties是放在/opt下,所以是下面的地址,根据你自己的地址去下


下面是一些客户端的oozie命令可参考下:

1.提交作业,作业进入PREP状态 
oozie job -oozie 
http://localhost:11000/oozie -config job.properties -submit 
job: 14-20090525161321-oozie-joe


2.执行已提交的作业

oozie job -oozie

http://localhost:11000/oozie -start 14-20090525161321-oozie-joe 

 

3.直接运行作业 
oozie job -oozie 
http://localhost:11000/oozie -config job.properties -run 

 

4.挂起作业,挂起前状态(RUNNING , RUNNIINGWITHERROR or PREP状态) 
workflow job will be in SUSPENDED status. 

 

5.杀死作业 
oozie job -oozie 
http://localhost:11000/oozie -kill 14-20090525161321-oozie-joe 

 

6.改变作业参数,不能修改killed状态的作业 
oozie job -oozie 
http://localhost:11000/oozie -change 14-20090525161321-oozie-joe -value endtime=2011-12-01T05:00Z;concurrency=100;2011-10-01T05:00Z 

7.重新运行作业 
oozie job -oozie 
http://localhost:11000/oozie -config job.properties -rerun 14-20090525161321-oozie-joe 
000000-130817230824019-oozie-ceny-W 
Rerunning a Coordinator Action or Multiple Actions 
$oozie job -rerun [-nocleanup] [-refresh] 
[-action 1, 3-4, 7-40] (-action or -date is required to rerun.) 
[-date 2009-01-01T01:00Z::2009-05-31T23:59Z, 2009-11-10T01:00Z, 2009-12-31T22:00Z] 
Rerunning a Bundle Job 
oozie job -rerun [-nocleanup] [-refresh] 
[-coordinator c1, c3, c4] (-coordinator or -date is required to rerun.) 
[-date 2009-01-01T01:00Z::2009-05-31T23:59Z, 2009-11-10T01:00Z, 2009-12-31T22:00Z] 
(if neither -coordinator nor -date is given, the exception will be thrown.)

 

8.检查作业状态 
oozie job -oozie 
http://localhost:11000/oozie -info 14-20090525161321-oozie-joe

oozie job -oozie http://localhost:11000/oozie -info 0000001-111219170928042-oozie-para-W@mr-node -verbose 

 

9.查看日志 
oozie job -oozie 
http://localhost:11000/oozie -log 14-20090525161321-oozie-joe 
oozie job -log [-action 1, 3-4, 7-40] (-action is optional.)

 

10.检查xml文件是否合规 
oozie validate myApp/workflow.xml

 

11.提交pig作业 
oozie pig -oozie 
http://localhost:11000/oozie -file pigScriptFile -config job.properties -X -param_file params

 

12.提交MR作业 
oozie mapreduce -oozie 
http://localhost:11000/oozie -config job.properties

 

如还有其他,可到oozie官网去查

http://oozie.apache.org/docs-----根据自己的oozie version去查看

你可能感兴趣的:(cloudera)