您的位置:首页 > 运维架构 > Shell

在Oozie 中调度执行shell、hive 脚本,以及通过shell脚本执行hive/sqoop/shell脚本的方法

2016-06-26 21:11 567 查看
  最近项目需要用到OOzie工具,可是找了好久,也没有找到一个完整的、统一的解决和部署方案。经过努力,终于打通了其中的所有环节,解决了各种坑爹的问题。

  首先,就项目需求做一个简单的介绍:

     项目需要从mysql中导入数据到hive进行离线计算后,再导回到mysql。过程很简单,所有流程通过shell脚本实现了调度。

  

问题描述:shell调度脚本执行很好,但是放到Oozie上调度执行,却发现了各种坑。第一个大坑页面上运行结果显示成功,但是结果表中却并没有数据。显然,执行的过程中肯定有环节出了问题。

解决策略: 将调度脚本中的各个流程分拆开来,单独放到一个shell脚本中,然后用Oozie调度执行。具体分拆步骤如下:

一、shell 脚本中执行shell脚本。

     在cloudera 的官网(http://gethue.com/use-the-shell-action-in-oozie/)上给出了一个demo,但是只是执行shell脚本自身。那对于shell脚本中执行shell脚本的情况,与demo中的方法类似。也要指明shell脚本的名称以及路径。如图1所示:

    需要注意的是:1、文件的权限必须具有可执行权限。本例采用了“777”权限。 2、第一个输入框处填包含后缀的文件名,文件部分的输入框要包含调度脚本和被调度脚本的完整文件名(包含路径和后缀),且都具有可执行权限。

   

                                                                       图1  shell脚本中包含shell脚本

二、执行hive脚本。

    在图2中的第一个输入框输入hdfs上的hive脚本完整路径加上文件名(含后缀),hive XML输入框部分输入hive-site.xml文件的路径。也可以点击界面右上角的设置按钮,对hive-site.xml文件进行全局设置。如图3所示。需要注意的是:1、上传hive-site.xml文件至hdfs (本例为/user/admin/),且权限为755.权限太高不会认。 3、此处的hive-site.xml 文件为”/opt/cloudera-manager/cm-5.4.7/run/cloudera-scm-agent/process/650-oozie-OOZIE_SERVER/hive-conf/hive-site.xml“。查找的办法为:find
/opt -name hive-site.xml 。如图2所示

图2  ooz
4000
ie执行hive脚本

                                         图3   hive-site.xml文件全局设置

3、shell脚本中执行hive脚本

       过程与shell执行shell类似。不过需要注意的是,如果没有对job进行图3所示的全局设置,则需要在文件部分添加hive-site.xml文件。此处略。

4、shell 执行sqoop命令

         oozie 本身可以直接执行sqoop命令,但是比较讨厌的是,一种是要输入很多很多的参数,一种是不能够包含参数中不能包含空格。而且不支持动态传参数,比如说每天自动执行sqoop命令。因此,理想的办法自然是放在shell脚本中调度。

        执行的方法,说白了,其实也很简单。跟shell调度shell 类似。不过需要注意的是:

1、sqoop导入数据到hive中,那hive指定的仓库的路径或外部表所在的路径一定要可写 ,最好设置为766.否则导入的文件无法写人指定目录,而一旦出错,通过oozie的日志,也很难定位错误的地方。

         2、如果是导入具有多分区的分区表,则第一级分区的目录的权限必须设置为可写,如766,该过程在shell脚本中,执行sqoop命令前就必须设置好。第二级分区的文件目录则无所谓。 本例中的设置如图4所示:

     

图4  shell调度执行sqoop命令

          5、shell脚本同时调度执行hive/sqoop/shell脚本

                 方法同以上。需要注意的几点:1、必须包含所有的文件。  2、所有文件必须在同一目录下。在shell脚本中动态获取的目录不起作用,如shell和hive脚本置于不同目录,执行的时候,就无法执行hive脚本。 3、文件权限问题。 4、虽然在本例测试的过程中,发现不用包含hive-site.xml文件可以正常执行,为防万一,建议各位加上。本例中的配置如图5所示:

   

                                                 图5   shell调度hive、shell、sqoop脚本    

      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: