天天看點

maxCompute(ODPS)問題排查思路

1.如果自己不小心手動删除資料無法提供恢複,如果是普通表,是沒法恢複資料的。外部表可以配置到OSS上面,資料不會删除。

2.使用者删除行為,所有的副本也會删除的。如果是産品故障導緻丢失,一般所有副本丢失的可能性并不大(可以提工單咨詢)。

3.UDF由于沙箱限制,不支援請求外部連結

4.不能實作的函數全部建議UDF

5.用戶端亂碼的換考慮将use_instance_tunnel改為false

6.pyodps查詢最多10000條。

SDK和API請求的話可設定:options.tunnel.use_instance_tunnel = True,并且設定options.tunnel.limit_instance_tunnel = false

7.自定義UDF的時候,類名必須寫正确,要不然會報解析錯誤

8.UDF的找不到參數、函數名問題參考:

https://yq.aliyun.com/articles/684417?spm=a2c4e.11155435.0.0.192a3312uElBdJ

9.使用like 如果like字段包含下劃線_ ,不會生效,建議使用rlike + 正則的方式。

10.Tunnel指令不支援上傳下載下傳Array、Map和Struct類型的資料。推薦使用insert into table xxx select xxx

11.2147483647是int型最大的數,id到頂了,不适合有自增id

12.如果沒有輸入表,map 及 reduce任務實際上不執行的,輸入可以為空,但是底層的map 及 reduce實際是不會執行的。沒有資料正常不會配置設定map/reduce task的,通常是一個block配置設定一個map任務去處理。這個并沒有什麼方式可以解決的。實際上也沒人這麼使用,沒有資料運作MR任務本身就是一種浪費。

13.查詢外部表報錯:

FAILED: ODPS-0123131:User defined function exception - Traceback:

java.lang.IndexOutOfBoundsException

at java.io.BufferedInputStream.read(BufferedInputStream.java:338)

1)、麻煩确認路徑下有空檔案,導緻讀取的時候報錯。
2)、對于外部表,目前不支援單個檔案超過2G,否則會報錯           

OSS數量量大的話,需要考慮并行,建議您使用分區,避免全表掃描。

14.在dataworks運作spark報錯:

java.lang.reflect.InvocationTargetException

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:497)

at com.aliyun.odps.SubmitJob.main(SubmitJob.java:74)

Caused by: org.apache.hadoop.yarn.exceptions.YarnException: com.aliyun.odps.cupid.CupidException: This cupid task type not allowed in your project: spark-default

at org.apache.hadoop.yarn.client.api.impl.YarnClientImpl.submitApplication(YarnClientImpl.java:180)

at org.apache.spark.deploy.yarn.Client.submitApplication(Client.scala:175)

at org.apache.spark.deploy.yarn.Client.run(Client.scala:1172)

at org.apache.spark.deploy.yarn.YarnClusterApplication.start(Client.scala:1542)

at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:881)

at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:197)

at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:227)

at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:136)

at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

... 5 more

Caused by: com.aliyun.odps.cupid.CupidException: This cupid task type not allowed in your project: spark-default

at com.aliyun.odps.cupid.CupidUtil.errMsg2SparkException(CupidUtil.java:43)

at com.aliyun.odps.cupid.CupidUtil.getResult(CupidUtil.java:123)

at com.aliyun.odps.cupid.requestcupid.YarnClientImplUtil.transformAppCtxAndStartAM(YarnClientImplUtil.java:291)

at org.apache.hadoop.yarn.client.api.impl.YarnClientImpl.submitApplication(YarnClientImpl.java:178)

... 13 more

需加一下這個配置 spark.hadoop.odps.task.major.version = cupid_v2

繼續閱讀