本文為您介紹Java SDK的常見問題。
問題類別 | 常見問題 |
SDK諮詢 | |
運行報錯 |
如何下載Java SDK包?
MaxCompute的Java SDK包已經託管在Maven上,您可以通過Maven下載Java SDK包。
例如,MapReduce的Java SDK包。您可以在Maven中搜尋odps-sdk-mapred,在Versions頁簽中單擊對應SDK版本後的,然後下載對應類型的包。
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
命令,查看並清理臨時檔案的目錄空間。