このトピックでは、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);
}UploadSessionの説明
Time-to-live (TTL): アップロードインスタンスを作成するとプロセス全体が開始され、アップロードプロセスが完了すると終了します。
アップロードインスタンスを作成します。 Constructorメソッドを呼び出すか、TableTunnelを使用してUploadインスタンスを作成できます。
同期モードでリクエストを送信します。
サーバーはアップロードインスタンスのセッションを作成し、アップロードインスタンスを識別するための一意のアップロードIDを生成します。 クライアントでgetIdコマンドを実行して、アップロードIDを取得できます。
データのアップロード:
同期モードでリクエストを送信します。
openRecordWriterメソッドを呼び出して、RecordWriterインスタンスを生成します。 blockIdパラメーターは、アップロードするデータを識別し、テーブル内のデータの位置を記述します。 blockIdの値の範囲は [0, 20000] です。 データのアップロードが失敗した場合は、blockIdパラメーターに基づいてデータを再アップロードできます。
アップロードの表示:
同期モードでリクエストを送信します。
getStatusメソッドを呼び出して、現在のアップロードステータスを取得します。
getBlockListメソッドを呼び出して、アップロードされたブロックのリストを取得します。 サーバーに送信したブロックIDリストと結果を比較し、アップロードに失敗したブロックを再アップロードします。
エンドアップロード:
同期モードでリクエストを送信します。
commit(Long[] blocks) メソッドを呼び出します。 ブロックパラメータは、アップロードされたブロックを示します。 サーバは、ブロックリストを検証する。
この検証により、データの精度を高めることができる。 提供されたブロックリストがサーバ上のブロックリストと一致しない場合、エラーが返される。
コミット操作が失敗した場合は、もう一度お試しください。
状態の説明:
UNKNOWN: サーバーがセッションを作成するときの初期状態です。
NORMAL: アップロードセッションが作成されました。
CLOSING: completeメソッドを呼び出してアップロードセッションを終了すると、サーバーは状態をCLOSINGに変更します。
CLOSED: アップロードが完了しました。 データは、結果テーブルが配置されているディレクトリに移動されます。
EXPIRED: アップロードセッションがタイムアウトしました。
CRITICAL: サービスエラーが発生しました。
同じアップロードセッション内で使用されるブロックIDは一意である必要があります。 ブロックIDを使用してRecordWriterを開き、データを書き込み、closeメソッドとcommitメソッドを呼び出す場合、このブロックIDを使用して別のRecordWriterを開くことはできません。
ブロックの最大サイズは100 GBです。 各ブロックに64 MBを超えるデータを保存することを推奨します。
サーバー上の各セッションのTTLは24時間です。
データをアップロードすると、RecordWriterが8 KBのデータを書き込むたびにネットワークアクションがトリガーされます。 120秒以内にネットワークアクションがトリガーされない場合、サーバーは接続を閉じ、RecordWriterは使用できなくなります。 データをアップロードするには、新しいRecordWriterを開く必要があります。
openBufferedWriterを使用してデータをアップロードすることを推奨します。 この操作では、blockIdの詳細は表示されず、内部データキャッシュが含まれます。 ブロックのアップロードに失敗すると、Writerは自動的にブロックを再アップロードします。 詳細については、「BufferedWriterを使用したデータのアップロード」をご参照ください。