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

MaxCompute:Tunnel SDK のよくある質問

最終更新日:Jun 26, 2026

このトピックでは、Tunnel ソフトウェア開発キット (SDK) の使用に関するよくある質問 (FAQ) について説明します。

カテゴリ

よくある質問

Tunnel SDK のアップロード

Tunnel SDK のダウンロード

Tunnel SDK を使用してデータをダウンロードする際に発生する "You need to specify a partitionspec along with the specified table" エラーを解決するにはどうすればよいですか。

その他の質問

Tunnel SDK によるデータアップロード時のパーティションへの自動分散

Tunnel SDK は、アップロードされたデータを異なるパーティションに自動的に分散することはできません。各アップロードは、1 つのテーブルまたはテーブル内の単一のパーティションのみを対象とします。パーティションテーブルの場合は、ターゲットパーティションを指定する必要があります。多階層パーティションテーブルの場合は、最下層のパーティションを指定する必要があります。

Tunnel SDK を使用したデータアップロード時のユーザー定義関数 (UDF) から作成された JAR パッケージのサイズ制限

JAR パッケージは 10 MB を超えることはできません。JAR パッケージが 10 MB より大きい場合は、MaxCompute の Tunnel Upload コマンドを使用してデータをアップロードできます。

Tunnel SDK によるデータアップロード時のパーティション数の制限

最大 60,000 のパーティションをサポートしています。パーティション数が多すぎると、統計や分析が複雑になる可能性があります。MaxCompute は単一のジョブ内のインスタンス数を制限しており、ジョブインスタンス数は入力データ量とパーティション数に密接に関連しています。したがって、ビジネスニーズを評価し、パーティション数が多すぎることによる問題を避けるために、適切なパーティション分割ポリシーを選択する必要があります。

Tunnel SDK によるデータアップロード時に発生する "StatusConflict" エラーの解決策

  • 現象:

    Tunnel SDK を使用してデータをアップロードすると、次のエラーが返されます:

    RequestId=20170116xxxxxxx, ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status. java.io.IOException: RequestId=20170116xxxxxxx, ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status.at com.aliyun.odps.tunnel.io.TunnelRecordWriter.close(TunnelRecordWriter.java:93)
  • 原因:このエラーは、RecordWriter を閉じようとする際に発生します。考えられる原因は次のとおりです:

    • すでに閉じられている RecordWriter を閉じようとした。

    • RecordWriter に対応するセッションがすでに閉じられていた。

    • セッションがすでにコミットされていた。

  • 解決策:前述の原因を確認してください。たとえば、セッションをコミットする前にログを出力して、RecordWriter とセッションのステータスを確認できます。これらの問題が存在しないことを確認した後、再度データのアップロードを試みてください。

Tunnel SDK によるデータアップロード時に発生する "Blocks Not Match" エラーの解決策

  • 現象:

    Tunnel SDK を使用してデータをアップロードすると、次のエラーが返されます:

    ErrorCode=Local Error, ErrorMessage=Blocks not match, server: 0, tunnelServiceClient: 1
    at com.aliyun.odps.tunnel.TableTunnel$UploadSession.commit(TableTunnel.java:814)      
  • 原因:

    サーバーが受信したブロックの数が、コミットパラメータで指定されたブロックの数と一致しません。

  • 解決策:

    • コード内で、uploadSession.openRecordWriter(i) で開いたライターの数と、コミット時に使用されるブロック配列を確認してください。これらが互いに対応していることを確認してください。

    • 書き込み操作が完了した後、recordWriter.close(); が呼び出されていることを確認してください。セッションを直接コミットすると、サーバー側のブロック数が期待される数と一致しない場合があります。

8,000万件のレコードを一括アップロードした後、odps tunnel recordWriter.close() の実行時に発生する "StatusConflict" エラーの解決策

  • 現象:

    一度に 8,000 万件のレコードをアップロードし、odps tunnel recordWriter.close() を実行すると、次のエラーが返されます:

    ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status.
  • 原因:

    以前の操作ですでにセッションが閉じられたかコミットされたため、セッションが無効な状態になっています。

  • 解決策:

    新しいセッションを作成し、再度データをアップロードしてください。各パーティションには個別のセッションが必要です。エラーが複数回のコミットによって引き起こされた場合は、まずデータが正常にアップロードされたかどうかを確認してください。アップロードに失敗した場合は、操作を再試行してください。詳細については、「マルチスレッドアップロードの例」をご参照ください。

Tunnel SDK でのバッチデータアップロード時に TunnelBufferedWriter を使用してエラーを回避する方法

バージョン 0.21.3-public 以降、MaxCompute Java SDK には BufferedWriter SDK が含まれています。これにより、データアップロードが簡素化され、フォールトトレランスが提供されます。ユーザー側では、セッションでライターを開き、レコードを書き込むだけで済みます。実際には、BufferedWriter はまずクライアント側のバッファにレコードをキャッシュします。バッファがいっぱいになると、HTTP 接続を開いてデータをアップロードします。

BufferedWriter は、障害を許容し、データアップロードの成功を保証するように設計されています。詳細については、「TunnelBufferedWriter」をご参照ください。

Tunnel SDK によるデータダウンロード時に発生する "You need to specify a partitionspec along with the specified table" エラーの解決策

  • 現象:

    Tunnel SDK を使用してパーティションテーブルからデータをダウンロードすると、次のエラーが返されます:

    ErrorCode=MissingPartitionSpec, ErrorMessage=You need to specify a partitionspec along with the specified table.       
  • 原因:

    Tunnel SDK を使用してパーティションテーブルからデータをダウンロードする場合、パーティションキー列の値を指定する必要があります。そうしないと、エラーが発生します。

  • 解決策:

    • MaxCompute クライアントツールの Tunnel コマンドラインを使用してデータをエクスポートする場合、クライアントはパーティションテーブル全体のエクスポートをサポートしています。データはフォルダにエクスポートされます。

    • Tunnel SDK を使用してデータをエクスポートする場合は、まず SDK を使用してテーブルのすべてのパーティションを取得します。以下にコマンドの例を示します:

      odps.tables().get(tablename).getPartitions()

MaxCompute Tunnel SDK がサポートしているプログラミング言語

MaxCompute Tunnel は現在、Java SDK をサポートしています。

BlockId の再利用

BlockId は、同じ UploadSession 内で再利用することはできません。単一の UploadSession の場合、BlockId で RecordWriter を開き、データのバッチを書き込み、close() を呼び出した後、同じ BlockId を使用して別の RecordWriter を開くことはできません。デフォルトでは、最大 20,000 ブロックがあり、BlockId の範囲は 0~19,999 です。

ブロックのサイズ制限

Tunnel にアップロードされるデータブロックのデフォルトサイズは 100 MiB です。単一ブロックの最大サイズは 100 GB です。64 MB を超えるデータの場合、各ブロックが 1 つのファイルに対応するようにしてください。64 MB 未満のファイルは小さいファイルと見なされます。小さいファイルが多すぎると、パフォーマンスが低下する可能性があります。大量のデータを継続的にアップロードする場合は、ブロックサイズを 64 MB から 256 MB の間に設定してください。日次バッチアップロードを実行する場合は、ブロックサイズを約 1 GB に設定できます。

新しい BufferedWriter を使用すると、アップロードが簡素化され、小さいファイルなどの問題を回避するのに役立ちます。詳細については、「TunnelBufferedWriter」をご参照ください。

読み取り/書き込みタイムアウトまたは IOException の解決策

データをアップロードする際、Writer が書き込む 8 KB のデータごとにネットワークアクションがトリガーされます。120 秒間ネットワークアクティビティがない場合、サーバー側から接続を閉じます。その後、Writer は使用できなくなります。書き込みを続けるには、新しい Writer を開く必要があります。

TunnelBufferedWriter の使用を推奨します。

データをダウンロードする場合、Reader にも同様のメカニズムがあります。長期間ネットワークアクティビティがない場合、接続は切断されます。これを防ぐには、他のシステムインターフェイスの呼び出しを挟まずに、Reader プロセスを継続的に実行してください。