本文为您介绍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接口说明
- 生命周期:从创建Upload实例到结束上传。
 - 创建Upload实例:您可以通过调用构造方法和TableTunnel两种方式进行创建。 
                        					
                        
- 请求方式:同步。
 - Server端会为该Upload创建一个Session, 生成唯一UploadId标识该Upload,客户端可以通过getId获取。
 
 - 上传数据: 
                        					
                        
- 请求方式:同步。
 - 调用openRecordWriter方法,生成RecordWriter实例,其中参数blockId用于标识此次上传的数据,也描述了数据在整个表中的位置,取值范围为[0,20000],当数据上传失败,可以根据blockId重新上传。
 
 - 查看上传: 
                        					
                        
- 请求方式:同步。
 - 调用getStatus可以获取当前Upload状态。
 - 调用getBlockList可以获取成功上传的blockid list,可以和上传的blockid list对比,对失败的blockId重新上传。
 
 - 结束上传: 
                        					
                        
- 请求方式:同步。
 - 调用commit(Long[] blocks)方法,参数blocks列表表示已经成功上传的block列表,Server端会对该列表进行验证。
 - 该功能是加强对数据正确性的校验,如果提供的block列表与Server端存在的block列表不一致抛出异常。
 - Commit失败可以进行重试。
 
 - 六种状态说明: 
                        					
                        
- UNKNOWN:Server端刚创建一个Session时设置的初始值。
 - NORMAL:创建Upload对象成功。
 - CLOSING:当调用complete方法(结束上传)时,服务端会先把状态置为CLOSING。
 - CLOSED:完成结束上传(即把数据移动到结果表所在目录)后。
 - EXPIRED:上传超时。
 - CRITICAL:服务出错。
 
 
说明 
                        				
                        
                  - 同一个Upload中Session的blockId不能重复。对于同一个UploadSession,用一个blockId打开RecordWriter,写入一批数据后,调用close、Commit完成后,不可以再用该blockId打开另一个RecordWriter写入数据。
 - 一个Block大小上限100GB,建议大于64M的数据。
 - 每个Session在服务端的生命周期为24小时。
 - 上传数据时,Writer每写入8KB数据,便会触发一次网络动作,如果120秒内没有网络动作,服务端将主动关闭连接,此时Writer将不可用,请重新打开一个新的Writer写入。
 - 建议使用openBufferedWriter接口上传数据,该接口对您屏蔽了blockId的细节,并且内部带有数据缓存区,会自动进行失败重试,详情请参见BufferedWriter上传示例。