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信息

 

posted on 2017-03-28 16:24  和硕亲王  阅读(1032)  评论(0编辑  收藏  举报