网上这方面文章很多,但照着实践下来,多有不靠谱之处,所以单独研究了一遍,把各种方法做一次测试,总结有方法如下:

方式一    hadoop jar * -libjars 

网上说道这种方式有很多,但大多没有提到-libjars需要用GenericOptionsParser来解析输入参数,它会自动将-libjars参数加到job的classpath里

方法二  将jars加入到Configuration中

jars可以存在于local filesystem也可以是HDFS,前提是需要带上Scheme,不带Scheme的话就不work.

方法三 DistributedCache.addFileToClassPath

DistributedCache是Hadoop提供的文件缓存工具,它能够自动将指定的文件分发到各个节点上,缓存到本地,供用户程序读取使用。addFileToClassPath中的文件也必须带上Scheme,不带上也不work,该种方式不适用本地文件

方式四 fat jar

这种方式不需要解释,就是把依赖的jar和Mapreduce代码打到一个大的jar包