当我们实现了一个Hadoop MapReduce Job以后,而这个Job可能又依赖很多外部的jar文件,在Hadoop集群上运行时,有时会出现找不到具体Class的异常。出现这种问题,基本上就是在Hadoop Job执行过程中,没有从执行的上下文中找到对应的jar文件(实际是unjar的目录,目录里面是对应的Class文件)。所以,我们自然而然想到,正确配置好对应的classpath,MapReduce Job运行时就能够找到。

有两种方式可以更好地实现,一种是设置HADOOP_CLASSPATH,将Job所依赖的jar文件加载到HADOOP_CLASSPATH,这种配置只针对该Job生效,Job结束之后HADOOP_CLASSPATH会被清理;另一种方式是,直接在构建代码的时候,将依赖jar文件与Job代码打成一个jar文件,这种方式可能会使得最终的jar文件比较大,但是结合一些代码构建工具,如Maven,可以在依赖控制方面保持一个Job一个依赖的构建配置,便于管理。下面,我们分别说明这两种方式。

设置HADOOP_CLASSPATH

比如,我们有一个使用HBase的应用,操作HBase数据库中表,肯定需要ZooKeeper,所以对应的jar文件的位置都要设置正确,让运行时Job能够检索并加载。

Hadoop实现里面,有个辅助工具类org.apache.hadoop.util.GenericOptionsParser,能够帮助我们加载对应的文件到classpath中,操作比较容易一些。

下面我们是我们实现的一个例子,程序执行入口的类,代码如下所示:

可以看到,我们可以通过-libjars选项来指定该Job运行所依赖的第三方jar文件,具体使用方法,说明如下:

第一步:设置环境变量

我们修改.bashrc文件,增加如下配置内容:

不要忘记要使当前的配置生效:

这样就可以方便地引用外部的jar文件了。

第二步:确定Job依赖的jar文件列表

上面提到,我们要使用HBase,需要HBase和ZooKeeper的相关jar文件,用到的文件如下所示:

设置当前Job执行的HADOOP_CLASSPATH变量,只对当前Job有效,所以没有必要在.bashrc中进行配置。

第三步:运行开发的Job

运行我们开发的Job,通过命令行输入HADOOP_CLASSPATH变量,以及使用-libjars选项指定当前这个Job依赖的第三方jar文件,启动命令行如下所示:

需要注意的是,环境变量中内容使用冒号分隔,而-libjars选项中的内容使用逗号分隔。

这样,我们就能够正确运行开发的Job了。

下面看看我们开发的Job运行的结果:

可以看到,除了加载Hadoop对应的HADOOP_HOME变量指定的路径下,lib*目录下的jar文件以外,还加载了我们设置的-libjars选项中指定的第三方jar文件,供Job运行时使用。

将Job代码和依赖jar文件打包

我比较喜欢这种方式,因为这样做首先利用饿Maven的很多优点,如管理依赖、自动构建。另外,对于其他想要使用该Job的开发人员或部署人员,无需关系更多的配置,只要按照Maven的构建规则去构建,就可以生成最终的部署文件,从而也就减少了在执行Job的时候,出现各种常见的问题(如CLASSPATH设置有问题等)。

使用如下的Maven构建插件配置,执行mvn package命令,就可以完成这些任务:

最后生成的jar文件在target目录下面,例如名称类似solr-platform-2.0-jar-with-dependencies.jar,然后可以直接拷贝这个文件到指定的目录,提交到Hadoop计算集群运行。

hadoop 依赖式job_Hadoop Job使用第三方依赖jar文件相关推荐

  1. python安装依赖失败_python执行安装第三方依赖numpy失败:error: Unable to find vcvarsall.bat...

    一台计算机上同时安装了python2.7和python3.7. 现在为python2.7安装numpy包. 失败:error: Unable to find vcvarsall.bat ======= ...

  2. sparkshelljarlib_Spark应用程序第三方jar文件依赖解决方案

    第一种方式 操作:将第三方jar文件打包到最终形成的spark应用程序jar文件中 应用场景:第三方jar文件比较小,应用的地方比较少 第二种方式 操作:使用spark-submit提交命令的参数: ...

  3. maven 打包指定依赖包_Maven打包成Jar文件时依赖包的问题

    我们项目中使用到第三方的库文件,这些jar库文件并没有放到Maven中央库上,导致我们需要在项目中自己配置使用.我们的两三个开发人员对Java都是很熟,因此在使用中遇到了一些问题,表现在:在本地中引入 ...

  4. Maven依赖的是本地工程还是仓库jar包?

    相信大家都碰见过maven配置的依赖或者是jar包或者是工程,在开发的过程当中,我们当然需要引入的是工程,这样查看maven依赖的文件的时候,就能直接查看到源码. 一.本地工程依赖 举个例子,其架构如 ...

  5. sparkshelljarlib_spark-submit 应用程序第三方jar文件

    第一种方式:打包到jar应用程序 操作:将第三方jar文件打包到最终形成的spark应用程序jar文件中 应用场景:第三方jar文件比较小,应用的地方比较少 第二种方式:spark-submit 参数 ...

  6. Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包...

    一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...

  7. Visual Studio 2017 第三方依赖设置,附加依赖项和附加库目录

    Visual Studio 2017 第三方依赖.需要做的事情有:1.指定头文件所在目录.2.指定需要使用到的lib.3.指定lib文件夹,也就是代码的实现部分所在的目录. 附加依赖项 是指输入项,如 ...

  8. Python学习之解决python下载第三方依赖速度慢的问题

    Python学习之解决python下载第三方依赖速度慢的问题 参考文章: (1)Python学习之解决python下载第三方依赖速度慢的问题 (2)https://www.cnblogs.com/su ...

  9. Spark应用程序第三方jar文件依赖解决方案

    Spark应用程序第三方jar文件依赖解决方案 参考文章: (1)Spark应用程序第三方jar文件依赖解决方案 (2)https://www.cnblogs.com/dinghong-jo/p/78 ...

最新文章

  1. Hive的JDBC连接和数据查询功能
  2. 测序技术及常见的有几种平台类型
  3. python 爬虫可视化编程_Python爬虫爬取博客实现可视化过程解析
  4. 【数据结构与算法】【算法思想】贪心算法
  5. (计算机组成原理)第五章中央处理器-第三节1:CPU内部单总线数据通路中数据的流动
  6. 95-30-020-Channel-NioSocketChannel
  7. android webview圆角,Android 实现一个通用的圆角布局
  8. Bootstrap前端框架
  9. c语言用指针取出字节,在C语言中一个指针占用多少字节。
  10. java bean jsp_jsp+java bean+servlet开发的mvc简易鞋城在线商城系统
  11. html设置div大小位置不变,div大小 div固定大小设置
  12. 制作删不掉的php唯读档,ppt母版logo删除不了怎么办
  13. 简单点的java_简单点,学习的方式简单点,java零基础入门语法教学(简单篇)...
  14. QT程序到arm板(s5pv210)的移植之旅
  15. NetBeans 界面美化与字体设置
  16. 玩转Openwrt(二) — 配合Android手机打造无线音乐播放器
  17. 移动联通电信2G3G4G网络速度——无线蜂窝技术:CDMA2000、1x/EVDo、GSM、EDGE、TD-SCDMA、HSPA、WCDMA、HSPA、TD-LTE 速度
  18. SC系列 (SC-16S) 低频率小型SMD石英晶振 SC-16S 32.768KHZ 12.5PF/20PPM
  19. 【python】带你深入了解“迭代器“
  20. c语言中pair的头文件,C++中使用pair是否一定要包含头文件utility

热门文章

  1. UUID介绍与生成的方法
  2. 正则表达式相关案例(很实用很强大)
  3. python ---Pandas时间序列:生成指定范围的日期
  4. 关于异步请求的一些事
  5. E.Text Editor (Gym 101466E + 二分 + kmp)
  6. 基于Windows下使用Docker 部署Redis
  7. Nav- buttons和$ionicView
  8. 互联网产品发布之灰度发布
  9. 利用OpenCV实现旋转文本图像矫正的原理及OpenCV代码
  10. 装了java_下载安装Java