我使用emapreduce hadoop jar依赖的jar怎么上传
主要参考:http://acesdream.blog.51cto.com/10029622/1625688
主要有4个方式:
1、把引用的所有的第三方jar包打到一个jar包内,形成一个超大包。
优点:简单,执行相对比较简单
缺点:一些版本升级较为麻烦,需要重新升级包
例如在maven可以添加以下配置项:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<shadedArtifactAttached>false</shadedArtifactAttached>
<outputFile>${project.build.directory}/shaded/examples-${project.version}-shaded.jar</outputFile>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
2、把引用到所有第三方包放到Hadoop的lib目录下
优点:执行运行即可。
缺点:需要重新启动集群,不容易维护
不推荐
3、把引用到所有第三方包放到集群中固定的一台机器上,使用libjars命令加载第三方jar
优点:只需要维护hadoop集群中的一台机器上的lib库,易于系统的维护;
缺点:只能在存放jar的机器上去执行hadoop jar 命令执行程序,且执行命令较复杂;
个人对这种方式还可以接受,不过并不是我最喜欢的方式。
在这里,我进行了测试,WordCount的代码不变,打成WordCount_libjarscmd.jar,注意在打包的过程中不要选择lib中的jar文件,然后把OperateHDFS.jar放到集群中的一台机器上面,执行的命令如下所示:
hadoop jar WordCount_libjarscmd.jar com.hadoop.examples.WordCount -libjars OperateHDFS.jar input libjarscmdoutput
4、把jar包放在HDFS或者OSS上,动态加载第三方jar包
优点:程序可以方便的在集群上的任何一个节点运行,且执行命令的机器没有限制;
执行命令:
jar ossref://yourBucket/yourPath/wordcountv2-1.0-SNAPSHOT.jar com.aliyun.emr.hadoop.examples.WordCount2 -libjars ossref://yourBucket/yourPath/OperateHDFS.jar -Dwordcount.case.sensitive=true oss://yourBucket/yourPath/The_Sorrows_of_Young_Werther.txt oss://yourBucket/yourPath/output -skip oss://yourBucket/yourPath/patterns.txt
推荐
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。