ここでは、UploadSession インターフェイスを紹介します。

UploadSession インターフェイスの定義

UploadSession インターフェイスは、次のように定義されています。
public class UploadSession {
        UploadSession(Configuration conf, String projectName, String tableName,
            String partitionSpec) throws TunnelException;
        UploadSession(Configuration conf, String projectName, String tableName, 
            String partitionSpec, String uploadId) throws TunnelException;
        public void commit(Long[] blocks);
        public Long[] getBlockList();
        public String getId();
        public TableSchema getSchema();
        public UploadSession.Status getStatus();
        public Record newRecord();
        public RecordWriter openRecordWriter(long blockId);
        public RecordWriter openRecordWriter(long blockId, boolean compress);
        public RecordWriter openBufferedWriter();
        public RecordWriter openBufferedWriter(boolean compress);
    }

アップロードオブジェクトの説明

  • ライフサイクル: アップロードインスタンスの作成から始まり、アップロードプロセスが完了すると終わります。
  • アップロードインスタンスの作成: Constructor を呼び出すか、TableTunnelを使用すると、インスタンスを作成できます。
    • リクエストモード: 同期
    • このアップロードインスタンスのセッションがサーバーで作成され、一意の UploadId が生成されます。 クライアントから getId を使用して UploadId を取得します。
  • データのアップロード:
    • リクエストモード: 同期
    • openRecordWriter メソッドを呼び出して、RecordWriter インスタンスを作成します。 ブロック ID によって、アップロード対象のデータが識別されます。ブロック ID はテーブル内の位置を示し、値の範囲は 0 から20000 です。 データのアップロードに失敗した場合、ブロック ID を使用して再度アップロードしてください。
  • アップロードの表示:
    • リクエストモード: 同期
    • 現行のアップロードスターテスを取得するには、getStatus を呼び出します。
    • 正常にアップロードされた blockId リストを取得するには、getBlockList を呼び出します。 アップロードに失敗した blockId を見つけて、再度アップロードするには、アップロードの blockId リストの 結果を比較します。
  • アップロードの完了:
    • リクエストモード: 同期
    • commit (Long[] blocks) メソッドを呼び出します。 ブロックリストには、正常にアップロードされたブロックが表示されます。 このリストがサーバーで検証されます。
    • この機能により、データ検証が強化されます。 ブロックリストがサーバー上のブロックリストと一致しない場合、エラーが発生します。
    • commit に失敗した場合は、再試行してください。
  • 6 種類のステータスの説明は、次の通りです。
    1. UNKNOWN: セッションが作成されたときの初期値です。
    2. NORMAL: アップロードオブジェクトは、正常に作成されています。
    3. CLOSING: complete が呼び出されると、ステータスが CLOSING に変更されます。
    4. CLOSED: アップロードは完了しています。 正確には、データが結果テーブルのあるディレクトリに移動されています。
    5. EXPIRED: アップロードセッションはタイムアウトしています。
    6. CRITICAL: サービスエラーが発生しています。
  • 同一 UploadSession 内にある blockId は、一意でなければなりません。1 つの UploadSessionで、blockId を使用して RecordWriter を開く場合は、データを一括で書き込んでから close を呼び出し、その後 commit を呼び出します。 別の RecordWriter を使用してデータを書き込む場合、同じ blockID を使用しないでください。
  • ブロックの最大サイズは 100 GB です。64 MB より大きい方が望ましいです。
  • サーバー上の各セッションのしきい値は、24 時間です。
  • データのアップロード中、Writer によってデータが 8 KB 書き込まれるたびにネットワーク動作がトリガーされます。 120 秒間、ネットワーク動作がトリガーされない場合、サーバーによって接続が閉じられます。 この場合、Writer は使用できなくなり、新しい接続を開く必要があります。
  • データのアップロードには openBufferedWriter インターフェイスを使用することを推奨します。 このインターフェイスには、blockId の詳細は表示されません。アップロード失敗時の自動再試行用の内部データキャッシュが含まれます。 詳細は、アップロード手順およびTunnelBufferedWriter の例をご参照ください。