Hadoop中,如何通过 -libjars 引入第三方jar

在Hadoop中,可以通过`-libjars`参数在启动job时引入第三方jar。推荐使用`ToolRunner`配合该参数,以实现job依赖的jar与hadoop classpath的解耦。libjars指定的jar会在job提交后复制到HDFS的/tmp目录,供taskTracker加载。若jar已存在于HADOOP_CLASSPATH或mapred.child.env,无需重复指定。当jar数量多时,可考虑通过环境变量配置,少量特定job的依赖jar再用`-libjars`。文章提供了两种方法:不使用ToolRunner的参数解析和使用ToolRunner实现run方法的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       我们可以在使用“hadoo jar”命令时,向启动的job传递“libjars”选项参数,同时配合ToolRunner工具来解析参数并运行Job,这种方式是推荐的用法之一,因为它可以简单的实现job的依赖包和hadoop classpath解耦,可以为每个job单独设置libjars参数。这些jars将会在job提交之后复制到hadoop“共享文件系统中”(hdfs,/tmp文件夹中),此后taskTracker即可load到本地并在任务子进程中加载。

      libjars中需要指定job依赖的所有的jar全路径,并且这些jars必须在当前本地文件系统中(并非集群中都需要有此jars),暂时还不支持hdfs。对于在HADOOP_CLASSPATH或者mapred.child.env中已经包含了jars,则不需要再-libjars参数中再次指定。因为libjars需要指定jar的全路径名,所以如果jars特别多的话,操作起来非常不便,所以我们通常将多个job共用的jars通过HADOOP_CLASSPATH或者mapred.child.end方式配置,将某个job依赖的额外的jars(少量的)通过-libjars选项指定。

1. 如果不开发ToolRunner工具,则可以在mappreduce方法中添加如下解析参数的代码

CommandLine commandLine = new GenericOptionsParser(configuration, args).getCommandLine();
String[] tmpArgs = commandLine.getArgs();
具体代码如下
 public static void main(String[] args) throws Exception {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值