转载自: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());
}
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);