开发者社区> 问答> 正文

MaxCompute用户指南:SDK:Java SDK



本文将为您介绍较为常用的 MaxCompute 核心接口,更多详情请参见 SDK Java Doc
您可以通过 Maven 管理配置新 SDK 的版本。Maven 的配置信息如下(最新版本可以随时到 search.maven.org 搜索 odps-sdk-core 获取):

  1. <dependency>
  2.   <groupId>com.aliyun.odps</groupId>
  3.   <artifactId>odps-sdk-core</artifactId>
  4.   <version>0.26.2-public</version>
  5. </dependency>

MaxCompute 提供的 SDK 包整体信息,如下表所示:
包名描述
odps-sdk-coreMaxCompute 的基础功能,例如:对表,Project 的操作,以及 Tunnel 均在此包中
odps-sdk-commons一些 Util 封装
odps-sdk-udfUDF 功能的主体接口
odps-sdk-mapredMapReduce 功能
odps-sdk-graphGraph Java SDK,搜索关键词“odps-sdk-graph”


AliyunAccount


阿里云认证账号。输入参数为 accessId 及 accessKey,是阿里云用户的身份标识和认证密钥。此类用来初始化 MaxCompute。

MaxCompute


MaxCompute SDK 的入口,您可通过此类来获取项目空间下的所有对象集合,包括: ProjectsTablesResourcesFunctionsInstances

注意
MaxCompute 原名 ODPS,因此在现有的 SDK 版本中,入口类仍命名为 ODPS。

您可以通过传入 AliyunAccount 实例来构造 MaxCompute 对象。程序示例如下:
  1.     Account account = new AliyunAccount("my_access_id", "my_access_key");
  2.     Odps odps = new Odps(account);
  3.     String odpsUrl = "<your odps endpoint>";
  4.     odps.setEndpoint(odpsUrl);
  5.     odps.setDefaultProject("my_project");
  6.     for (Table t : odps.tables()) {
  7.         ....
  8.     }


Projects


Projects 是 MaxCompute 中所有项目空间的集合。集合中的元素为 Project。程序示例如下:
  1.     Account account = new AliyunAccount("my_access_id", "my_access_key");
  2.     Odps odps = new Odps(account);
  3.     String odpsUrl = "<your odps endpoint>";
  4.     odps.setEndpoint(odpsUrl);
  5.     Project p = odps.projects().get("my_exists");
  6.     p.reload();
  7.     Map<String, String> properties = prj.getProperties();
  8.     ...


Project


Project 是对项目空间信息的描述,可以通过 Projects 获取相应的项目空间。

SQLTask


SQLTask 是用于运行、处理 SQL 任务的接口。可以通过 run 接口直接运行 SQL。run 接口返回 Instance 实例,通过 Instance 获取 SQL 的运行状态及运行结果。程序示例如下:
  1.     import java.util.List;
  2.     import com.aliyun.odps.Instance;
  3.     import com.aliyun.odps.Odps;
  4.     import com.aliyun.odps.OdpsException;
  5.     import com.aliyun.odps.account.Account;
  6.     import com.aliyun.odps.account.AliyunAccount;
  7.     import com.aliyun.odps.data.Record;
  8.     import com.aliyun.odps.task.SQLTask;
  9.     public class testSql {
  10.     private static final String accessId = "";
  11.     private static final String accessKey = "";
  12.     private static final String endPoint = "http://service.odps.aliyun.com/api";
  13.     private static final String project = "";
  14.     private static final String sql = "select category from iris;";
  15.     public static void
  16.     main(String[] args) {
  17.       Account account = new AliyunAccount(accessId, accessKey);
  18.        Odps odps = new Odps(account);
  19.        odps.setEndpoint(endPoint);
  20.        odps.setDefaultProject(project);
  21.        Instance i;
  22.       try {
  23.          i = SQLTask.run(odps, sql);
  24.          i.waitForSuccess();
  25.          List<Record> records = SQLTask.getResult(i);
  26.          for(Record r:records){
  27.             System.out.println(r.get(0).toString());
  28.          }
  29.       } catch (OdpsException e) {
  30.          e.printStackTrace();
  31.       }
  32.    }
  33.   }

注意
如果您想创建表,需要通过 SQLTask 接口,而不是 Table 接口。您需要将 创建表 的语句传入 SQLTask。


Instances


Instances 是 MaxCompute 中所有实例(Instance)的集合,集合中的元素为 Instance。程序示例如下:
  1.     Account account = new AliyunAccount("my_access_id", "my_access_key");
  2.     Odps odps = new Odps(account);
  3.     String odpsUrl = "<your odps endpoint>";
  4.     odps.setEndpoint(odpsUrl);
  5.     odps.setDefaultProject("my_project");
  6.     for (Instance i : odps.instances()) {
  7.         ....
  8.     }


Instance


Instance 是对实例信息的描述,可以通过 Instances 获取相应的实例。程序示例如下:
  1.     Account account = new AliyunAccount("my_access_id", "my_access_key");
  2.     Odps odps = new Odps(account);
  3.     String odpsUrl = "<your odps endpoint>";
  4.     odps.setEndpoint(odpsUrl);
  5.     Instance ins = odps.instances().get("instance id");
  6.     Date startTime = instance.getStartTime();
  7.     Date endTime = instance.getEndTime();
  8.     ...
  9.     Status instanceStatus = instance.getStatus();
  10.     String instanceStatusStr = null;
  11.     if (instanceStatus == Status.TERMINATED) {
  12.       instanceStatusStr = TaskStatus.Status.SUCCESS.toString();
  13.       Map<String, TaskStatus> taskStatus = instance.getTaskStatus();
  14.       for (Entry<String, TaskStatus> status : taskStatus.entrySet()) {
  15.         if (status.getValue().getStatus() != TaskStatus.Status.SUCCESS) {
  16.           instanceStatusStr = status.getValue().getStatus().toString();
  17.           break;
  18.         }
  19.       }
  20.     } else {
  21.       instanceStatusStr = instanceStatus.toString();
  22.     }
  23.     ...
  24.     TaskSummary summary = instance.getTaskSummary("instance name");
  25.     String s = summary.getSummaryText();


Tables


Tables 是 MaxCompute 中所有表的集合,集合中的元素为 Table。程序示例如下:
  1.     Account account = new AliyunAccount("my_access_id", "my_access_key");
  2.     Odps odps = new Odps(account);
  3.     String odpsUrl = "<your odps endpoint>";
  4.     odps.setEndpoint(odpsUrl);
  5.     odps.setDefaultProject("my_project");
  6.     for (Table t : odps.tables()) {
  7.         ....
  8.     }


Table


Table 是对表信息的描述,可以通过 Tables 获取相应的表。程序示例如下:
  1.     Account account = new AliyunAccount("my_access_id", "my_access_key");
  2.     Odps odps = new Odps(account);
  3.     String odpsUrl = "<your odps endpoint>";
  4.     odps.setEndpoint(odpsUrl);
  5.     Table t = odps.tables().get("table name");
  6.     t.reload();
  7.     Partition part = t.getPartition(new PartitionSpec(tableSpec[1]));
  8.     part.reload();
  9.     ...


Resources


Resources 是 MaxCompute 中所有资源的集合。集合中的元素为 Resource。程序示例如下:
  1.     Account account = new AliyunAccount("my_access_id", "my_access_key");
  2.     Odps odps = new Odps(account);
  3.     String odpsUrl = "<your odps endpoint>";
  4.     odps.setEndpoint(odpsUrl);
  5.     odps.setDefaultProject("my_project");
  6.     for (Resource r : odps.resources()) {
  7.         ....
  8.     }


Resource


Resource 是对资源信息的描述,可以通过 Resources 获取相应的资源。程序示例如下:
  1.     Account account = new AliyunAccount("my_access_id", "my_access_key");
  2.     Odps odps = new Odps(account);
  3.     String odpsUrl = "<your odps endpoint>";
  4.     odps.setEndpoint(odpsUrl);
  5.     Resource r = odps.resources().get("resource name");
  6.     r.reload();
  7.     if (r.getType() == Resource.Type.TABLE) {
  8.      TableResource tr = new TableResource(r);
  9.      String tableSource = tr.getSourceTable().getProject() + "."
  10.          + tr.getSourceTable().getName();
  11.      if (tr.getSourceTablePartition() != null) {
  12.        tableSource += " partition(" + tr.getSourceTablePartition().toString()
  13.            + ")";
  14.      }
  15.      ....  
  16.     }

创建文件资源的示例,如下所示:
  1.     String projectName = "my_porject";
  2.     String source = "my_local_file.txt";
  3.     File file = new File(source);
  4.     InputStream is = new FileInputStream(file);
  5.     FileResource resource = new FileResource();
  6.     String name = file.getName();
  7.     resource.setName(name);
  8.     odps.resources().create(projectName, resource, is);

创建表资源的示例,如下所示:
  1.     TableResource resource = new TableResource(tableName, tablePrj, partitionSpec);
  2.     //resource.setName(INVALID_USER_TABLE);
  3.     resource.setName("table_resource_name");
  4.     odps.resources().update(projectName, resource);


Functions


Functions 是 MaxCompute 中所有函数的集合。集合中的元素为 Function。程序示例如下:
  1.     Account account = new AliyunAccount("my_access_id", "my_access_key");
  2.     Odps odps = new Odps(account);
  3.     String odpsUrl = "<your odps endpoint>";
  4.     odps.setEndpoint(odpsUrl);
  5.     odps.setDefaultProject("my_project");
  6.     for (Function f : odps.functions()) {
  7.         ....
  8.     }


Function


Function 是对函数信息的描述,可以通过 Functions 获取相应的函数。程序示例如下:
  1.     Account account = new AliyunAccount("my_access_id", "my_access_key");
  2.     Odps odps = new Odps(account);
  3.     String odpsUrl = "<your odps endpoint>";
  4.     odps.setEndpoint(odpsUrl);
  5.     Function f = odps.functions().get("function name");
  6.     List<Resource> resources = f.getResources();

创建函数的示例,如下所示:
  1.     String resources = "xxx:xxx";
  2.     String classType = "com.aliyun.odps.mapred.open.example.WordCount";
  3.     ArrayList<String> resourceList = new ArrayList<String>();
  4.     for (String r : resources.split(":")) {
  5.       resourceList.add(r);
  6.     }
  7.     Function func = new Function();
  8.     func.setName(name);
  9.     func.setClassType(classType);
  10.     func.setResources(resourceList);
  11.     odps.functions().create(projectName, func);

展开
收起
行者武松 2017-10-24 10:36:06 2473 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
大数据AI一体化的解读 立即下载
极氪大数据 Serverless 应用实践 立即下载
大数据&AI实战派 第2期 立即下载