将作业远程提交到kerberized Hadoop MRv2 / YARN群集

时间:2015-04-22 07:43:17

标签: java hadoop mapreduce yarn

首先,我已经看到这是一个关于stackoverflow的反复出现的问题,例如:

Not able to run Hadoop job remotely
Running Hadoop Job Remotely
Exception while submitting a mapreduce job from remote system
Running java hadoop job on local/remote cluster

尽管如此,我还没有找到关于如何远程提交工作的完整示例:

  • 当远程群集使用MRv2 / YARN时
  • 它是kerberized

Ii必须说通过yarn命令(以前使用kinit获取Kerberos TGT)提交作业时,这样的cluser工作正常。

关于第一个问题,我看到MRv1工作的代码是这样的:

Configuration conf = new Configuration();
conf.set("fs.default.name", "hdfs://" + host + ":8020");
conf.set("mapred.job.tracker", "hdfs://" + host + ":8021");
Job job = new Job(conf, "job-name");
job.setJarByClass(Main.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
job.waitForCompletion(true);

然而,当使用MRv2 / YARN时,没有Jobtracker。谷歌搜索了一下我已经看到部分变化必须按照上面的代码与YARN一起工作;具体是:

// instead of conf.set("mapred.job.tracker", "hdfs://" + host + ":8021");
conf.set("mapreduce.framework.name", "yarn");
conf.set("yarn.resourcemanager.address", "host:9001");

是吗?还需要什么?仍需要conf.set("fs.default.name", "hdfs://" + host + ":8020");配置部分吗?如何设置hadoop.job.ugi

我还看到可以将core-default.xmlcore-site.xml文件放在类路径中,以便加载它们的属性(如Configuration javadoc中所述)。这只是上述代码的编程设置的替代方案,还是两者都是必需的?

关于第二个问题,Kerberos,我发现有必要执行特权操作,但代码是怎么样的?我尝试过类似的事情:

final Configuration conf = new Configuration();
conf.set("...", "..."); // the settings below
UserGroupInformation.setConfiguration(conf);
UserGroupInformation ugi = UserGroupInformation.createProxyUser("user1", UserGroupInformation.getCurrentUser());
ugi.setAuthenticationMethod(AuthenticationMethod.KERBEROS);
ugi.doAs(new PrivilegedExceptionAction<Void>() {
    @Override
    public Void run() throws Exception {
        Job job = Job.getInstance(conf, "job-name");
        ...
    }
});

但它没有用,因为我认为我必须先修复远程提交部分。

任何提示都会非常感激。谢谢!

0 个答案:

没有答案