hadoop 依赖式job_Hadoop Job使用第三方依赖jar文件
当我们实现了一个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文件相关推荐
- python安装依赖失败_python执行安装第三方依赖numpy失败:error: Unable to find vcvarsall.bat...
一台计算机上同时安装了python2.7和python3.7. 现在为python2.7安装numpy包. 失败:error: Unable to find vcvarsall.bat ======= ...
- sparkshelljarlib_Spark应用程序第三方jar文件依赖解决方案
第一种方式 操作:将第三方jar文件打包到最终形成的spark应用程序jar文件中 应用场景:第三方jar文件比较小,应用的地方比较少 第二种方式 操作:使用spark-submit提交命令的参数: ...
- maven 打包指定依赖包_Maven打包成Jar文件时依赖包的问题
我们项目中使用到第三方的库文件,这些jar库文件并没有放到Maven中央库上,导致我们需要在项目中自己配置使用.我们的两三个开发人员对Java都是很熟,因此在使用中遇到了一些问题,表现在:在本地中引入 ...
- Maven依赖的是本地工程还是仓库jar包?
相信大家都碰见过maven配置的依赖或者是jar包或者是工程,在开发的过程当中,我们当然需要引入的是工程,这样查看maven依赖的文件的时候,就能直接查看到源码. 一.本地工程依赖 举个例子,其架构如 ...
- sparkshelljarlib_spark-submit 应用程序第三方jar文件
第一种方式:打包到jar应用程序 操作:将第三方jar文件打包到最终形成的spark应用程序jar文件中 应用场景:第三方jar文件比较小,应用的地方比较少 第二种方式:spark-submit 参数 ...
- Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包...
一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...
- Visual Studio 2017 第三方依赖设置,附加依赖项和附加库目录
Visual Studio 2017 第三方依赖.需要做的事情有:1.指定头文件所在目录.2.指定需要使用到的lib.3.指定lib文件夹,也就是代码的实现部分所在的目录. 附加依赖项 是指输入项,如 ...
- Python学习之解决python下载第三方依赖速度慢的问题
Python学习之解决python下载第三方依赖速度慢的问题 参考文章: (1)Python学习之解决python下载第三方依赖速度慢的问题 (2)https://www.cnblogs.com/su ...
- Spark应用程序第三方jar文件依赖解决方案
Spark应用程序第三方jar文件依赖解决方案 参考文章: (1)Spark应用程序第三方jar文件依赖解决方案 (2)https://www.cnblogs.com/dinghong-jo/p/78 ...
最新文章
- Hive的JDBC连接和数据查询功能
- 测序技术及常见的有几种平台类型
- python 爬虫可视化编程_Python爬虫爬取博客实现可视化过程解析
- 【数据结构与算法】【算法思想】贪心算法
- (计算机组成原理)第五章中央处理器-第三节1:CPU内部单总线数据通路中数据的流动
- 95-30-020-Channel-NioSocketChannel
- android webview圆角,Android 实现一个通用的圆角布局
- Bootstrap前端框架
- c语言用指针取出字节,在C语言中一个指针占用多少字节。
- java bean jsp_jsp+java bean+servlet开发的mvc简易鞋城在线商城系统
- html设置div大小位置不变,div大小 div固定大小设置
- 制作删不掉的php唯读档,ppt母版logo删除不了怎么办
- 简单点的java_简单点,学习的方式简单点,java零基础入门语法教学(简单篇)...
- QT程序到arm板(s5pv210)的移植之旅
- NetBeans 界面美化与字体设置
- 玩转Openwrt(二) — 配合Android手机打造无线音乐播放器
- 移动联通电信2G3G4G网络速度——无线蜂窝技术:CDMA2000、1x/EVDo、GSM、EDGE、TD-SCDMA、HSPA、WCDMA、HSPA、TD-LTE 速度
- SC系列 (SC-16S) 低频率小型SMD石英晶振 SC-16S 32.768KHZ 12.5PF/20PPM
- 【python】带你深入了解“迭代器“
- c语言中pair的头文件,C++中使用pair是否一定要包含头文件utility