oozie

驴妈妈旅游网架构:
 1.日志上传:
        方法1:定义shell脚本  
            $ bin/hdfs dfs -put /user/local/nginx/datalog/access.log /nginx
        方法2: 使用日志采集框架flume   
 2.数据清洗:
        etl : MapReduce任务  
3.需求分析:
        hive -- hql   
        分析结果存储在hdfs上
        可以将hql语句封装打一个shell脚本中
4.将结果导出到mysql中进行下一步的报表展示:
        sqoop框架   
        可以将sqoop语句封装打一个shell脚本中
5.报表展示:
        sparingMVC  
        highcharts --报表展示插件   
        
    如何每天的定时执行以上任务:
        crontab:
            定时执行  
            不擅长处理多任务之间的依赖关系
     
        oozie:
            工作流调度执行                           
             workflow工作流定义:
                start-> shell action  //日志上传  
                    -> ok -> MR action  //日志清洗
                        -ok -> shell action 或者hive action  //分析
                        -error -> MR action  //日志清洗     
                            ->ok -> shell action 或者sqoop action //结果导出
            定义定时执行执行:
                coordinator定时任务:
                    定时触发或其他条件触发workflow工作流的执行
        
-------------------------------------------
任务调度工具:
     linux crontab :     
        最简单最常用的任务调度服务
         每周三的凌晨1点清空服务器的 /tmp  目录  
             0 1 * * 3 /bin/rm  -rf /tmp/*

     Azkaban:
        linkedin 领英 开源   --  kafka  
        批量的工作流任务调度器          
https://azkaban.github.io/
https://zhuanlan.zhihu.com/p/22184691?refer=dataeye         
        适合小公司,任务流的界面化管理
        功能简单,相当于是一个crontab的功能升级版及界面版

     zeus : 宙斯   
        阿里开源的    只有中文文档    图形界面化管理   
        zeus1
        zeus2  
        大公司  
        更新慢  

     oozie :
        cloudera公司开源 ,后期贡献给Apache  
        没有提供图形界面管理工具    
        编译工作流或定时任务需要编辑xml文件进行控制
        难以操作  
        
oozie的组装架构:
     Tomcat server:支持任务参数的交互web界面    
     oozie database:oozie需要一个数据库的支撑存储任务的元数据信息
    oozie功能组件:
         workflow:任务流,包括控制流节点,动作节点
            控制流节点:
                控制的任务的流程路径
                    job1->job3->job2->job4  
            动作节点:
                具体需要执行的job的任务信息
                job的执行结果(ok,error)影响流程路径
         coordinator
            对任务流workflow的时间控制调度
            控制workflow的生命周期(循环、定时、触发条件)
         bundle
            将多个coordinator时间控制调度进行绑定一起维护管理   
            
oozie的安装部署:
    官网文档:
http://oozie.apache.org/
http://oozie.apache.org/docs/4.0.0/DG_QuickStart.html  --安装部署文档
        
        安装使用oozie必须先安装好Hadoop
            ooize的动作节点本身就是一个MapReduce任务  
                sqoop任务-MapReduce map任务
            oozie需要在hdfs上创建一个oozie共享库
            oozie编辑的调度任务app文档需要上传到hdfs上才能执行    
1、确保Hadoop已经安装成功

2、上传解压oozie的安装包      
$ tar zxvf oozie-4.0.0-cdh5.3.6.tar.gz
    $ rm -rf oozie-4.0.0-cdh5.3.6.tar.gz

3、为oozie服务在Hadoop集群上配置一个代理用户以便获取Hadoop的使用权
    修改Hadoop的core-site.xml文件 ,添加配置:
  
    hadoop.proxyuser.com.bigdata.hosts //com.bigdata替换为你所使用的普通用户名称
    *
  
  
    hadoop.proxyuser.com.bigdata.groups//com.bigdata替换为你所使用的普通用户名称
    *
      
        
4、重启Hadoop服务  
$ sbin/stop-dfs.sh
    $ sbin/start-all.sh    

5、解压oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz
$ tar zxvf oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz -C /opt/modules/
 
    需在在oozie的安装目录下进行解压
    只有这样解压后才会在oozie的安装目录下生成一个hadooplibs目录
6、在ooize的安装目录下创建libext目录,并将hadooplibs/hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6/目录下所有的jar包拷贝到libext目录下   
  
   $ mkdir libext
    $ cp hadooplibs/hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6/*  libext/

7、将ext-2.2.zip包上传到libext目录下   
    
8、安装mysql数据库并创建oozie库
   
mysql> create database oozie 
            
9、拷贝mysql的驱动包到oozie的libext目录下  
    
$ cp /opt/modules/cdh/hive-0.13.1-cdh5.3.6/lib/mysql-connector-java-5.1.27-bin.jar /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/libext/       

10、修改oozie的配置文件oozie-site.xml  
 
   /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/conf

    搜索jdbc             
        oozie.service.JPAService.jdbc.driver
        com.mysql.jdbc.Driver
    
    
        oozie.service.JPAService.jdbc.url
        jdbc:mysql://192.168.88.134:3306/oozie
    
    
        oozie.service.JPAService.jdbc.username
        root
    
    
        oozie.service.JPAService.jdbc.password
        root123
        

    搜索 hadoop-conf     
        oozie.service.HadoopAccessorService.hadoop.configurations
        *=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/etc/hadoop
    

        *表示通配符,表示所有的Hadoop服务  
        
11、依次执行以下命令  
$ bin/oozie-setup.sh prepare-war [-d directory] [-secure]
                     sharelib create -fs [-locallib ]
                     sharelib upgrade -fs [-locallib ]
                     db create|upgrade|postupgrade -run [-sqlfile ]
     1)上传本地jar包到hdfs上  
        将oozie可调度的所有框架的依赖包上传到hdfs上                    
$ bin/oozie-setup.sh  sharelib create -fs hdfs://192.168.88.134:8020 -locallib oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz   
        在hdfs上的用户主目录下出现/user/beifeng/share/
        share目录即为共享jar包库的路径  

     2)去mysql中的oozie库里初始化oozie的状态           
       $ bin/oozie-setup.sh db create -run  -sqlfile oozie.sql          
        -sqlfile oozie.sql   表示将执行的sql命令写入到指定的文件中
 

   3)生成oozie的web工程的war包          
$ bin/oozie-setup.sh  prepare-war   
        INFO: Oozie is ready to be started

12、启动oozie服务
  $ bin/oozied.sh start  
    
http://192.168.134.101:11000/oozie/    oozie的web交互界面  
-------------------------------------------        
        
user 伪装 user  --Hadoop服务重启         
        
案例一:
    调度执行一个workflow,包含了一个job(shell action )        
   
$ tar zxf oozie-examples.tar.gz    解压官方案例模板tar包 
/opt/modules/cdh/oozie-4.0.0-cdh5.3.6/examples/apps  
目录为官方提供的oozie可以调度执行的任务的模板  
    $ mkdir myapps
    $ cp -r  /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/examples/apps/shell/  ./myshell     
将shell案例模板拷贝到自定义的应用目录下并重命名     
  $ ls myshell
     
   job.properties  
            job的属性文件
            内部的变量属性值会被workflow.xml调用
   workflow.xml   
            xml文件,定义了工作流向   
            
1、修改job.properties       
nameNode=hdfs://192.168.88.134:8020
# yarn的通讯地址
jobTracker=192.168.88.134:8032
# yarn的任务的队列形式,使用默认
queueName=default
#定义一个用户自定义应用在hdfs上的目录,这个是用户自定义应用的根目录
examplesRoot=examples
# 定义的用户应用的workflow.xml在hdfs上的存储路径
# 当我们执行一个oozie的工作流任务时系统会到该路径下找到对应的workflow.xml文件
# 注意在引用变量时加 ‘/’ ,在定义变量时前后就不需要在加‘/’
oozie.wf.application.path=${nameNode}/${examplesRoot}/myshell

2、修改    workflow.xml  
    定义一个被oozie调度执行的shell脚本
   
$ vi check_mem.sh
        #!/bin/bash
        /usr/bin/free -m >> /tmp/mem.log    
    $ sh check_mem.sh  手动执行测试下是否可以正常执行  
   
 在job.properties中添加shell脚本的变量名     
sh_name=check_mem.sh    

-------------------------
//name的值可以修改,为该workflow的名称
      开始一个workflow
      action任务标签
        
            ${jobTracker}
            ${nameNode}
            
                
                    mapred.job.queue.name
                    ${queueName}
                
            
            ${sh_name} 声明要执行的脚本的名称,
            ${nameNode}/${examplesRoot}/myshell/${sh_name}#${sh_name}
                定义的是被调度的脚本在hdfs上的路径
                最后的#${sh_name}表示通过#创建一个软连接到当前调度执行该脚本的集群节点工作目录中,这样无论集群中的哪台服务器执行该shell任务都可以从对应的hdfs路径下获取此脚本    
            
        
        
        
    
    
        Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]              
    
    
    
-----------------------        
3、 上传自定义应用到hdfs上    
    上传到用户自定义应用在hdfs上的根目录  : /examples   
$ bin/hdfs dfs -mkdir /examples   先创建应用的根目录
$ bin/hdfs dfs -put /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/myapps/myshell/ /examples   上传自定义应用到hdfs上  
    注意:
        job.properties文件可以不上传到hdfs上,在提交oozie任务时会直接从本地加载该属性文件
        workflow.xml和被调度的shell脚本必须上传到hdfs上对应的路径下
        如何workflow.xml和被调度的shell脚本进行修改,修改过后一定要重新上传到hdfs上  
        
4、提交oozie任务  
$ bin/oozie job -oozie http://localhost:11000/oozie -config /opt/cdh/modules/oozie-4.0.0-cdh5.3.6/myapps/myshell/job.properties -run    
    
5、查看结果        
  http://192.168.88.134:11000/oozie/ 查看所提交的workflow执行情况  
        如果workflow的运行状态是suspended(挂起暂停),看看历史服务器是否开启
        Caused by: java.net.ConnectException: Call From bigdata01.project.com/192.168.134.101 to bigdata01.project.com:10020
http://192.168.134.101:8088/cluster  查看oozie的任务触发了几个MapReduce任务
    
6、杀死某个oozie job  
$ bin/oozie job -oozie http://localhost:11000/oozie   -kill 0000000-171017143246549-oozie-beif-W
   
    
------------------------------------------------------------------
案例二:
    在案例一的workflow基础上增加一个shell action
    
        job1
            ->ok -> end
            ->error -> job2  
                ->ok  -> job3
                ->error -> kill  
    定义另外一个被调度的shell脚本
        $ cp check_mem.sh check_df.sh
        $ vi check_df.sh  
            #!/bin/bash
            /bin/df  -h >> /tmp/mem.log
        $ df -h  >> /tmp/mem.log   测试是否可用
        
        
1、修改job.properties
    添加变量:
        sh_name1=check_df.sh
2、修改    workflow.xml            
------
    
    
        
            ${jobTracker}
            ${nameNode}
            
                
                    mapred.job.queue.name
                    ${queueName}
                
            
            ${sh_name}
            ${nameNode}/${examplesRoot}/myshell/${sh_name}#${sh_name}
        
         修改第一个action执行成功后的跳转标签
        
    
      //修改action的name
        
            ${jobTracker}
            ${nameNode}
            
                
                    mapred.job.queue.name
                    ${queueName}
                
            
            ${sh_name1} //修改脚本的变量名
            ${nameNode}/${examplesRoot}/myshell/${sh_name1}#${sh_name1} //修改脚本的变量名
        
        
        
    
    
        Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
    
    
----        
             
3、测试执行
     上传check_df.sh脚本到hdfs的/examples/myshell下
  $ bin/hdfs dfs -put /opt/cdh/modules/oozie-4.0.0-cdh5.3.6/myapps/myshell/check_df.sh  /examples/myshell

     替换hdfs上/examples/myshell目录下的 workflow.xml    
       
$ bin/hdfs dfs -rm /examples/myshell/workflow.xml
$ bin/hdfs dfs -put /opt/modules/cdh/oozie-4.0.0-cdh5.3.6/myapps/myshell/workflow.xml  /examples/myshell
    
$ sbin/mr-jobhistory-daemon.sh start historyserver       //一定要开启日志        
 
   $ bin/oozie job -oozie http://localhost:11000/oozie -config /opt/modules/oozie-4.0.0-cdh5.3.6/myapps/myshell/job.properties -run        
        
4、查看结果        
http://192.168.134.101:11000/oozie/   查看所提交的workflow执行情况  
http://192.168.134.101:8088/cluster  查看oozie的任务触发了几个MapReduce任务         
        
        
        
        
        
        
        
        
        
        
    
    
        
            
















你可能感兴趣的:(oozie,大数据,大数据开发)