发明内容
本发明的主要目的在于提供一种工作流的调用方法和装置,以解决现有技术中单独安装工作流调用工作时占用内存的问题。
为了实现上述目的,根据本发明实施例的一个方面,提供了一种工作流的调用方法。根据本发明的工作流的调用方法包括:在主Shell脚本中设置多个子Shell脚本的调用方式;获取所述多个子Shell脚本对应的Hadoop作业;按照所述调用方式调用所述多个子Shell脚本以执行所述Hadoop作业,直至所述多个子Shell脚本调用完毕,得到调用结果,其中,所述调用结果包括第一结果和第二结果;在所述调用结果为所述第一结果时,执行第一Hadoop作业;以及在所述调用结果为所述第二结果时,执行第二Hadoop作业。
进一步地,所述调用方式为并行调用,按照所述调用方式调用所述多个子Shell脚本以执行所述Hadoop作业,直至所述多个子Shell脚本调用完毕,得到调用结果包括:并行调用所述多个子Shell脚本,并记录每个子Shell脚本的返回值;判断所述多个子Shell脚本是否已经调用完毕;如果所述多个子Shell脚本已经调用完毕,则读取所述每个子Shell脚本的返回值;对所述多个子Shell脚本的返回值进行计算,得到调用结果。
进一步地,判断所述多个子Shell脚本是否已经调用完毕包括:将所述每个子Shell脚本的进程标识写入临时文件中;判断所述多个子Shell脚本中的第一子Shell脚本是否已经执行完毕;如果判断出所述第一子Shell脚本已经执行完毕,则删除所述临时文件中的所述第一子Shell脚本的进程标识;判断所述临时文件中所述子Shell脚本是否已经都被删除;如果所述临时文件中的所述子Shell脚本都已经被删除,则确定所述多个子Shell脚本已经调用完毕。
进一步地,所述调用方式为顺序调用,按照所述调用方式调用所述多个子Shell脚本以执行所述Hadoop作业,直至所述多个子Shell脚本调用完毕,得到调用结果包括:获取所述主Shell脚本中的当前子Shell脚本;执行所述当前子Shell脚本,得到返回值;判断所述返回值为第一返回值或者第二返回值;如果所述返回值为第一返回值,则调用第一分支Shell脚本;以及如果所述返回值为第二返回值,则调用第二分支Shell脚本。
进一步地,在按照所述调用方式调用所述多个子Shell脚本以执行所述Hadoop作业,直至所述多个子Shell脚本调用完毕,得到调用结果之前,所述方法还包括:将所述主Shell脚本加入到crontab服务中以定时调用所述主Shell脚本。
为了实现上述目的,根据本发明实施例的另一方面,提供了一种工作流的调用装置。根据本发明的工作流的调用装置包括:设置单元,用于在主Shell脚本中设置多个子Shell脚本的调用方式;获取单元,用于获取所述多个子Shell脚本对应的Hadoop作业;调用单元,用于按照所述调用方式调用所述多个子Shell脚本以执行所述Hadoop作业,直至所述多个子Shell脚本调用完毕,得到调用结果,其中,所述调用结果包括第一结果和第二结果;执行单元,用于在所述调用结果为所述第一结果时,执行第一Hadoop作业;以及在所述调用结果为所述第二结果时,执行第二Hadoop作业。
进一步地,所述调用方式为并行调用,所述调用单元包括:第一调用模块,用于并行调用所述多个子Shell脚本,并记录每个子Shell脚本的返回值;判断模块,用于判断所述多个子Shell脚本是否已经调用完毕;读取模块,用于在所述多个子Shell脚本已经调用完毕时,读取所述每个子Shell脚本的返回值;计算模块,用于对所述多个子Shell脚本的返回值进行计算,得到调用结果。
进一步地,所述判断模块包括:写入子模块,用于将所述每个子Shell脚本的进程标识写入临时文件中;第一判断子模块,用于判断所述多个子Shell脚本中的第一子Shell脚本是否已经执行完毕;删除子模块,用于在判断出所述第一子Shell脚本已经执行完毕时,删除所述临时文件中的所述第一子Shell脚本的进程标识;第二判断子模块,用于判断所述临时文件中所述子Shell脚本是否已经都被删除;确定子模块,用于在所述临时文件中的所述子Shell脚本都已经被删除时,确定所述多个子Shell脚本已经调用完毕。
进一步地,所述调用方式为顺序调用,所述调用单元包括:获取模块,用于获取所述主Shell脚本中的当前子Shell脚本;执行模块,用于执行所述当前子Shell脚本,得到返回值;判断模块,用于判断所述返回值为第一返回值或者第二返回值;第二调用模块,用于在所述返回值为第一返回值时,调用第一分支Shell脚本;以及在所述返回值为第二返回值时,调用第二分支Shell脚本。
进一步地,所述装置还包括:定时单元,用于在按照所述调用方式调用所述多个子Shell脚本以执行所述Hadoop作业,直至所述多个子Shell脚本调用完毕,得到调用结果之前,将所述主Shell脚本加入到crontab服务中以定时调用所述主Shell脚本。
根据发明实施例,通过Linux系统中的Shell脚本设置工作流,一个主Shell脚本可以调用多个子Shell脚本,每个子Shell脚本执行对应的Hadoop作业,并且在主Shell脚本中还设置有多个子Shell脚本的调用,也就实现了工作流的调用,从而解决了现有技术中单独安装工作流调用工作时占用内存的问题,达到了减少工作流调用所占用的内存的效果。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
名词解释:
Hadoop:是一个开源的分布式大数据计算平台。
Shell:为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。它是用户使用Linux的桥梁,系统管理员可以通过shell脚本批量执行命令,管理服务器。
Hadoop工作流:是由多个hadoop作业组成有先后顺序的作业流。
本发明实施例提供了一种工作流的调用方法。该工作流的调用方法可以直接利用Linux系统中的Shell脚本来执行简易的工作流,而无需单独安装工作流工具来调度Hadoop作业,不仅避免安装工作流工具的繁琐,还能减少工作流工具的内存占用,从而解决了现有技术中单独安装工作流工具执行调度工作时占用内存的问题。
图1是根据本发明实施例的工作流的调用方法的流程图。如图1所示,该工作流的调用方法包括如下步骤:
步骤S102,在主Shell脚本中设置多个子Shell脚本的调用方式。
一个主Shell脚本包括多个子Shell脚本,并记录了多个子Shell脚本的调用方式,例如,主Shell脚本中的子Shell脚本顺序调用或者并行调用。在脚本的调用方式为顺序调用时,主Shell脚本还可以设定多个子Shell脚本的调用顺序。
步骤S104,获取多个子Shell脚本对应的Hadoop作业。
每个子Shell脚本对应一个Hadoop作业,在调用子Shell脚本时,执行该子Shell脚本所对应的Hadoop作业。
步骤S106,按照调用方式调用多个子Shell脚本以执行Hadoop作业,直至多个子Shell脚本调用完毕,得到调用结果,其中,调用结果包括第一结果和第二结果。
步骤S108,在调用结果为第一结果时,执行第一Hadoop作业。
步骤S110,在调用结果为第二结果时,执行第二Hadoop作业。
在调用子Shell脚本执行完Hadoop之后,得到执行成功和执行失败两种结果。根据不同的调用结果执行不同的Hadoop作业。
如图2所示,子Shell脚本执行Hadoop作业后,判断执行结果是成功还是失败。如果执行成功,则返回值可以为0;如果执行失败,则返回值可以是-1。
在子Shell脚本执行Hadoop得到返回值之后,根据执行结果选择继续执行Hadoop作业。如图3所示,在执行子Shell脚本A之后,得到返回值,判断返回值显示执行成功时,调用子Shell脚本B;判断返回值显示执行失败时,执行退出动作。在显示执行失败时,也可以调用另外一个子Shell脚本。
通过上述实施例,通过Linux系统中的Shell脚本设置工作流,一个主Shell脚本可以调用多个子Shell脚本,每个子Shell脚本执行对应的Hadoop作业,并且在主Shell脚本中还设置有多个子Shell脚本的调用,也就实现了工作流的调用,解决了现有技术中单独安装工作流工具在执行时占用大量内存的问题,达到了减少工作流调用所占用的内存的效果
主Shell脚本的调用方式包括并行调用和顺序调用。以下结合图3至图5对本实施例的工作流调用方法进行说明。
1)顺序调用。
调用方式为顺序调用时,按照调用方式调用多个子Shell脚本以执行Hadoop作业,直至多个子Shell脚本调用完毕,得到调用结果包括:获取主Shell脚本中的当前子Shell脚本。执行当前子Shell脚本,得到返回值。判断返回值为第一返回值或者第二返回值。如果返回值为第一返回值,则调用第一分支Shell脚本。以及如果返回值为第二返回值,则调用第二分支Shell脚本。
图3示出了主Shell脚本中多个子Shell脚本执行的流程图。
步骤S301,执行子Shell脚本A。
步骤S302,判断执行子Shell脚本A后得到的返回值。如果返回值指示的是执行成功,则执行步骤S303;否则,执行步骤S304,退出。
步骤S303,执行子Shell脚本B,得到返回值。
步骤S305,判断执行子Shell脚本B得到的返回值是否指示执行成功,在指示子Shell脚本B执行成功后,执行步骤S306;否则执行步骤S307。
步骤S306,调用子Shell脚本D。
步骤S307,调用子Shell脚本C。
一个主Shell脚本中按照顺序调用的方式进行Hadoop作业时,通过判断每个子Shell脚本的返回值来执行不同分支的动作。
2)并行调用。
调用方式为并行调用时,按照调用方式调用多个子Shell脚本以执行Hadoop作业,直至多个子Shell脚本调用完毕,得到调用结果包括:并行调用多个子Shell脚本,并记录每个子Shell脚本的返回值。判断多个子Shell脚本是否已经调用完毕。如果多个子Shell脚本已经调用完毕,则读取每个子Shell脚本的返回值。对多个子Shell脚本的返回值进行计算,得到调用结果。
并行调用多个子Shell脚本时,同时调用主Shell脚本中的多个子Shell脚本,在主Shell脚本中的子Shell脚本都执行完毕后得到返回值,对多个返回值进行计算以得到调用结果。在对多个返回值进行计算时,可以根据预设的业务逻辑进行计算。例如,当返回值中有一个返回为失败则计算结果为-1,否则计算结果为0。
图4示出了主Shell脚本中多个子Shell脚本并行调用的流程图。
步骤S402,并行调用多个子Shell脚本。主Shell脚本通过nohup命令把需要并行运行的Hadoop作业压入后台实现并行执行的功能,即nohup调用子Shell脚本A,nohup调用子Shell脚本B,nohup调用子Shell脚本C,调用子Shell脚本后输出各个子Shell脚本的返回值。
步骤S404,循环判断存放进程标识的临时文件是否为空,如果临时文件不为空,则等待主Shell脚本调用的子Shell脚本执行,直至判断出临时文件为空。在判断出临时文件为空时,执行步骤S406。
步骤S406,读取各个子Shell脚本的返回值。
步骤S408,判断各个子Shell脚本的返回值的计算结果表示成功或者失败,在判断出返回值成功时,执行步骤S410;否则,执行步骤S412。
步骤S410,执行子Shell脚本D。
步骤S412,执行子Shell脚本E。
并行调用的多个子Shell脚本在执行结束后,得到多个子Shell脚本的返回值,对多个子Shell脚本的返回值进行计算,得到计算结果,这个计算结果就是调用结果。如步骤S408,计算多个子Shell脚本的返回值,得到调用结果。在调用结果为失败时,执行一个分支,即调用子Shell脚本D;在调用结果为成功时,执行另外一个分支,即调用子Shell脚本E。
优选地,在判断多个子Shell脚本是否已经调用完毕时,将每个子Shell脚本所对应的Hadoop作业的进程标识写入一个临时文件,Hadoop作业执行完毕则删除临时文件中的进程标识,当临时文件中的进程标识被删除后,即临时文件为空后,确定多个子Shell脚本已经调用完毕,即判断多个子Shell脚本是否已经调用完毕包括:将每个子Shell脚本的进程标识写入临时文件中。判断多个子Shell脚本中的第一子Shell脚本是否已经执行完毕。如果判断出第一子Shell脚本已经执行完毕,则删除临时文件中的第一子Shell脚本的进程标识。判断临时文件中子Shell脚本是否已经都被删除。如果临时文件中的子Shell脚本都已经被删除,则确定多个子Shell脚本已经调用完毕。
图5示出了判断多个子Shell脚本调用完毕的流程图。如图所示,在判断多个子Shell脚本调用完毕时,执行以下步骤:
步骤S502,调用子Shell脚本,并执行Hadoop作业。
步骤S504,把执行的Hadoop作业的进程标识写入临时文件中。
步骤S506,Hadoop作业执行完毕后把该进程标识从临时文件中删除。
通过上述实施例,并行调用子Shell脚本后,根据多个子Shell脚本的返回值来计算调用结果,并为不同的调用结果执行不同的分支,在不安装工作流工具的情况下,利用Linux本身的Shell脚本就能实现工作流的调用,解决了现有技术中单独安装工作流调用工作时占用内存的问题。
另外,该工作流的调用方法还可以将主Shell脚本加入到crontab服务中以定时调用主Shell脚本。通过crontab服务定时触发Hadoop作业,使得工作流的调用的操作更加方便。
本发明实施例还提供了一种工作流的调用装置。该装置可以通过计算机实现其功能。需要说明的是,本发明实施例的工作流的调用装置可以用于执行本发明实施例所提供的工作流的调用方法,本发明实施例的工作流的调用方法也可以通过本发明实施例所提供的工作流的调用装置来执行。
图6是根据本发明实施例的工作流的调用装置的示意图。如图6所示,该工作流的调用装置包括:设置单元10、获取单元30、调用单元50和执行单元70。
设置单元10用于在主Shell脚本中设置多个子Shell脚本的调用方式;
一个主Shell脚本包括多个子Shell脚本,并记录了多个子Shell脚本的调用方式,例如,主Shell脚本中的子Shell脚本顺序调用或者并行调用。在脚本的调用方式为顺序调用时,主Shell脚本还可以设定多个子Shell脚本的调用顺序。
获取单元30用于获取多个子Shell脚本对应的Hadoop作业;
每个子Shell脚本对应一个Hadoop作业,在调用子Shell脚本时,执行该子Shell脚本所对应的Hadoop作业。
调用单元50用于按照调用方式调用多个子Shell脚本以执行Hadoop作业,直至多个子Shell脚本调用完毕,得到调用结果,其中,调用结果包括第一结果和第二结果;
执行单元70用于在调用结果为第一结果时,执行第一Hadoop作业;以及在调用结果为第二结果时,执行第二Hadoop作业。
在调用子Shell脚本执行完Hadoop之后,得到执行成功和执行失败两种结果。根据不同的调用结果执行不同的Hadoop作业。
如图2所示,子Shell脚本执行Hadoop作业后,判断执行结果是成功还是失败。如果执行成功,则返回值可以为0;如果执行失败,则返回值可以是-1。
在子Shell脚本执行Hadoop得到返回值之后,根据执行结果选择继续执行Hadoop作业。如图3所示,在执行子Shell脚本A之后,得到返回值,判断返回值显示执行成功时,调用子Shell脚本B;判断返回值显示执行失败时,执行退出动作。在显示执行失败时,也可以调用另外一个子Shell脚本。
通过上述实施例,通过Linux系统中的Shell脚本设置工作流,一个主Shell脚本可以调用多个子Shell脚本,每个子Shell脚本执行对应的Hadoop作业,并且在主Shell脚本中还设置有多个子Shell脚本的调用,也就实现了工作流的调用,从而解决了现有技术中单独安装工作流工具在执行时占用大量内存的问题,达到了减少工作流调用所占用的内存的效果。
主Shell脚本的调用方式包括并行调用和顺序调用。以下结合图3至图5对本实施例的工作流调用方法进行说明。
1)顺序调用。
调用方式为顺序调用,调用单元包括:获取模块,用于获取主Shell脚本中的当前子Shell脚本;执行模块,用于执行当前子Shell脚本,得到返回值;判断模块,用于判断返回值为第一返回值或者第二返回值;第二调用模块,用于在返回值为第一返回值时,调用第一分支Shell脚本;以及在返回值为第二返回值时,调用第二分支Shell脚本。
执行子Shell脚本A。判断执行子Shell脚本A后得到的返回值。如果返回值指示的是执行成功,则执行执行子Shell脚本B,得到返回值,否则退出。判断执行子Shell脚本B得到的返回值是否指示执行成功,在指示子Shell脚本B执行成功后,执行调用子Shell脚本D。在指示子Shell脚本B执行失败后,调用子Shell脚本C。一个主Shell脚本中按照顺序调用的方式进行Hadoop作业时,通过判断每个子Shell脚本的返回值来执行不同分支的动作。
2)并行调用。
调用方式为并行调用时,调用单元包括:第一调用模块,用于并行调用多个子Shell脚本,并记录每个子Shell脚本的返回值;判断模块,用于判断多个子Shell脚本是否已经调用完毕;读取模块,用于在多个子Shell脚本已经调用完毕时,读取每个子Shell脚本的返回值;计算模块,用于对多个子Shell脚本的返回值进行计算,得到调用结果。
并行调用多个子Shell脚本时,同时调用主Shell脚本中的多个子Shell脚本,在主Shell脚本中的子Shell脚本都执行完毕后得到返回值,对多个返回值进行计算以得到调用结果。在对多个返回值进行计算时,可以根据预设的业务逻辑进行计算。例如,当返回值中有一个返回为失败则计算结果为-1,否则计算结果为0。
并行调用多个子Shell脚本。主Shell脚本通过nohup命令把需要并行运行的Hadoop作业压入后台实现并行执行的功能,即nohup调用子Shell脚本A,nohup调用子Shell脚本B,nohup调用子Shell脚本C,调用子Shell脚本后输出各个子Shell脚本的返回值。循环判断存放进程标识的临时文件是否为空,如果临时文件不为空,则等待主Shell脚本调用的子Shell脚本执行,直至判断出临时文件为空。在判断出临时文件为空时,读取各个子Shell脚本的返回值。
判断各个子Shell脚本的返回值的计算结果表示成功或者失败,在判断出返回值成功时,执行子Shell脚本D;否则,执行子Shell脚本E。
并行调用的多个子Shell脚本在执行结束后,得到多个子Shell脚本的返回值,对多个子Shell脚本的返回值进行计算,得到计算结果,这个计算结果就是调用结果。如步骤S408,计算多个子Shell脚本的返回值,得到调用结果。在调用结果为失败时,执行一个分支,即调用子Shell脚本D;在调用结果为成功时,执行另外一个分支,即调用子Shell脚本E。
优选地,在判断多个子Shell脚本是否已经调用完毕时,将每个子Shell脚本所对应的Hadoop作业的进程标识写入一个临时文件,Hadoop作业执行完毕则删除临时文件中的进程标识,当临时文件中的进程标识被删除后,即临时文件为空后,确定多个子Shell脚本已经调用完毕,即判断模块包括:写入子模块,用于将每个子Shell脚本的进程标识写入临时文件中;第一判断子模块,用于判断多个子Shell脚本中的第一子Shell脚本是否已经执行完毕;删除子模块,用于在判断出第一子Shell脚本已经执行完毕时,删除临时文件中的第一子Shell脚本的进程标识;第二判断子模块,用于判断临时文件中子Shell脚本是否已经都被删除;确定子模块,用于在临时文件中的子Shell脚本都已经被删除时,确定多个子Shell脚本已经调用完毕。
通过上述实施例,并行调用子Shell脚本后,根据多个子Shell脚本的返回值来计算调用结果,并为不同的调用结果执行不同的分支,在不安装工作流工具的情况下,利用Linux本身的Shell脚本就能实现工作流的调用,解决了现有技术中单独安装工作流工具在执行时占用大量内存的问题。
另外,装置还包括定时单元,用于在按照调用方式调用多个子Shell脚本以执行Hadoop作业,直至多个子Shell脚本调用完毕,得到调用结果之前,将主Shell脚本加入到crontab服务中以定时调用主Shell脚本。通过crontab服务定时触发Hadoop作业,使得工作流的调用的操作更加方便。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、移动终端、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。