2014-09-25 79 views
0

我正在嘗試使用apache twill構建YARN應用程序。從twill presentation的幻燈片中,他們正在討論使用maven-bundle-plugin打包hello world樣本。如何打包並運行斜紋示例應用程序

因此,要打包示例hello world,我首先嚐試打包與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上運行它們?

回答

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文件。如果用「罐子-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和其unjar在某些目錄中的文件,然後shell命令這樣的擴展JAR目錄:

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

的將HelloWorld內的main()方法應該能夠與動物園管理員和紗線和互動啓動集羣中的應用程序。

+0

with'jar -tf twill-sample.jar'我沒有看到'lib/*'文件夾! – bachr 2014-11-05 10:28:12

+0

如果包裝類型是「jar」,則捆綁插件實際上需要執行目標來構建捆綁包jar。我更新了我的答案以反映這一點。還包括捆綁插件中的hadoop排除,以便它不會包含hadoop罐子。 – 2014-11-06 00:09:29

+0

它的工作原理,但我不得不手動下載[hadoop-auth-2.5.0.jar](http://mvnrepository.com/artifact/org.apache.hadoop/hadoop-auth/2.5.0)(for'org。 apache.hadoop.util.PlatformName'),因爲它在我的hadoop安裝中丟失了。 – bachr 2014-11-06 10:19:20

相關問題