0

我正在尝试使用apache twill构建一个 YARN 应用程序。从twill 演示的幻灯片中,他们正在谈论使用maven-bundle-plugin来包装 hello world 示例。

所以为了打包示例 hello world,我首先尝试将 jar 打包为mvn assembly:assembly -DdescriptorId=jar-with-dependencies. 然后通过将以下内容添加到pom.xml(并执行mvn clean install):

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.felix</groupId>
      <artifactId>maven-bundle-plugin</artifactId>
      <version>2.5.3</version>
      <extensions>true</extensions>
      <configuration>
        <instructions>
          <Bundle-SymbolicName>${pom.groupId}.${pom.artifactId}</Bundle-SymbolicName>
          <Bundle-Name>${pom.artifactId}</Bundle-Name>
          <Bundle-Version>1.0.0</Bundle-Version>
          <Private-Package>org.wso2.mbp.helloworld</Private-Package>
          <Bundle-Activator>org.wso2.mbp.helloworld.Activator</Bundle-Activator>
          <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
          <Embed-Transitive>true</Embed-Transitive>
          <Import-Package>
            org.apache.twill.*,
            org.osgi.framework,
            *;resolution:=optional
          </Import-Package>
        </instructions>
      </configuration>
    </plugin>
  </plugins>
</build>

斜纹应用是如何打包的?然后如何在 hadoop 上运行它们?

4

1 回答 1

2

对于打包,您可以使用 maven-bundle-plugin。我通常在 pom.xml 中有这样的:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.felix</groupId>
      <artifactId>maven-bundle-plugin</artifactId>
      <version>2.3.7</version>
      <extensions>true</extensions>
      <configuration>
        <instructions>
          <Embed-Dependency>*;inline=false;groupId=!org.apache.hadoop</Embed-Dependency>
          <Embed-Transitive>true</Embed-Transitive>
          <Embed-Directory>lib</Embed-Directory>
        </instructions>
      </configuration>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>bundle</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

然后运行MAVEN_OPTS="-Xmx512m" mvn clean package。那应该在目标目录下创建一个 .jar 文件。如果使用“jar -tf”查看jar文件的内容,应该是这样的:

my/package/HelloWorld.class
my/package/HelloWorld$HelloWorldRunnable.class
lib/twill-api-0.3.0-incubating.jar
lib/twill-core-0.3.0-incubating.jar
lib/..

要启动应用程序,请确保您位于可以访问您计划启动应用程序的 Hadoop 集群的主机上。然后您可以在某个目录中 scp 并解压缩文件,然后在扩展的 jar 目录中执行类似这样的 shell 命令:

$> export HADOOP_CP=`hadoop classpath`
$> java -cp .:lib/*:$HADOOP_CP my.package.HelloWorld 

HelloWorld 中的 main() 方法应该能够与 ZooKeeper 和 YARN 交互并在集群中启动应用程序。

于 2014-11-05T08:44:51.397 回答