解析
结果集长什么样子
结果集是在什么地方打印的
Main类的main方法里面
if(env instanceof MyLocalStreamEnvironment){
ResultPrintUtil.printResult(result);
}
打印方法
// An highlighted block
ResultPrintUtil.printResult(result);
结果集数据是从什么地方来的
flinkx解析完json之后其实就是交给flink执行了,调用了flink的jar包进行下一步执行
JobResult类的变量accumulatorResults(这些都在flink的jar包里处理的)
从哪一步开始获取JobResult类的变量accumulatorResults的数据呢
类
MyLocalStreamEnvironment
执行方法进行调用数据结果
// An highlighted block
JobExecutionResult result = miniCluster.executeJobBlocking(jobGraph);
跳转到类MiniCluster里面
//类
MiniCluster
//方法
executeJobBlocking
这里看到JobResult获取了对象信息,这时候数据已经在里面了
类
JobResult
// 方法
public JobExecutionResult toJobExecutionResult(ClassLoader classLoader) throws JobExecutionException, IOException, ClassNotFoundException {
if (this.applicationStatus == ApplicationStatus.SUCCEEDED) {
return new JobExecutionResult(this.jobId, this.netRuntime, AccumulatorHelper.deserializeAccumulators(this.accumulatorResults, classLoader));
} else {
Throwable cause;
if (this.serializedThrowable == null) {
cause = null;
} else {
cause = this.serializedThrowable.deserializeError(classLoader);
}
Object exception;
if (this.applicationStatus == ApplicationStatus.FAILED) {
exception = new JobExecutionException(this.jobId, "Job execution failed.", cause);
} else if (this.applicationStatus == ApplicationStatus.CANCELED) {
exception = new JobCancellationException(this.jobId, "Job was cancelled.", cause);
} else {
exception = new JobExecutionException(this.jobId, "Job completed with illegal application status: " + this.applicationStatus + '.', cause);
}
throw exception;
}
}
数据迁移成功:返回 JobExecutionResult对象,里面包含结果集accumulators
// An highlighted block
return new JobExecutionResult(this.jobId, this.netRuntime, AccumulatorHelper.deserializeAccumulators(this.accumulatorResults, classLoader));
数据迁移失败:返回JobExecutionException,里面包含错误信息cause
// An highlighted block
Object exception;
if (this.applicationStatus == ApplicationStatus.FAILED) {
exception = new JobExecutionException(this.jobId, "Job execution failed.", cause);
} else if (this.applicationStatus == ApplicationStatus.CANCELED) {
exception = new JobCancellationException(this.jobId, "Job was cancelled.", cause);
} else {
exception = new JobExecutionException(this.jobId, "Job completed with illegal application status: " + this.applicationStatus + '.', cause);
}
为什么数据迁移出错了,就没有信息了呢?
还记得最开始,打印需要我们返还什么类么!:
JobExecutionResult
上面我们说了如果报错会返还什么类:
JobExecutionException
所以结果出来了,因为一旦flinkx抛出异常的时候,就不再返还类JobExecutionResult,所以我们无法接收到信息,所以无法打印结果集