全部產品
Search
文件中心

MaxCompute:Java SDK常見問題

更新時間:Jun 19, 2024

本文為您介紹Java SDK的常見問題。

問題類別

常見問題

SDK諮詢

運行報錯

如何下載Java SDK包?

MaxCompute的Java SDK包已經託管在Maven上,您可以通過Maven下載Java SDK包。

例如,MapReduce的Java SDK包。您可以在Maven中搜尋odps-sdk-mapred,在Versions頁簽中單擊對應SDK版本後的image,然後下載對應類型的包。image

Java SDK包詳情請參見Java SDK介紹

如何通過MaxCompute Java SDK設定SQL的Flag?

當您使用DataWorks控制台或MaxCompute用戶端(odpscmd)提交SQL時,通常需要設定SQL的Flag。例如,如果您需要使用MaxCompute 2.0資料類型,可以通過Session層級方式開啟,在涉及2.0新資料類型的SQL前增加Set Flag語句set odps.sql.type.system.odps2=true;

使用Java SDK提交SQL時,不能簡單地把Set Flag語句直接增加到SQL中,設定Flag的正確方式如下。

--構造SQLTask對象。
SQLTask task = new SQLTask();task.setName("foobar");task.setQuery("select ...");
--設定Flag。
Map settings = new HashMap<>();settings.put("odps.sql.type.system.odps2", "true");...
--設定其它Flags。
task.setProperty("settings", new JSONObject(settings).toString()); --這裡是關鍵:將Flags對應的JSON String設定到settings中。
--執行。
Instance instance = odps.instances().create(task);

如何使用Logview排查Java SDK報錯?

MaxCompute Java SDK提供了Logview介面i = SQLTask.run(odps, sql); String logview = odps.logview().generateLogView(i, 7×24)

如何在MaxCompute的Java業務代碼中執行SQL作業?

您可以在業務代碼中調用MaxCompute的Java SDK執行SQL作業,詳情請參見Java SDK介紹

使用SQLTask執行SQL查詢時,如果查詢結果條數大於限制的10000條,該如何擷取所有資料?

您可以將SQL查詢的結果集寫入一張表中,通過Tunnel下載所有資料。

SQLTask中,按照如下方法返回結果集的資料量是否有限制?如果有限制,最大返回結果集大小是多少?

命令樣本如下。

Instance instance = SQLTask.run(odps, "sql語句");
instance.waitForSuccess();
List<Record> records = SQLTask.getResult(instance);              

有限制,您可以最多調整到10000。如果資料量比較大,建議您使用Tunnel SDK匯出資料。

SQLTask查詢資料和DownloadSession在使用及功能上,有什麼不同?

SQLTask運行SQL並返回結果,返回條數有限制,預設是10000條。

DownloadSession下載某個存在的表裡的資料,結果條數無限制。

MaxCompute Java SDK執行作業卡頓,如何解決?

  • 問題現象

    • 使用者A使用MaxCompute Java SDK執行作業卡頓,沒有Logview資訊。

    • 使用者B使用MaxCompute Java SDK訪問表,執行RestClient Retry操作後,作業卡頓。

  • 產生原因

    • 使用者A由於沒有Instance的Logview,導致系統無法追蹤Instance的運行過程。Instance建立後會調用instance.waitForSuccess()方法,一旦作業耗時大,就會卡頓。此時如果有Logview,就可以查看並追蹤作業卡頓的具體原因。

    • 使用者B從表面看就是作業卡頓了,沒有任何輸出。Java SDK的RestClient本身有重試機制,如果系統在每次重試時都輸出錯誤記錄檔,就可以快速定位問題。

  • 解決措施

    • 使用MaxCompute Java SDK產生Instance Logview。

      MaxCompute Java SDK提供了Logview介面,詳情請參見Instance Logview樣本

      說明
      • 請您在使用Java SDK時,為每個Instance記錄Logview,一旦遇到問題可快速追蹤。

      • 在MaxCompute用戶端(odpscmd)執行WAIT<instance_id>命令可以獲得Logview連結。

    • 每次執行RestClient Retry操作時都輸出錯誤記錄檔。

      MaxCompute Java SDK提供了抽象類別RetryLogger,詳情請參見輸出錯誤記錄檔樣本

MaxCompute運行代碼時,報錯java.lang.ClassNotFoundException,如何解決?

出現上述報錯,是因為您在引入包時,沒有引入與其相關的依賴包或重複引入某個包,請排查本地環境配置。

如果您是在MaxCompute上執行MapReduce作業時出現此錯誤,請檢查是否已通過-resources參數引入依賴的包。

MaxCompute運行代碼時,報錯OpenJDK 64-Bit Server VM warning,如何解決?

  • 問題現象

    報錯資訊如下。

    OpenJDK 64-Bit Server VM warning: Insufficient space for shared memory
  • 產生原因

    出現上述報錯,是因為臨時檔案的目錄空間不足。

  • 解決方案

    您可以通過df命令,查看並清理臨時檔案的目錄空間。