Syncfusion 数据集成:CRON 驱动的调度策略 - @OnScheduled 方法 NullPointerException

Syncfusion Data integration: CRON driven scheduling strategy - @OnScheduled method NullPointerException

我正在测试 Syncfusion 数据集成平台(基于 Apache NiFi)并尝试通过 CRON 驱动的调度策略调用处理器。

我在 "Run Schedule" 字段中输入了这个值:0 19 22 10 7 ? 2017

但是当我启动处理器时,我立即得到一个错误:

failed to invoke @OnScheduled method due to java.lang.NullPointerException

我尝试通过 CRON 驱动的调度策略 运行 的所有处理器都会发生该错误。 计时器驱动策略工作正常。 纯 NiFi(没有 Syncfusion)也可以正常工作。

这是什么原因?

来自日志文件:

ERROR [Timer-Driven Process Thread-1] org.apache.hadoop.util.Shell Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

...

ERROR [StandardProcessScheduler Thread-1] o.a.n.p.standard.GenerateFlowFile GenerateFlowFile[id=347af75d-b2d1-4460-3037-a4ca4fcd25fb] GenerateFlowFile[id=347af75d-b2d1-4460-3037-a4ca4fcd25fb] failed to invoke @OnScheduled method due to java.lang.NullPointerException; processor will not be scheduled to run for 30 seconds: java.lang.NullPointerException
2017-07-10 23:17:53,844 ERROR [StandardProcessScheduler Thread-1] o.a.n.p.standard.GenerateFlowFile 
java.lang.NullPointerException: null
  at org.apache.nifi.controller.scheduling.QuartzSchedulingAgent.doSchedule(QuartzSchedulingAgent.java:185) ~[na:na]
  at org.apache.nifi.controller.scheduling.AbstractSchedulingAgent.schedule(AbstractSchedulingAgent.java:46) ~[na:na]
  at org.apache.nifi.controller.scheduling.QuartzSchedulingAgent.schedule(QuartzSchedulingAgent.java:47) ~[na:na]
  at org.apache.nifi.controller.scheduling.StandardProcessScheduler.trigger(StandardProcessScheduler.java:311) ~[na:na]
  at org.apache.nifi.controller.StandardProcessorNode.run(StandardProcessorNode.java:1286) ~[na:na]
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_25]
  at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_25]
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_25]
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_25]
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_25]
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_25]
  at java.lang.Thread.run(Thread.java:745) [na:1.8.0_25]
2017-07-10 23:17:53,853 ERROR [StandardProcessScheduler Thread-1] o.a.n.controller.StandardProcessorNode Failed to invoke @OnScheduled method due to java.lang.NullPointerException
java.lang.NullPointerException: null
  at org.apache.nifi.controller.scheduling.QuartzSchedulingAgent.doSchedule(QuartzSchedulingAgent.java:185) ~[na:na]
  at org.apache.nifi.controller.scheduling.AbstractSchedulingAgent.schedule(AbstractSchedulingAgent.java:46) ~[na:na]
  at org.apache.nifi.controller.scheduling.QuartzSchedulingAgent.schedule(QuartzSchedulingAgent.java:47) ~[na:na]
  at org.apache.nifi.controller.scheduling.StandardProcessScheduler.trigger(StandardProcessScheduler.java:311) ~[na:na]
  at org.apache.nifi.controller.StandardProcessorNode.run(StandardProcessorNode.java:1286) ~[na:na]
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_25]
  at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_25]
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_25]
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_25]
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_25]
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_25]
  at java.lang.Thread.run(Thread.java:745) [na:1.8.0_25]
2017-07-10 23:17:56,058 INFO [Flow Service Tasks Thread-1] o.a.n.p.FlowConfigurationArchiveManager Removing old archive file .\conf\archive170710T231701+0600_flow.xml.gz to reduce storage usage. currentSize=508959
2017-07-10 23:17:56,060 INFO [Flow Service Tasks Thread-1] o.a.nifi.controller.StandardFlowService Saved flow controller org.apache.nifi.controller.FlowController@591cd567 // Another save pending = false
2017-07-10 23:18:00,358 INFO [Data Integration Web Server-16] o.a.n.controller.StandardProcessorNode Stopping processor: class org.apache.nifi.processors.standard.GenerateFlowFile
2017-07-10 23:18:00,379 WARN [StandardProcessScheduler Thread-1] o.a.n.controller.StandardProcessorNode Failed while shutting down processor GenerateFlowFile[id=347af75d-b2d1-4460-3037-a4ca4fcd25fb]

...

我认为您的 cron 表达式无效,这可能是错误的根本原因。

你的 cron 计划中的表达式有什么意义?

0 19 22 10 7 ? * 2017

替换使用的表达式 0 19 22 10 7 ? 2017

您可以在以下网站的帮助下生成 cron 表达式。

http://www.cronmaker.com/

希望对你有所帮助

谢谢

给定的错误可能是由两个原因造成的。

  1. 如果给定的 cron 表达式无效。
  2. 如果给定的日期是过去的。

这里给定的表达式“0 19 22 10 7 ? 2017”有效。

确保输入的时间和日期是否是即将到来的日期,如果处理器安排到特定日期。

试试这个 CRON 表达式“0 15 23 12 7 ? 2017”,在 2017 年 7 月 12 日(即今天)晚上 11 点 15 分触发。

请在下面找到几个 CRON-DRIVEN 表达式。

CRON 驱动的表达式 1:

7 月 0 0 13 12 日? 2017年 (要么) 0 0 13 12 7 ? 2017

含义:

2017 年 7 月 12 日下午 1 点触发

下一个预定日期:

运行只有一次。

CRON 驱动的表达式 1:

7 月 0 0 13 12 日? 2017-2020 (要么) 0 0 13 12 7 ? 2017-2020

含义:

在 2017、2018、2019 和 2020 年的 7 月 12 日下午 1 点触发。

下一个预定日期:

• 2017 年 7 月 12 日,星期三 1:00 下午
• 2018 年 7 月 12 日星期四 1:00 下午
• 2019 年 7 月 12 日星期五 1:00 下午
• 2020 年 7 月 12 日,星期日 1:00 下午

CRON 驱动的表达式 3:

0 0 13 12 7 ? * (要么) 0 0 13 12 七月? *

含义:

每年 7 月 12 日下午 1:00 触发

下一个预定日期:

• 2017 年 7 月 12 日,星期三 1:00 下午
• 2018 年 7 月 12 日星期四 1:00 下午
• 2019 年 7 月 12 日星期五 1:00 下午
• 2020 年 7 月 12 日星期日 1:00 下午
• 2021 年 7 月 12 日星期一 1:00 下午

CRON 驱动的表达式 4:

0 0 13 * * ? 2017

含义:

2017 年每天 1:00 下午触发

下一个预定日期:

• 2017 年 7 月 12 日,星期三 1:00 下午
• 2017 年 7 月 13 日星期四 1:00 下午
• 2017 年 7 月 14 日星期五 1:00 下午
• 2017 年 7 月 15 日星期六 1:00 下午
• 2017 年 7 月 16 日,星期日 1:00 下午