0

我是新手。我想用它的依赖项打包我的hadoop项目的一个jar,然后像这样使用它:

hadoop jar project.jar com.abc.def.SomeClass1 -params ...
hadoop jar project.jar com.abc.def.AnotherClass -params ...

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

我怎么能做到?

谢谢!

4

1 回答 1

1

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

  1. Hadoop 支持 jar 格式的 jar - 这意味着您的 jar 包含一个 lib jar 文件夹,该文件夹将在作业提交和 map/reduce 任务执行时添加到类路径中
  2. 您可以解压缩 jar 依赖项并将它们与您的类一起重新打包到一个单一的整体 jar 中。

第一个将要求您创建一个 Maven 程序集定义文件,但实际上比它的价值更麻烦。第二个也使用 Maven 程序集,但使用内置描述符。要使用第二个,只需将以下内容添加到project -> build -> pluginspom 中的部分:

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

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

  1. ${project.name}-${project.version}.jar- 这将只包含您的项目的类和资源
  2. ${project.name}-${project.version}-jar-with-dependencies.jar- 它将包含您的类/资源以及依赖关系树中的所有内容,并在编译范围内解包并重新打包到单个 jar 中

对于多入口点,你不需要做任何具体的事情,只要确保你没有Main-Class在 jar 清单中定义一个条目(如果你显式配置了一个清单,否则默认不会命名一个 Main-Class 所以你应该不错)

于 2013-04-30T23:55:10.857 回答