开发者社区> 问答> 正文

我使用emapreduce hadoop jar依赖的jar怎么上传

我使用emapreduce hadoop jar依赖的jar怎么上传

展开
收起
封神 2016-04-29 13:51:47 3432 0
1 条回答
写回答
取消 提交回答
  • 专注在大数据分布式计算、数据库及存储领域,拥有13+年大数据引擎、数据仓库、宽表引擎、平台研发经验,6年云智能大数据产品技术一号位经验,10年技术团队管理经验;云智能技术架构/云布道师; 研发阿里历代的大数据技术产品包括ODPS、DLA、ADB,最近五年主导宽表引擎研发、DLA、ADB湖仓研发;

    主要参考: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
    
    

    推荐

    2019-07-17 18:50:14
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
《构建Hadoop生态批流一体的实时数仓》 立即下载
零基础实现hadoop 迁移 MaxCompute 之 数据 立即下载
CIO 指南:如何在SAP软件架构中使用Hadoop 立即下载

相关实验场景

更多