MapReduce程序通过-libjar参数指定第三方jar包,step by step 调试
hadoop 3.1.0
日常开发的程序,我们都是通过Maven管理相关jar包依赖,但有时一些第三方包没有提供maven源,只能手动管理jar包。
对于hadoop jar 使用第三方依赖的方式有很多:
参考:https://www.cnblogs.com/yyy-blog/p/10249646.html#_label1
https://www.iteye.com/blog/heipark-1299945
我们通常使用 -libjars 的参数方式
命令格式 hadoop jar xxx.jar xxclass -libjars a.jar,b.jar
那么hadoop jar命令说如何解析-libjars参数的呢?
hadoop提供了一个ToolRunner类来启动MapReduce程序,该ToolRunner类可以自动解析-libjars参数。
ToolRunner调用GenericOptionsParser解析参数
比如我们执行 hadoop jar xxx.jar xxclass -libjars a.jar,b.jar 1111 2222
可以看到xxclass后面的都是参数
后面GenericOptionsParser类通过方法parseGeneralOptions解析参数
接着会在parseGeneralOptions方法的最开始调用buildGeneralOptions方法,设置需要特殊解析的参数
接着调用 GnuParser.parse方法解析特殊的命令行参数
将-libjars 和 xxx.jar放到一个option里面
接着调用processGeneralOptions方法,解析libjars参数,
调用validateFiles方法获取jar的文件路径
提取jar包信息后,并设置Configuration 的tmpjars值。同时设置相应的ClassLoader。