hadoop - Hadoop的JobClient中的submitJob方法抛出空指针

标签 hadoop mapreduce

我正在尝试执行 MapReduce 作业,我想定期轮询其状态。我正在尝试在代码中使用 Jobclient 类的 submitJob(jobConf) 方法,如下所示

 JobConf conf = new JobConf(SampleJobClass.class)   
 JobClient j= new JobClient();
 j.setConf(conf);
 System.out.println("from conf" +j.getConf().toString());
 RunningJob submitJob=j.submitJob(conf);`

我一直在 j.submitJob(conf) 行收到空指针错误 错误堆栈是:

Exception in thread "main" java.lang.NullPointerException
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:844)
    at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:818)

关于我弄错了什么有什么想法吗?

最佳答案

根据提供的信息,我假设您使用的是 hadoop-2.0.0-mr1-cdh4.0.0/4.0.1。
在第 844 行:

return ugi.doAs(new PrivilegedExceptionAction<RunningJob>() {

NPE 可能会因为 ugi 为 null 而发生。 (UserGroupInformation) 这是在 init() 方法,但它不会在默认构造函数中调用。 因此,请手动调用它:

j.init(conf); 

或者简单地使用:

j = new JobClient(conf);

在内部调用 init()

另一方面,我宁愿在命令行中运行 Hadoop 作业,然后执行一些轮询作业信息的客户端代码,例如:

InetSocketAddress jobtrackerAddr = new InetSocketAddress("myhost",8021);
Configuration conf = new Configuration();
JobClient jobClient = new JobClient(jobtrackerAddr, conf);
JobStatus[] runningJobs = jobClient.jobsToComplete();
...

(获取几个集群信息见我之前的answer)

关于hadoop - Hadoop的JobClient中的submitJob方法抛出空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13761800/

相关文章:

hadoop - 在 [ubuntu] ubuntu : ssh: connect to host ubuntu port 22: No route to host 上启动名称节点

hadoop - 在 Cognos BI 环境中使用 Apache Hadoop

hadoop 减少上下文和另一个输入文件的侧连接

java - 如何在 Hadoop 中自定义 Writable 类?

spring - 无法在Spring Data项目中加载资源

hadoop - Ambari 代理不存在

java - 使用phoenix在Hbase上保存数据框

java - mapreduce 中永无止境的工作

java - Hadoop stdout始终为空,写入的字节为零

hadoop MultipleOutputs 到绝对路径,但其他尝试已创建文件