すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:Java SDK のよくある質問

最終更新日:Mar 26, 2026

このページでは、MaxCompute SDK for Java に関する代表的な質問とその回答を紹介します。

カテゴリ質問
SDKMaxCompute SDK for Java パッケージのダウンロード方法 MaxCompute SDK for Java を使用した SQL フラグの設定方法 LogView を使用した Java SDK エラーのトラブルシューティング方法 Java 業務コードからの SQL ジョブ実行方法 SQLTask クエリから 10,000 件を超えるレコードを取得する方法 SQLTask の結果セット制限について SQLTask と DownloadSession の違い
エラーMaxCompute SDK for Java 使用時のジョブ実行時間の長さを解消する方法 java.lang.ClassNotFoundException の対処方法 OpenJDK 64-Bit Server VM warning: Insufficient space for shared memory の対処方法

MaxCompute SDK for Java パッケージのダウンロード方法

Maven から SDK パッケージをダウンロードします。たとえば、MapReduce SDK for Java を取得する場合は、Maven Centralodps-sdk-mapred を検索し、バージョン タブに移動して、目的のバージョン横にあるダウンロードアイコンをクリックします。

利用可能なパッケージの完全な一覧については、「Java SDK」をご参照ください。

MaxCompute SDK for Java を使用した SQL フラグの設定方法

DataWorks コンソールまたは MaxCompute クライアント (odpscmd) でフラグを設定する方法(たとえば、ステートメントの前に set odps.sql.type.system.odps2=true; を追加)は、SDK 経由で SQL を送信する際には機能しません。代わりに、SQLTask.setProperty() を使用します。

// SQLTask オブジェクトを作成
SQLTask task = new SQLTask();
task.setName("foobar");
task.setQuery("select ...");

// フラグマップを構築
Map<String, String> settings = new HashMap<>();
settings.put("odps.sql.type.system.odps2", "true");
// 必要に応じて他のフラグも追加

// 重要な手順:マップを JSON 文字列としてシリアル化し、タスクに設定
task.setProperty("settings", new JSONObject(settings).toString());

// タスクを送信
Instance instance = odps.instances().create(task);

LogView を使用した Java SDK エラーのトラブルシューティング方法

LogView インターフェイスの generateLogView メソッドを使用します。

Instance i = SQLTask.run(odps, sql);
String logview = odps.logview().generateLogView(i, 7 * 24);

返された URL をブラウザで開き、ジョブの実行詳細を確認してエラーの原因を特定します。

Java 業務コードからの SQL ジョブ実行方法

Java コード内で MaxCompute SDK for Java を直接呼び出します。セットアップ手順およびコード例については、「Java SDK」をご参照ください。

SQLTask クエリから 10,000 件を超えるレコードを取得する方法

SQLTask では結果が最大 10,000 件に制限されます。完全なデータセットを取得するには、クエリ結果を MaxCompute テーブルに書き込み、その後 Tunnel 詳細については、「SQL 結果のエクスポート方法」をご参照ください。 コマンドを使用してテーブルをダウンロードします。

SQLTask の結果セット制限について

SQLTask.getResult() を呼び出すと、結果セットは 10,000 件 で制限されます。

Instance instance = SQLTask.run(odps, "SQL ステートメント");
instance.waitForSuccess();
List<Record> records = SQLTask.getResult(instance);

より大規模なデータセットの場合には、代わりに Tunnel SDK を使用してデータをエクスポートしてください。

SQLTask と DownloadSession の違い

SQLTaskDownloadSession
目的SQL ステートメントを実行し、結果を返す既存のテーブルからデータをダウンロードする
結果件数制限デフォルトで 10,000 件上限なし

結果がメモリに収まる範囲でのアドホッククエリには SQLTask を使用します。テーブル全体または大規模なデータセットのエクスポートが必要な場合には DownloadSession を使用します。

MaxCompute SDK for Java 使用時のジョブ実行時間の長さを解消する方法

主に以下の 2 つの原因が考えられます。

インスタンスの LogView URL が取得できない

instance.waitForSuccess() を呼び出した後、ジョブが完了するまで呼び出し元がブロックされます。ジョブの実行が遅い場合、その原因を把握できません。すべてのインスタンスについて LogView URL を取得することで、リアルタイムでジョブの状況を確認できます。

Instance i = SQLTask.run(odps, sql);
String logview = odps.logview().generateLogView(i, 7 * 24);
System.out.println("LogView: " + logview);
i.waitForSuccess();

あるいは、MaxCompute クライアント (odpscmd) で WAIT <instance_id> コマンドを実行して、実行中のインスタンスの LogView URL を取得することもできます。詳細については、「インスタンスの LogView」をご参照ください。

RestClient のリトライが失敗している(エラーが非表示)

テーブルアクセス操作によって RestClient のリトライが繰り返される場合、リトライログを取得しない限り根本原因が隠されたままになります。各リトライ試行をログ出力するため、RetryLogger 抽象クラスを実装します。実装方法の詳細については、「エラーログの返却」をご参照ください。

java.lang.ClassNotFoundException の対処方法

このエラーは、通常、ローカル環境で依存関係が不足しているか、重複していることを意味します。プロジェクトの構成を確認してください。

  • すべての必須依存関係が正しく宣言・解決されていることを確認します。

  • 重複するパッケージのインポートを削除します。

MaxCompute で MapReduce ジョブを実行中にこのエラーが発生した場合は、-resources パラメーターを使用して必要な依存関係が含まれているかを確認してください。

OpenJDK 64-Bit Server VM warning: Insufficient space for shared memory の対処方法

JVM の一時ファイルを格納するために使用されるディレクトリの空き容量が不足しています。df コマンドを実行して該当ディレクトリの空き容量を確認し、十分な空き領域を確保してください。