使用Luigi python运行Hadoop jar

时间:2015-04-22 15:17:34

标签: python hadoop pipeline luigi

我需要使用python中的Luigi运行Hadoop jar作业。我搜索并找到了在Luigi中编写mapper和reducer的例子,但没有直接运行Hadoop jar的例子。

我需要运行直接编译的Hadoop jar。我该怎么做?

1 个答案:

答案 0 :(得分:3)

您需要使用luigi.contrib.hadoop_jar包(code)。

特别是,您需要扩展HadoopJarJobTask。例如,像那样:

from luigi.contrib.hadoop_jar import HadoopJarJobTask
from luigi.contrib.hdfs.target import HdfsTarget

class TextExtractorTask(HadoopJarJobTask):
    def output(self):
        return HdfsTarget('data/processed/')

    def jar(self):
        return 'jobfile.jar'

    def main(self):
        return 'com.ololo.HadoopJob'

    def args(self):
        return ['--param1', '1', '--param2', '2']

您还可以包含使用maven构建jar文件到工作流程:

import luigi
from luigi.contrib.hadoop_jar import HadoopJarJobTask
from luigi.contrib.hdfs.target import HdfsTarget
from luigi.file import LocalTarget

import subprocess
import os

class BuildJobTask(luigi.Task):
    def output(self):
        return LocalTarget('target/jobfile.jar')

    def run(self):
        subprocess.call(['mvn', 'clean', 'package', '-DskipTests'])

class YourHadoopTask(HadoopJarJobTask):
    def output(self):
        return HdfsTarget('data/processed/')

    def jar(self):
        return self.input().fn

    def main(self):
        return 'com.ololo.HadoopJob'

    def args(self):
        return ['--param1', '1', '--param2', '2']

    def requires(self):
        return BuildJobTask()