使用maven为hadoop项目打包一个多项jar

时间:2013-04-30 12:35:51

标签: maven hadoop maven-3

我是maven的新手。我想用我的hadoop项目打包一个包含它的依赖项,然后像:

一样使用它
hadoop jar project.jar com.abc.def.SomeClass1 -params ...
hadoop jar project.jar com.abc.def.AnotherClass -params ...

我希望这个jar有多个入口点(不同的hadoop作业)。

我怎么能这样做?

谢谢!

1 个答案:

答案 0 :(得分:1)

有两种方法可以创建具有依赖关系的jar:

  1. Hadoop支持jar格式的jar - 意味着你的jar包含一个jar文件夹,将在作业提交时添加到类路径并映射/减少任务执行
  2. 您可以解压缩jar依赖项并将它们与您的类重新打包到一个单一的jar中。
  3. 第一个将要求您创建maven程序集定义文件,但实际上比它的价值更麻烦。第二个也使用maven程序集,但使用内置描述符。要使用第二个,只需将以下内容添加到pom中的project -> build -> plugins部分:

    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.4</version>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
    </plugin>
    

    现在,当您运行mvn包时,您将在目标文件夹中获得两个jar:

    1. ${project.name}-${project.version}.jar - 其中只包含项目的类和资源
    2. ${project.name}-${project.version}-jar-with-dependencies.jar - 它将包含您的类/资源以及依赖树中的所有内容,其中编译范围已解压缩并重新打包到单个jar中
    3. 对于多个入口点,您不需要执行任何特定操作,只需确保未在jar清单中定义Main-Class条目(如果您明确配置清单,否则默认为'n}'命名一个Main-Class,这样你应该很好)