ODPS使用入门

2015-06-01 10:59

功能

开放数据处理服务(Open Data Processing Service,简称ODPS)是基于飞天分布式平台,由阿里云自主研发的海量数据离线处理服务。ODPS以RESTful API的形式提供针对PB级别数据的、实时性要求不高的批量结构化数据存储和计算能力,主要应用于数据分析与统计、数据挖掘、商业智能等领域。阿里金融、淘宝指数、数据魔方等阿里巴巴关键数据业务的离线处理作业都运行在ODPS上。

ODPS提供了数据上传下载通道和SQL处理操作,并且提供了海量数据仓库的解决方案以及针对大数据的分析建模服务。

  • ODPS SQL:一种类似SQL语法的ODPS数据操作语言,您可以通过客户端工具(一种命令行工具)来使用ODPS SQL,也可以通过ODPS SDK提供的接口(Java API)编程方式来使用ODPS SQL。

  • ODPS Tunnel:ODPS与外部传输数据的通用服务,您可以使用ODPS TUNNEL提供的接口(Java API)编写程序读写ODPS的表(Table)。

  • dship:ODPS为用户提供的命令行数据上传及下载工具,它也是基于ODPS Tunnel之上开发出的一个工具。

开通

需先在阿里云官网(www.aliyun.com)上注册账号(如已有注册账号,则无需注册),注册完成后,登录阿里云官网。

进入ODPS产品页面,即可申请开通ODPS服务,开通ODPS服务后,无需任何配置,可直接登录ODPS管理控制台。

在ODPS管理控制台中,您即可以创建Access Key(如已创建过,则无需创建)和创建项目(project)。

project类似传统关系数据库中DB的概念,创建完project后,即可以利用ODPS管理控制台简单的试用ODPS做数据处理,如创建表、上传数据、写SQL查询或处理数据等。

使用

ODPS管理控制台

主要用于project owner(即创建project的云账号,相当于传统关系数据库DBA的角色)对于project、用户、角色、表、安全等的管理、配置、授权、监控等,也可使用ODPS管理控制台简单的体验和试用ODPS,正式使用ODPS还请使用ODPS官方提供的客户端、SDK、工具等。

上传和下载数据

ODPS提供专门的数据传输通道或工具,来用于数据上传至ODPS或者从ODPS下载数据,其中,ODPS TUNNEL提供的接口(Java API)用于编程模式来实现数据上传或下载至ODPS,dship是一个命令行工具,提供本地文件上传或下载至ODPS

数据处理

您可以使用ODPS MapReduce(需要特别申请使用)、ODPS UDF、ODPS SQL(类似 SQL 语言)等方式来使用ODPS并处理数据,其中,ODPS SDK提供的接口(Java API)用于编程模式来实现ODPS处理数据,ODPS SDK对于ODPS MapReduce、ODPS UDF、ODPS SQL都支持,ODPS客户端是一个命令行工具,支持使用ODPS SQL来处理数据

价格

ODPS以项目(Project)为单位,对存储、计算和数据下载三个方面分别计费。

存储计费

存储到ODPS的数据,包括表(Table)和资源(Resource)等,会按照其数据容量的大小进行计费,计费周期是一个小时,具体计费公式为:

每小时存储费用 = 存储容量 * 存储价格 每G每小时存储价格是0.0008元,也就是说一天一G的费用是2分钱。

说明:

1.由于ODPS会对用户数据进行压缩存储,计费依据的容量大小是压缩后的数据,因此多数情况下与上传数据之前用户自己统计的数据文件大小不同,压缩比一般在2~5倍左右;
2.账单出账时间通常在当前计费周期结束后一小时内,最长不超过三个小时。例如10:00-11:00的账单一般会在12:00以前生成,具体以系统出账时间为准, 账单生成后会自动从您的账户余额中扣除费用以结算账单。

计算计费

目前ODPS仅开放了SQL计算任务,SQL计算任务的计费公式为:

一次SQL计算费用 = 计算输入数据量 * SQL复杂度 * SQL价格

  • SQL价格0.3元/GB

  • 计算输入数据量:指一个SQL语句实际扫描的数据量,大部分的SQL语句有分区过滤和列裁剪,所以一般情况下这个值会远小于源表数据大小

    a) 列裁剪:例如用户提交的SQL是select f1,f2,f3 from t1; 只计算t1表中f1,f2,f3三列的数据量,其他列不会参与计费。

    b) 分区过滤:例如SQL语句中含有where ds>”20130101”,ds是分区列,则计费的数据量只会包括实际读取的分区,不会包括其他分区的数据。

  • SQL关键字个数 = Join个数 + Group By个数 + Order By个数 + Distinct个数 + 窗口函数个数 + analyze个数 + max( insert into个数-1, 1)
    image

    例如输入的SQL语句是:

    INSERT INTO TABLE out1 SELECT * FROM shop a JOIN sale_detail b ON a.shop_name = b.shop_name;

    则其SQL关键字个数是2(INSERT INTO,shop a JOIN sale_detail b),而SQL复杂度是1。

    SELECT DISTINCT total1 FROM
    (SELECT id1, COUNT(f1) AS total1 FROM in1 GROUP BY id1)
    ORDER BY total1 DESC LIMIT 100;

    则其SQL关键字个数是4(DISTINCT,2个GROUP BY,LIMIT),而SQL复杂度是1.5。

下载计费

用户从外网通过ODPS Tunnel下载数据,按照下载的数据大小进行计费。计费公式为:

一次外网下载费用 = 下载数据量 * 下载价格 (外网下载价格0.8元/G)

说明:

1.下载数据量:指一次下载请求的HTTP body的大小。承载数据的HTTP body使用protobuffer编码,因此一般比数据原始容量要小,但是比压缩后存储在ODPS上的数据量要大。

2.内网下载不计费,比如将下载数据到ECS的磁盘上。

3.上传数据,无论从内网还是外网进入ODPS,均不计费。