我正在尝试使用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上运行它们?
答案 0 :(得分: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和unjar文件,然后在扩展的jar目录中输入如下的shell命令:
$> export HADOOP_CP=`hadoop classpath`
$> java -cp .:lib/*:$HADOOP_CP my.package.HelloWorld
HelloWorld中的main()方法应该能够与ZooKeeper和YARN交互并在集群中启动应用程序。