多線程上傳示例__SDK示例_批量數據通道_大數據計算服務-阿裏雲
import java.io.IOException;import java.util.ArrayList;import java.util.Date;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import com.aliyun.odps.Column;import com.aliyun.odps.Odps;import com.aliyun.odps.PartitionSpec;import com.aliyun.odps.TableSchema;import com.aliyun.odps.account.Account;import com.aliyun.odps.account.AliyunAccount;import com.aliyun.odps.data.Record;import com.aliyun.odps.data.RecordWriter;import com.aliyun.odps.tunnel.TableTunnel;import com.aliyun.odps.tunnel.TunnelException;import com.aliyun.odps.tunnel.TableTunnel.UploadSession;class UploadThread implements Callable<Boolean> {private long id;private RecordWriter recordWriter;private Record record;private TableSchema tableSchema;public UploadThread(long id, RecordWriter recordWriter, Record record,TableSchema tableSchema) {this.id = id;this.recordWriter = recordWriter;this.record = record;this.tableSchema = tableSchema;}@Overridepublic Boolean call() {for (int i = 0; i < tableSchema.getColumns().size(); i++) {Column column = tableSchema.getColumn(i);switch (column.getType()) {case BIGINT:record.setBigint(i, 1L);break;case BOOLEAN:record.setBoolean(i, true);break;case DATETIME:record.setDatetime(i, new Date());break;case DOUBLE:record.setDouble(i, 0.0);break;case STRING:record.setString(i, "sample");break;default:throw new RuntimeException("Unknown column type: "+ column.getType());}}for (int i = 0; i < 10; i++) {try {recordWriter.write(record);} catch (IOException e) {recordWriter.close();e.printStackTrace();return false;}}recordWriter.close();return true;}}public class UploadThreadSample {private static String accessId = "<your access id>";private static String accessKey = "<your access Key>";private static String odpsUrl = "<https://service.odps.aliyun.com/api>";private static String project = "<your project>";private static String table = "<your table name>";private static String partition = "<your partition spec>";private static int threadNum = 10;public static void main(String args[]) {Account account = new AliyunAccount(accessId, accessKey);Odps odps = new Odps(account);odps.setEndpoint(odpsUrl);odps.setDefaultProject(project);try {TableTunnel tunnel = new TableTunnel(odps);PartitionSpec partitionSpec = new PartitionSpec(partition);UploadSession uploadSession = tunnel.createUploadSession(project,table, partitionSpec);System.out.println("Session Status is : "+ uploadSession.getStatus().toString());ExecutorService pool = Executors.newFixedThreadPool(threadNum);ArrayList<Callable<Boolean>> callers = new ArrayList<Callable<Boolean>>();for (int i = 0; i < threadNum; i++) {RecordWriter recordWriter = uploadSession.openRecordWriter(i);Record record = uploadSession.newRecord();callers.add(new UploadThread(i, recordWriter, record,uploadSession.getSchema()));}pool.invokeAll(callers);pool.shutdown();Long[] blockList = new Long[threadNum];for (int i = 0; i < threadNum; i++)blockList[i] = Long.valueOf(i);uploadSession.commit(blockList);System.out.println("upload success!");} catch (TunnelException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}}
注意:對於tunnel endpoint,支持指定或者不指定。如果指定,按照指定的endpoint路由。如果不指定,支持自動路由。
最後更新:2016-07-12 15:15:40
上一篇:
簡單下載示例__SDK示例_批量數據通道_大數據計算服務-阿裏雲
下一篇:
多線程下載示例__SDK示例_批量數據通道_大數據計算服務-阿裏雲
設置解析記錄時提示衝突的原因__網站解析_產品使用問題_雲解析-阿裏雲
修改路徑緩存策略__配置操作接口_API 手冊_CDN-阿裏雲
ALIYUN::ECS::SNatEntry__資源列表_資源編排-阿裏雲
1.2 阿裏雲企業郵箱-管理篇__雲郵箱快速開始_阿裏雲郵箱 體驗_體驗館-阿裏雲
ListUsers__用戶管理接口_RAM API文檔_訪問控製-阿裏雲
快照 2.0 產品規格升級__快照_產品簡介_雲服務器 ECS-阿裏雲
查詢RDS可用區信息和數據複製狀態__實例管理_API 參考_雲數據庫 RDS 版-阿裏雲
鬧鍾_阿裏雲幫助中心-阿裏雲,領先的雲計算服務提供商
使用第三方數據卷__數據卷指南_用戶指南_容器服務-阿裏雲
查看當前實例數據庫參數運行列表__參數管理_API 參考_雲數據庫 RDS 版-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲