全部產品
Search
文件中心

Realtime Compute for Apache Flink:作業運行異常

更新時間:Jan 14, 2026

本文為您介紹Realtime ComputeFlink版的作業運行異常問題。

作業啟動不起來,應該如何排查?

  • 問題現象

    單擊啟動按鈕後,作業狀態從啟動中等待一段時間後轉為已失敗

  • 解決方案

    • 運行事件頁簽,單擊左側image展開詳情,根據報錯資訊定位報錯原因。

    • 作業日誌頁簽的開機記錄中,查看是否存在異常資訊,根據異常資訊排查。

    • 如果JobManager啟動成功,可以在作業日誌的JobManager日誌中查看詳細JobManager或TaskManager日誌。

  • 常見報錯

    報錯詳情

    原因

    解決方案

    ERROR:exceeded quota: resourcequota

    當前資源隊列剩餘資源不足。

    對當前資源隊列進行資源變更配置或降低作業啟動資源。

    ERROR:the vswitch ip is not enough

    當前專案空間剩餘的IP數小於啟動作業產生的TM數。

    減少並發、合理配置槽位(slots),或對工作空間虛擬交換器進行修改。

    ERROR: pooler: ***: authentication failed

    代碼中填寫的AccessKey不正確或者沒許可權。

    輸入正確且有許可權的AccessKey。

頁面右側出現資料庫連結錯誤彈窗,該如何排查?

  • 問題詳情

    image

  • 問題原因

    登入的Catalog失效無法正確串連。

  • 解決方案

    資料管理頁面查看所有的Catalog,將顯示為灰色的Catalog刪除後重新註冊對應的Catalog。

作業運行後,鏈路中的資料不產生消費,應該如何排查?

  • 網路連通性排查

    如果發生上下遊組件沒有生產和消費情況,首先在開機記錄頁面尋找是否有報錯資訊,如果有TimeOut類的報錯,排查相應組件網路連接問題。

  • 任務執行狀態排查

    狀態總覽頁面查看Source端是否發送資料,以及Sink端是否接收資料,以確定問題發生位置。

    image

  • 資料鏈路詳細排查

    在每個鏈路加print結果表來排查。

作業運行後出現重啟,應該如何排查呢?

在對應作業的作業日誌頁簽進行排查:

  • 查看異常資訊

    異常資訊頁簽,查看拋出的異常,根據異常資訊進行排查。

  • 查看JM和TM的日誌。

    image

  • 查看失效Task Manager日誌。

    有些異常可能會導致TM失敗,而新調度的TM日誌不全,可以查看上一個失效的TM日誌進行排查。

    image

  • 查看歷史運行作業的日誌。

    選擇當前作業的歷史運行作業日誌,尋找作業失敗的原因。

    image

為什麼資料在LocalGroupAggregate節點中長時間卡住,無輸出?

  • 作業代碼

    CREATE TEMPORARY TABLE s1 (
      a INT,
      b INT,
      ts as PROCTIME(),
      PRIMARY KEY (a) NOT ENFORCED
    ) WITH (
      'connector'='datagen',
      'rows-per-second'='1',
      'fields.b.kind'='random',
      'fields.b.min'='0',
      'fields.b.max'='10'
    );
    
    CREATE TEMPORARY TABLE sink (
      a BIGINT,
      b BIGINT
    ) WITH (
      'connector'='print'
    );
    
    CREATE TEMPORARY VIEW window_view AS
    SELECT window_start, window_end, a, sum(b) as b_sum FROM TABLE(TUMBLE(TABLE s1, DESCRIPTOR(ts), INTERVAL '2' SECONDS)) GROUP BY window_start, window_end, a;
    
    INSERT INTO sink SELECT count(distinct a), b_sum FROM window_view GROUP BY b_sum;
  • 問題描述

    LocalGroupAggregate節點中長時間卡住無資料輸出,且無MiniBatchAssigner節點。

    image

  • 問題原因

    在作業中同時包含WindowAggregate和GroupAggregate,且WindowAggregate的時間列為事件時間(proctime)時,如果table.exec.mini-batch.size未配置或者設定為負值,MiniBatch處理模式會使用Managed Memory快取資料,而且無法產生MiniBatchAssigner節點。

    因此計算節點無法收到MinibatchAssigner節點發送的Watermark訊息後觸發計算和輸出,只能在三種條件(Managed Memory已滿、進行Checkpoint前和作業停止時)之一觸發計算和輸出,詳情請參見table.exec.mini-batch.size。如果此時Checkpoint間隔設定過大,就會導致資料積攢在LocalGroupAggregate節點中,長時間無法輸出。

  • 解決方案

    • 調小Checkpoint間隔,讓LocalGroupAggregate節點在執行Checkpoint前自動觸發輸出。Checkpoint間隔時間設定詳情請參見Tuning Checkpoint

    • 通過Heap Memory來快取資料,讓LocalGroupAggregate節點內快取資料達到N條時自動觸發輸出。即設定table.exec.mini-batch.size參數為正值N,參數配置詳情請參見如何配置自訂的作業運行參數?

上遊連接器單partition無資料進入,導致Watermark無法推進、視窗輸出延遲,如何解決?

以Kafka為例,上遊有5個partition,每分鐘有2條新資料進入,但是並不是每個partition都是即時有資料進入的,當源端在逾時時間內沒有收到任何元素時,它將被標記為暫時空閑。Watermark無法推進,視窗無法及時結束,結果不能即時輸出。

此時,您需要設定一個到期時間來表明這個Partition無資料了,使得在計算Watermark時將其排除在外,等有資料後再將其列入計算Watermark的範疇。詳情請參見Configuration

其他配置中添加如下代碼資訊,具體操作請參見如何配置自訂的作業運行參數?

table.exec.source.idle-timeout: 1s

JobManager沒有運行起來,如何快速定位問題?

JobManager沒有運行起來則無法進入Flink UI頁面。此時,您可以通過以下操作進行問題定位:

  1. 營運中心 > 作業營運頁面,單擊目標作業名稱。

  2. 單擊運行事件頁簽。

  3. 通過快速鍵搜尋error,擷取異常資訊。

    • Windows系統:Ctrl+F

    • Mac系統:Command+F

    樣本

INFO:org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss

  • 報錯詳情報錯詳情

  • 報錯原因

    儲存類型為OSS Bucket,OSS每次建立新目錄時,會先檢查是否存在該目錄,如果不存在,就會報這個INFO資訊,但該INFO資訊不影響Flink作業運行。

  • 解決方案

    在日誌模板中添加<Logger level="ERROR" name="org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss"/>。詳情請參見配置作業日誌輸出

報錯:akka.pattern.AskTimeoutException

  • 報錯原因

    • 因為JobManager或TaskManager的記憶體不足導致持續GC,從而導致JM和TM之間的心跳和RPC請求逾時。

    • 因為作業規模較大,即RPC請求量較大,但JM資源不足,從而導致RPC請求積壓,因此導致JM和TM之間的心跳和RPC請求逾時。

    • 因為作業逾時參數值設定過小,當第三方產品串連失敗時,系統會進行多次重試,導致在逾時前未能拋出串連失敗的錯誤。

  • 解決方案

    • 如果是持續GC導致的報錯,則建議通過作業記憶體情況和GC日誌確認GC的耗時和頻率,如果確實存在高頻GC或GC耗時的問題,則需要增加JM和TM記憶體。

    • 如果是作業規模較大導致的報錯,則建議增加JM的CPU和記憶體資源,同時調大akka.ask.timeoutheartbeat.timeout參數取值。

      重要
      • 建議只在大規模作業上調整以上兩個參數,小規模作業通常不是由於該配置較小導致。

      • 建議按需設定該參數,因為該參數調整過大,會導致在TaskManager異常退出時,作業恢複的時間變長。

    • 如果串連失敗是由第三方產品串連失敗導致的逾時,請先調大以下四個參數的值,讓第三方報錯拋出來,然後解決第三方報錯。

      • client.timeout:預設值為60 s,推薦值為600 s。

      • akka.ask.timeout:預設值為10 s,推薦值為600 s。

      • client.heartbeat.timeout:預設值為180000 s,推薦值為600000 s。填寫時請確保取值不帶單位,否則可能導致啟動報錯。例如,您可以直接填寫為client.heartbeat.timeout: 600000

      • heartbeat.timeout:預設值為50000 ms。推薦值為600000 ms。填寫時請確保取值不帶單位,否則可能導致啟動報錯。例如,您可以直接填寫為heartbeat.timeout: 600000

      例如Caused by: java.sql.SQLTransientConnectionException: connection-pool-xxx.mysql.rds.aliyuncs.com:3306 - Connection is not available, request timed out after 30000ms,說明MySQL串連池已滿,需要調大MySQL WITH參數中的connection.pool.size值(預設值為20)。

      說明

      您可以根據逾時報錯提示確定以上參數調整的最小值,例如pattern.AskTimeoutException: Ask timed out on [Actor[akka://flink/user/rpc/dispatcher_1#1064915964]] after [60000 ms]. 中的60000 ms是目前client.timeout的值。

報錯:Task did not exit gracefully within 180 + seconds.

  • 報錯詳情

    Task did not exit gracefully within 180 + seconds.
    2022-04-22T17:32:25.852861506+08:00 stdout F org.apache.flink.util.FlinkRuntimeException: Task did not exit gracefully within 180 + seconds.
    2022-04-22T17:32:25.852865065+08:00 stdout F at org.apache.flink.runtime.taskmanager.Task$TaskCancelerWatchDog.run(Task.java:1709) [flink-dist_2.11-1.12-vvr-3.0.4-SNAPSHOT.jar:1.12-vvr-3.0.4-SNAPSHOT]
    2022-04-22T17:32:25.852867996+08:00 stdout F at java.lang.Thread.run(Thread.java:834) [?:1.8.0_102]
    log_level:ERROR
  • 報錯原因

    該報錯不是作業異常的根因。因為Task退出的逾時task.cancellation.timeout參數的預設值為180 s,當作業Failover或退出過程中,可能會因某種原因阻塞Task的退出。當阻塞時間達到逾時時間後,Flink會判定該Task已卡死無法恢複,主動停止該Task所在的TaskManager,讓Failover或退出流程繼續下去,所以在日誌中會出現這樣的報錯。

    真正的原因可能是您自訂函數的實現有問題,例如close方法的實現中長時間阻塞或者計算方法長時間未返回等。

  • 解決方案

    設定Task退出的逾時時間參數task.cancellation.timeout取值為0,配置方法請參見如何配置自訂的作業運行參數?配置為0時,Task退出阻塞將不會逾時,該Task會持續等待退出完成。重啟作業後再次發現作業在Failover或退出過程中長時間阻塞時,需要找到處於Cancelling狀態的Task,查看該Task的棧,排查問題的根因,然後根據排查到的根因再針對性解決問題。

    重要

    task.cancellation.timeout參數用於作業調試,請不要在生產作業上配置該參數值為0。

報錯: Can not retract a non-existent record. This should never happen.

  • 報錯詳情

    java.lang.RuntimeException: Can not retract a non-existent record. This should never happen.
        at org.apache.flink.table.runtime.operators.rank.RetractableTopNFunction.processElement(RetractableTopNFunction.java:196)
        at org.apache.flink.table.runtime.operators.rank.RetractableTopNFunction.processElement(RetractableTopNFunction.java:55)
        at org.apache.flink.streaming.api.operators.KeyedProcessOperator.processElement(KeyedProcessOperator.java:83)
        at org.apache.flink.streaming.runtime.tasks.OneInputStreamTask$StreamTaskNetworkOutput.emitRecord(OneInputStreamTask.java:205)
        at org.apache.flink.streaming.runtime.io.AbstractStreamTaskNetworkInput.processElement(AbstractStreamTaskNetworkInput.java:135)
        at org.apache.flink.streaming.runtime.io.AbstractStreamTaskNetworkInput.emitNext(AbstractStreamTaskNetworkInput.java:106)
        at org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:66)
        at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:424)
        at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:204)
        at org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:685)
        at org.apache.flink.streaming.runtime.tasks.StreamTask.executeInvoke(StreamTask.java:640)
        at org.apache.flink.streaming.runtime.tasks.StreamTask.runWithCleanUpOnFail(StreamTask.java:651)
        at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:624)
        at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:799)
        at org.apache.flink.runtime.taskmanager.Task.run(Task.java:586)
        at java.lang.Thread.run(Thread.java:877)
                        
  • 報錯原因及解決方案

    情境

    原因

    解決方案

    情境1

    由代碼中now()導致。

    因為TopN不支援非確定性欄位作為排序欄位(ORDER BY)或分組欄位(PARTITION BY),now()每次輸出的值不同,所以導致Retraction無法找到之前的值。

    使用源表中定義的只會產生確定性值的欄位作為排序欄位(ORDER BY)和分組欄位(PARTITION BY)。

    情境2

    table.exec.state.ttl參數值設定過小,State因到期被清理,retract時找不到對應keystate。

    調大table.exec.state.ttl參數值。配置方法請參見如何配置自訂的作業運行參數?

報錯:The GRPC call timed out in sqlserver

  • 報錯詳情

    org.apache.flink.table.sqlserver.utils.ExecutionTimeoutException: The GRPC call timed out in sqlserver, please check the thread stacktrace for root cause:
    
    Thread name: sqlserver-operation-pool-thread-4, thread state: TIMED_WAITING, thread stacktrace:
        at java.lang.Thread.sleep0(Native Method)
        at java.lang.Thread.sleep(Thread.java:360)
        at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.processWaitTimeAndRetryInfo(RetryInvocationHandler.java:130)
        at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeOnce(RetryInvocationHandler.java:107)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:359)
        at com.sun.proxy.$Proxy195.getFileInfo(Unknown Source)
        at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:1661)
        at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1577)
        at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1574)
        at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
        at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1589)
        at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1683)
        at org.apache.flink.connectors.hive.HiveSourceFileEnumerator.getNumFiles(HiveSourceFileEnumerator.java:118)
        at org.apache.flink.connectors.hive.HiveTableSource.lambda$getDataStream$0(HiveTableSource.java:209)
        at org.apache.flink.connectors.hive.HiveTableSource$$Lambda$972/1139330351.get(Unknown Source)
        at org.apache.flink.connectors.hive.HiveParallelismInference.logRunningTime(HiveParallelismInference.java:118)
        at org.apache.flink.connectors.hive.HiveParallelismInference.infer(HiveParallelismInference.java:100)
        at org.apache.flink.connectors.hive.HiveTableSource.getDataStream(HiveTableSource.java:207)
        at org.apache.flink.connectors.hive.HiveTableSource$1.produceDataStream(HiveTableSource.java:123)
        at org.apache.flink.table.planner.plan.nodes.exec.common.CommonExecTableSourceScan.translateToPlanInternal(CommonExecTableSourceScan.java:127)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateToPlan(ExecNodeBase.java:226)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecEdge.translateToPlan(ExecEdge.java:290)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.lambda$translateInputToPlan$5(ExecNodeBase.java:267)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase$$Lambda$949/77002396.apply(Unknown Source)
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateInputToPlan(ExecNodeBase.java:268)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateInputToPlan(ExecNodeBase.java:241)
        at org.apache.flink.table.planner.plan.nodes.exec.stream.StreamExecExchange.translateToPlanInternal(StreamExecExchange.java:87)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateToPlan(ExecNodeBase.java:226)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecEdge.translateToPlan(ExecEdge.java:290)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.lambda$translateInputToPlan$5(ExecNodeBase.java:267)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase$$Lambda$949/77002396.apply(Unknown Source)
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateInputToPlan(ExecNodeBase.java:268)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateInputToPlan(ExecNodeBase.java:241)
        at org.apache.flink.table.planner.plan.nodes.exec.stream.StreamExecGroupAggregate.translateToPlanInternal(StreamExecGroupAggregate.java:148)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateToPlan(ExecNodeBase.java:226)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecEdge.translateToPlan(ExecEdge.java:290)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.lambda$translateInputToPlan$5(ExecNodeBase.java:267)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase$$Lambda$949/77002396.apply(Unknown Source)
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateInputToPlan(ExecNodeBase.java:268)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateInputToPlan(ExecNodeBase.java:241)
        at org.apache.flink.table.planner.plan.nodes.exec.stream.StreamExecSink.translateToPlanInternal(StreamExecSink.java:108)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateToPlan(ExecNodeBase.java:226)
        at org.apache.flink.table.planner.delegation.StreamPlanner$$anonfun$1.apply(StreamPlanner.scala:74)
        at org.apache.flink.table.planner.delegation.StreamPlanner$$anonfun$1.apply(StreamPlanner.scala:73)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
        at scala.collection.Iterator$class.foreach(Iterator.scala:891)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
        at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
        at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
        at scala.collection.AbstractTraversable.map(Traversable.scala:104)
        at org.apache.flink.table.planner.delegation.StreamPlanner.translateToPlan(StreamPlanner.scala:73)
        at org.apache.flink.table.planner.delegation.StreamExecutor.createStreamGraph(StreamExecutor.java:52)
        at org.apache.flink.table.planner.delegation.PlannerBase.createStreamGraph(PlannerBase.scala:610)
        at org.apache.flink.table.planner.delegation.StreamPlanner.explainExecNodeGraphInternal(StreamPlanner.scala:166)
        at org.apache.flink.table.planner.delegation.StreamPlanner.explainExecNodeGraph(StreamPlanner.scala:159)
        at org.apache.flink.table.sqlserver.execution.OperationExecutorImpl.validate(OperationExecutorImpl.java:304)
        at org.apache.flink.table.sqlserver.execution.OperationExecutorImpl.validate(OperationExecutorImpl.java:288)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor.lambda$validate$22(DelegateOperationExecutor.java:211)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor$$Lambda$394/1626790418.run(Unknown Source)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor.wrapClassLoader(DelegateOperationExecutor.java:250)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor.lambda$wrapExecutor$26(DelegateOperationExecutor.java:275)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor$$Lambda$395/1157752141.run(Unknown Source)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622)
        at java.lang.Thread.run(Thread.java:834)
    
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor.wrapExecutor(DelegateOperationExecutor.java:281)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor.validate(DelegateOperationExecutor.java:211)
        at org.apache.flink.table.sqlserver.FlinkSqlServiceImpl.validate(FlinkSqlServiceImpl.java:786)
        at org.apache.flink.table.sqlserver.proto.FlinkSqlServiceGrpc$MethodHandlers.invoke(FlinkSqlServiceGrpc.java:2522)
        at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:172)
        at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:331)
        at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:820)
        at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
        at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622)
        at java.lang.Thread.run(Thread.java:834)
    Caused by: java.util.concurrent.TimeoutException
        at java.util.concurrent.FutureTask.get(FutureTask.java:205)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor.wrapExecutor(DelegateOperationExecutor.java:277)
        ... 11 more
                        
  • 報錯原因

    可能是SQL過於複雜而導致逾時異常。

  • 解決方案

    其他配置中添加如下代碼,調大預設的120秒逾時限制。具體操作請參見如何配置自訂的作業運行參數?

    flink.sqlserver.rpc.execution.timeout: 600s

報錯:RESOURCE_EXHAUSTED: gRPC message exceeds maximum size 41943040: 58384051

  • 報錯詳情

    Caused by: io.grpc.StatusRuntimeException: RESOURCE_EXHAUSTED: gRPC message exceeds maximum size 41943040: 58384051
    
    at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:244)
    
    at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:225)
    
    at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:142)
    
    at org.apache.flink.table.sqlserver.proto.FlinkSqlServiceGrpc$FlinkSqlServiceBlockingStub.generateJobGraph(FlinkSqlServiceGrpc.java:2478)
    
    at org.apache.flink.table.sqlserver.api.client.FlinkSqlServerProtoClientImpl.generateJobGraph(FlinkSqlServerProtoClientImpl.java:456)
    
    at org.apache.flink.table.sqlserver.api.client.ErrorHandlingProtoClient.lambda$generateJobGraph$25(ErrorHandlingProtoClient.java:251)
    
    at org.apache.flink.table.sqlserver.api.client.ErrorHandlingProtoClient.invokeRequest(ErrorHandlingProtoClient.java:335)
    
    ... 6 more
    Cause: RESOURCE_EXHAUSTED: gRPC message exceeds maximum size 41943040: 58384051)
  • 報錯原因

    由於作業邏輯非常複雜,因此產生的JobGraph過大,導致校正報錯或啟停卡住。

  • 解決方案

    其他配置中添加如下代碼,具體操作請參見如何配置自訂的作業運行參數?

     table.exec.operator-name.max-length: 1000

報錯:Caused by: java.lang.NoSuchMethodError

  • 報錯詳情

    報錯:Caused by: java.lang.NoSuchMethodError: org.apache.flink.table.planner.plan.metadata.FlinkRelMetadataQuery.getUpsertKeysInKeyGroupRange(Lorg/apache/calcite/rel/RelNode;[I)Ljava/util/Set
  • 報錯原因

    如果您依賴了社區的internal API,而這個internal API阿里雲上的版本做了一些最佳化,可能會導致包衝突等異常。

  • 解決方案

    Flink原始碼中只有明確標註了@Public或者@PublicEvolving的才是公開供您調用的方法,阿里雲只對這些方法的相容性做出產品保證。

報錯:java.lang.ClassCastException: org.codehaus.janino.CompilerFactory cannot be cast to org.codehaus.commons.compiler.ICompilerFactory

  • 報錯詳情

    Causedby:java.lang.ClassCastException:org.codehaus.janino.CompilerFactorycannotbecasttoorg.codehaus.commons.compiler.ICompilerFactory
        atorg.codehaus.commons.compiler.CompilerFactoryFactory.getCompilerFactory(CompilerFactoryFactory.java:129)
        atorg.codehaus.commons.compiler.CompilerFactoryFactory.getDefaultCompilerFactory(CompilerFactoryFactory.java:79)
        atorg.apache.calcite.rel.metadata.JaninoRelMetadataProvider.compile(JaninoRelMetadataProvider.java:426)
        ...66more
  • 報錯原因

    • JAR包中引入了會發生衝突的janino依賴。

    • UDF JAR或連接器JAR中,引入了以Flink -開頭的JAR。例如flink-table-planner和flink-table-runtime。

  • 解決方案

    • 分析JAR包裡面是否含有org.codehaus.janino.CompilerFactory。因為在不同機器上的Class載入順序不一樣,所以有時候出現類衝突。該問題的解決步驟如下:

      1. 營運中心 > 作業營運頁面,單擊目標作業名稱。

      2. 部署詳情頁簽,單擊運行參數配置地區右側的編輯

      3. 其他配置文字框,輸入如下參數後,單擊儲存

        classloader.parent-first-patterns.additional: org.codehaus.janino

        其中,參數的value值需要替換為衝突的類。

    • Flink相關依賴,範圍請使用provided,即在依賴中添加<scope>provided</scope>。主要包含org.apache.flink組下以flink-開頭的非Connector依賴。