我在试着从工作跟踪器那里收集一些信息。对于初学者,我想从获得正在运行的作业信息开始,如作业id或作业名称等,但已经卡住了,以下是我获得的(打印当前正在运行的作业的作业id):
public static void main(String[] args) throws IOException {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "zk1.myhost,zk2.myhost,zk3.myhost");
conf.set("hbase.zookeeper.property.clientPort", "2181");
InetSocketAddress jobtracker = new InetSocketAddress("jobtracker.mapredhost.myhost", 8021);
JobClient jobClient = new JobClient(jobtracker, conf);
JobStatus[] jobs = jobClient.jobsToComplete();
for (int i = 0; i < jobs.length; i++) {
JobStatus js = jobs[i];
if (js.getRunState() == JobStatus.RUNNING) {
JobID jobId = js.getJobID();
System.out.println(jobId);
}
}
}
当试图显示作业id时,上面的工作很有魅力,但现在我也想显示作业名称。所以我在打印作业id后添加了这一行:
System.out.println(jobClient.getJob(jobId).getJobName());
Exception in thread "main" java.lang.NullPointerException
at org.apache.hadoop.mapred.JobClient$NetworkedJob.<init>(JobClient.java:226)
at org.apache.hadoop.mapred.JobClient.getJob(JobClient.java:1080)
at org.apache.test.JobTracker.main(JobTracker.java:28)
首先从jobClient获取runningjob
,然后获取它的名称http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/runningjob.html#getjobname()
以前有人做过这样的事吗?我可以使用jsoup通过GET请求获得这些信息,但我认为这是获得这些信息的更好方法。
问题更新这里是我的Hadoop/HBase依赖项:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>0.23.1-mr1-cdh4.0.0b2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>0.23.1-mr1-cdh4.0.0b2</version>
<exclusions>
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase</artifactId>
<version>0.92.1-cdh4b2-SNAPSHOT</version>
</dependency>
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobID;
import org.apache.hadoop.mapred.JobStatus;
以下是system.out.println(jobId)
的输出:
job_201207031810_1603
当前只有一个作业在运行。
查看JobClient
的内部类NetworkedJob
。
(来源:/home/user/hadoop/src/mapred/org/apache/hadoop/mapred/jobclient.java)
它的构造函数试图从第225行的JobClient
中获取Configuration
对象,但它是空的,因为new JobClient(InetSocketAddress jobTrackAddr,Configuration conf)
没有设置它:
// Set the completion poll interval from the configuration.
// Default is 5 seconds.
Configuration conf = JobClient.this.getConf();
this.completionPollIntervalMillis = conf.getInt(COMPLETION_POLL_INTERVAL_KEY,
DEFAULT_COMPLETION_POLL_INTERVAL); //NPE occurs here!
作为解决办法,在创建JobClient对象后手动设置它。这将解决您的问题:
..
JobClient jobClient = new JobClient(jobtracker, conf);
jobClient.setConf(conf);
....
我通过以下方式实例化了配置
对象:
Configuration conf = new Configuration();
conf.addResource(new Path("/path_to/core-site.xml"));
conf.addResource(new Path("/path_to/hdfs-site.xml"));
当我启动hadoop作业跟踪器和任务跟踪器不工作时。 127.0.1.1 ubuntu.ubuntu-域ubuntu 192.168.2.135主机 192.168.2.250从机 我可以联系到本地主机:50070和主机:50070。但我无法联系localhost:50030或master:50030
问题内容: 问题: 当我将作业提交到hadoop 2.2.0集群时,它没有显示在作业跟踪器中, 但是作业成功完成。 这样,我可以看到输出并且它正在正确运行,并在运行时打印输出。 我尝试了多个选项,但作业跟踪器看不到该作业。如果我使用2.2.0 hadoop运行流作业,它将显示在任务跟踪器中,但是当我通过hadoop-client api提交它时,它不会显示在作业跟踪器中。我正在查看端口8088上的
问题:当我向hadoop 2.2.0集群提交一个作业时,它不会显示在作业跟踪器中,但该作业成功完成了。通过这个,我可以看到输出,它正在正确运行,并在运行时打印输出。 etc/hadoop/core-site.xml
目前,我们使用三个嵌套的Foreach循环来获取运行批处理的信息。然而,我相当确定我们可以通过一个带有连接和子查询的MySQL语句来获取信息。 我们有大约30个类别,2000个用户。我们的目标是大约100个类别,拥有10万用户,尽管很明显Foreach循环并不理想(即使现在运行它们也需要大约一分钟)。 情况:用户希望得到通知,如果有工作可用于他们可以在某一领域做的贸易 目标:将批处理(每日、每周等
我需要向集群中运行的Flink作业添加track和span id,请求流如下所示 使用者-- 我使用Spring Boot来创建我的rest API,并使用Spring Sleuth来添加跟踪和span id到生成的日志中,当调用rest API时添加跟踪和span id,当消息被放在Kakfa-toption-1上时也添加跟踪和span id,但我不能弄清楚如何添加跟踪和跨度ID,同时在Flin
我试图使用grpc客户端的StackDrive/谷歌云跟踪定义在https://github.com/googleapis/googleapis/blob/master/google/devtools/cloudtrace/v1/trace.proto 我正在发送协议 但我得到的唯一回报是这个例外: 同样,我尝试了以下ListTrace请求 并获得: 我对API非常陌生,所以我不知道我在这里做错了