ODPS核心接口,odps核心


转载自:http://www.aiwanba.net/plugin/odps-doc/prddoc/odps_security/index.html

ODPS SDK介绍

ODPS,阿里云开放数据处理服务,是构建在飞天系统上的大规模分布式数据处理服务。以REST API的形式,支持用户提交类SQL的查询语句,对海量数据进行处理。在API之上,还提供SDK开发包和命令行工具,Aliyun.com上还有一个Web演示界面。

在本小节,我们仅会对较为常用的ODPS核心接口做简短介绍,更多详细信息请参阅SDK Java Doc。

AliyunAccount

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

Odps

ODPS SDK的入口,用户通过此类来获取项目空间下的所有对象集合,包括: Projects ,Tables ,Resources ,Functions ,Instances 。用户可以通过传入 AliyunAccount 实例来构造ODPS对象。程序示例如下:

Account account = new AliyunAccount("my_access_id", "my_access_key");

Odps odps = new Odps(account);
/*
 * odps服务内网地址:http://odps-ext.aliyun-inc.com/api
 * odps服务公网地址:http://service.odps.aliyun.com/api
 * 仅当用户处于阿里云内网环境时,才能使用odps服务内网地址
*/
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
odps.setDefaultProject("my_project");

for (Table t : odps.tables()) {
    ....
}

Projects

ODPS中所有项目空间的集合。集合中的元素为 Project 。程序示例如下:

Account account = new AliyunAccount("my_access_id", "my_access_key");

Odps odps = new Odps(account);
/*
 * odps服务内网地址:http://odps-ext.aliyun-inc.com/api
 * odps服务公网地址:http://service.odps.aliyun.com/api
 * 仅当用户处于阿里云内网环境时,才能使用odps服务内网地址
*/
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
Project p = odps.projects().get("my_exists");

Project

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

SQLTask

用于运行、处理SQL任务的接口。可以通过run接口直接运行SQL。run接口返回 Instance 实例,通过Instance获取SQL的运行状态及运行结果。程序示例如下,仅供参考:

Account account = new AliyunAccount("my_access_id", "my_access_key");
Odps odps = new Odps(account);
/*
 * odps服务内网地址:http://odps-ext.aliyun-inc.com/api
 * odps服务公网地址:http://service.odps.aliyun.com/api
 * 仅当用户处于阿里云内网环境时,才能使用odps服务内网地址
*/
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);

Instance instance = SQLTask.run(odps, "my_project", "select ...");
id = instance.getId();

Set<String> taskNames = instance.getTaskNames();
for (String name : taskNames) {
    TaskSummary summary = instance.getTaskSummary(name);
    String s = summary.getSummaryText();
}

Map<String, String> results = instance.getTaskResults();
Map<String, TaskStatus> taskStatus = instance.getTaskStatus();

for (Entry<String, TaskStatus> status : taskStatus.entrySet()) {
    String result = results.get(status.getKey());
}

Note

 

如果用户想创建表,需要通过SQLTask接口,而不是 Table 接口。用户需要将 创建表(CREATE TABLE) 的语句传入SQLTask。

Instances

ODPS中所有实例(Instance)的集合。集合中的元素为 Instance 。程序示例如下:

Account account = new AliyunAccount("my_access_id", "my_access_key");

Odps odps = new Odps(account);
/*
 * odps服务内网地址:http://odps-ext.aliyun-inc.com/api
 * odps服务公网地址:http://service.odps.aliyun.com/api
 * 仅当用户处于阿里云内网环境时,才能使用odps服务内网地址
*/
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
odps.setDefaultProject("my_project");

for (Instance i : odps.instances()) {
    ....
}

Instance

对实例信息的描述,可以通过 Instances 获取相应的实例。程序示例如下:

Account account = new AliyunAccount("my_access_id", "my_access_key");

Odps odps = new Odps(account);
/*
 * odps服务内网地址:http://odps-ext.aliyun-inc.com/api
 * odps服务公网地址:http://service.odps.aliyun.com/api
 * 仅当用户处于阿里云内网环境时,才能使用odps服务内网地址
*/
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
Instance ins = odps.instances().get("instance id");

Tables

ODPS中所有表的集合。集合中的元素为 Table 。程序示例如下:

Account account = new AliyunAccount("my_access_id", "my_access_key");

Odps odps = new Odps(account);
/*
 * odps服务内网地址:http://odps-ext.aliyun-inc.com/api
 * odps服务公网地址:http://service.odps.aliyun.com/api
 * 仅当用户处于阿里云内网环境时,才能使用odps服务内网地址
*/
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
odps.setDefaultProject("my_project");

for (Table t : odps.tables()) {
    ....
}

Table

对表信息的描述,可以通过 Tables 获取相应的表。程序示例如下:

Account account = new AliyunAccount("my_access_id", "my_access_key");

Odps odps = new Odps(account);
/*
 * odps服务内网地址:http://odps-ext.aliyun-inc.com/api
 * odps服务公网地址:http://service.odps.aliyun.com/api
 * 仅当用户处于阿里云内网环境时,才能使用odps服务内网地址
*/
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
Table t = odps.tables().get("table name");

Resources

ODPS中所有资源的集合。集合中的元素为 Resource 。程序示例如下:

Account account = new AliyunAccount("my_access_id", "my_access_key");

Odps odps = new Odps(account);
/*
 * odps服务内网地址:http://odps-ext.aliyun-inc.com/api
 * odps服务公网地址:http://service.odps.aliyun.com/api
 * 仅当用户处于阿里云内网环境时,才能使用odps服务内网地址
*/
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
odps.setDefaultProject("my_project");

for (Resource r : odps.resources()) {
    ....
}

Resource

对资源信息的描述,可以通过 Resources 获取相应的资源。程序示例如下:

Account account = new AliyunAccount("my_access_id", "my_access_key");

Odps odps = new Odps(account);
/*
 * odps服务内网地址:http://odps-ext.aliyun-inc.com/api
 * odps服务公网地址:http://service.odps.aliyun.com/api
 * 仅当用户处于阿里云内网环境时,才能使用odps服务内网地址
*/
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
Resource r = odps.resources().get("resource name");

一个创建文件资源的示例:

String projectName = "my_porject";

String source = "my_local_file.txt";
File file = new File(source);
InputStream is = new FileInputStream(file);

FileResource resource = new FileResource();
String name = file.getName();
resource.setName(name);

odps.resources().create(projectName, resource, is);

一个创建表资源的示例:

TableResource resource = new TableResource(tableName, tablePrj, partitionSpec);
//resource.setName(INVALID_USER_TABLE);
resource.setName("table_resource_name");
odps.resources().update(projectName, resource);

Functions

ODPS中所有函数的集合。集合中的元素为 Function 。程序示例如下:

Account account = new AliyunAccount("my_access_id", "my_access_key");

Odps odps = new Odps(account);
/*
 * odps服务内网地址:http://odps-ext.aliyun-inc.com/api
 * odps服务公网地址:http://service.odps.aliyun.com/api
 * 仅当用户处于阿里云内网环境时,才能使用odps服务内网地址
*/
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
odps.setDefaultProject("my_project");

for (Function f : odps.functions()) {
    ....
}

Function

对函数信息的描述,可以通过 Functions 获取相应的函数。程序示例如下:

Account account = new AliyunAccount("my_access_id", "my_access_key");

Odps odps = new Odps(account);
/*
 * odps服务内网地址:http://odps-ext.aliyun-inc.com/api
 * odps服务公网地址:http://service.odps.aliyun.com/api
 * 仅当用户处于阿里云内网环境时,才能使用odps服务内网地址
*/
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);

Function f = odps.functions().get("function name");

一个创建函数的示例:

String resources = "xxx:xxx";
String classType = "com.aliyun.odps.mapred.open.example.WordCount";

ArrayList<String> resourceList = new ArrayList<String>();
for (String r : resources.split(":")) {
  resourceList.add(r);
}

Function func = new Function();
func.setName(name);
func.setClassType(classType);
func.setResources(resourceList);

odps.functions().create(projectName, func);

相关内容

    暂无相关文章