1.编写mapreduce程序,需要用到第三方jar,如果是hbase jar包,那么在启动mapreduce的时候,把hbase的classpath加入到HADOOP_CLASSPATH中。
下面是代码是启动mapreduce的shell脚本
#!/bin/sh hadoop fs -rm -r /balance/filesinseries/ HADOOP_CLASSPATH=`/alex/hbase-1.2.0-cdh5.10.0/bin/hbase classpath` hadoop jar com.ws.test-hadoop-0.0.1-SNAPSHOT.jar com.ws.test.hadoop.app.CollectDecodeCompute
2.如果是需要其他jar包。下面的话是网上查找的资料:
“据说有3种方法:要么-libjars,要么加到HADOOP_HOME/lib下(所有子节点),要么打包进目标jar。
最简单的做法是:在classpath下建立 lib目录,将jar考到lib目录下。据说这是Hadoop 的作者不知在什么会议上答复的。
这里恍然大悟,为什么hadoop Hbase下都有lib目录存放jar包,他的目录叫lib能加载进去,自己建立的叫lib的目录肯定也能加载了。“
我的做法是在生产jar 的时候,使用maven打包,具体pom.xml如下
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <executions> <execution> <id>default-jar</id> <phase>package</phase> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <!-- class path的前缀--> </manifest> </archive> <finalName>${project.groupId}-${project.artifactId}-${project.version}</finalName> </configuration> </execution> </executions> </plugin>
将执行的jar导入到 linux服务器中,建立lib目录,将第三方jar放入到lib目录下。
jar文件中的MAINFEST.MF文件记录classpath信息