不信网恋 发表于 2018-10-29 13:44:54

修改hadoop脚本改变CLASSPATH中jar加载顺序

  先说一下环境,有两个集群,一个新的一个旧的,打算把新的调试好然后把旧的关掉。
  新:Cloudera Express 5.6.0,CDH-5.6.0
  旧: Cloudera Express 5.0.5,CDH-5.0.5
  新集群搭建过程中发现一个问题,执行以下命令对lzo文件创建索引,在新集群中job无法提交到指定队列,同样的命令在旧集群中正常:
  hadoop jar hadoop-lzo.jar com.hadoop.compression.lzo.DistributedLzoIndexer-D mapreduce.job.queuename=copy/data/lzodata/
  两个集群的配置区别在于,旧集群lzo的配置一个是手动的,新集群是用GPLEXTRAS的parcel包配置的。
  用GPLEXTRAS配置的新集群默认吧lzo的jar包加载到hadoopclasspath路径中了,导致的结果是DistributedLzoIndexer提交不到正确的队列。
  因为新版版的hadoop-lzo.jar中

  com.hadoop.compression.lzo.DistributedLzoIndexer 修改了获取Configuration的方式
  Configuration conf = new Configuration();                                                Job job = new Job(conf );
  旧版本中为
  Job job = new Job(getConf());
  修改了源码,然后重新上传到提交job的服务器,只在提交job的时候起作用。
  修改脚本的位置,修改前请做好备份:
  /opt/cloudera/parcels/CDH-5.6.0-1.cdh5.6.0.p0.45/lib/hadoop/bin

  修改脚本中 export>  上面的/opt/cloudera/userlib/hadoop-lzo.jar为想要加载的路径

页: [1]
查看完整版本: 修改hadoop脚本改变CLASSPATH中jar加载顺序