我有一个名为WordCountMain.jar
的jar。我想在多模集群中使用hadoop命令运行这个jar。
但我的用户ID被标记为队列名称为“omega”。所以,如果我使用下面的命令运行上面的jar,那么我收到一个错误,表明我的id没有submit_job访问权。
hadoop jar WordCountMain.jar /user/cloudera/inputs/words.txt /user/cloudera/output
因此上述命令在多模集群中不起作用,但它适用于单节点CDH3集群
如何在运行上面的jar时包含队列名称?
Configuration conf = new Configuration();
Job job = new Job(conf,"word count");
job.getConfiguration().set("mapreduce.job.queuename","omega");
job.setJarByClass(WordCountCombinerMain.class);
Path inputFilePath = new Path(args[0]);
Path outputFilePath = new Path(args[1]);
FileInputFormat.addInputPath(job, inputFilePath);
FileOutputFormat.setOutputPath(job, outputFilePath);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
job.setMapperClass(CWordCountMapper.class);
job.setCombinerClass(CWordCountCombiner1.class);
job.setReducerClass(CWordCountCombiner1.class);
//job.setReducerClass(CwordCountReducer.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.waitForCompletion(true);
job.submit();
但我得到以下错误。这个错误说我的mapreduce作业是在默认队列中提交的。有人可以帮我解决这个问题吗
ERROR ipc.RPC: FailoverProxy: Failing this Call: submitJob for error(RemoteException): org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.security.AccessControlException: User mytra cannot perform operation SUBMIT_JOB on queue default
答案 0 :(得分:0)
尝试驱动程序类中的可能解决方案
解决方案1:configuration.set("mapred.job.queue.name", "omega");
解决方案2:
String queueName= "omega";
job.getConfiguration().set("mapreduce.job.queuename", queueName);
答案 1 :(得分:0)
你可以使用
-Dmapred.job.queue.name=yourpoolname
或 -Dmapreduce.job.queuename=yourpoolname
作为将作业提交到不同队列的参数。
请注意,mapred.job.queue.name
是已弃用的属性名称,Hadoop 2.4.1 之后的新名称是 mapreduce.job.queuename
。