先说一下环境,有两个集群,一个新的一个旧的,打算把新的调试好而后把旧的关掉。服务器
新:Cloudera Express 5.6.0,CDH-5.6.0ide
旧: Cloudera Express 5.0.5,CDH-5.0.5oop
新集群搭建过程当中发现一个问题,执行如下命令对lzo文件建立索引,在新集群中job没法提交到指定队列,一样的命令在旧集群中正常:spa
hadoop jar hadoop-lzo.jar com.hadoop.compression.lzo.DistributedLzoIndexer -D mapreduce.job.queuename=copy /data/lzodata/调试
两个集群的配置区别在于,旧集群lzo的配置一个是手动的,新集群是用GPLEXTRAS的parcel包配置的。索引
用GPLEXTRAS配置的新集群默认吧lzo的jar包加载到hadoop classpath路径中了,致使的结果是DistributedLzoIndexer 提交不到正确的队列。队列
由于新版版的hadoop-lzo.jar中hadoop
com.hadoop.compression.lzo.DistributedLzoIndexer 修改了获取Configuration的方式get
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 CLASSPATH=/opt/cloudera/userlib/hadoop-lzo.jar:$CLASSPATH
上面的/opt/cloudera/userlib/hadoop-lzo.jar为想要加载的路径