【问题标题】:How to package and run twill sample application如何打包和运行斜纹示例应用程序
【发布时间】:2014-09-25 10:51:07
【问题描述】:

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

所以为了打包示例hello world,我首先尝试用mvn assembly:assembly -DdescriptorId=jar-with-dependencies打包jar。 然后将以下内容添加到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 上运行它们?

【问题讨论】:

    标签: java maven hadoop hadoop-yarn apache-twill


    【解决方案1】:

    对于打包,您可以使用 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 交互并在集群中启动应用程序。

    【讨论】:

    • jar -tf twill-sample.jar 我没有看到lib/* 文件夹!
    • 如果打包类型是“jar”,bundle插件实际上需要一个执行目标来构建bundle jar。我更新了我的答案以反映这一点。还在捆绑插件中包含了 hadoop 排除项,因此它不会包含 hadoop jar。
    • 它可以工作,但我不得不手动下载hadoop-auth-2.5.0.jar(用于org.apache.hadoop.util.PlatformName),因为我的hadoop安装中由于某种原因它丢失了。
    猜你喜欢
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2011-11-12
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多