一、MaxCompute介绍
大数据计算服务( MaxCompute,原ODPS )由阿里云自主研发,提供针对TB/PB级数据、实时性要求不高的分布式处理能力,应用于数据分析、挖掘、商业智能等领域。阿里巴巴的数据业务都运行在MaxCompute上。
分布式
分布式集群架构,跨集群技术突破,集群规模可扩展
安全性
自动存储容错,安全沙箱机制,冗余存储机制
易用性
标准接口服务,数据上传下载,支持SQL语句
管理与授权
多用户的管理协同,多种方式权限管理,灵活访问控制策略
1.Maxcompute对象
2.Maxcompute分区
分区表指在创建表时指定分区键,即指定表内的某几个字段作为分区列
在使用数据时如果指定了需要访问的分区名称,则只会读取相应的分区,避免全表扫描,提高了处理效率,降低费用
3.其他概念
任务( Task) :
MaxCompute 基本计算单元, SQL及MR都是通过任务完成的
实例( Instance) :
任务的一个具体实例,表示实际运行的task
沙箱( SandBox) :
按照安全策略限制程序行为的执行环境不允许直接访问本地文件
■不允许直接访问分布式文件系统
■不允许JNI调用机制
■Java反射限制
■不允许起子进程执行Linux命令
■不允许获取本地IP地址等
4.MaxComputer数据类型
二、MaxComputer架构
1.MaxComputer客户端
2.MaxComputer接入层
3.MaxComputer逻辑层
4.MaxComputer计算层
三、连接使用MaxComputer
eclipse连接 MaxComputer流程
在阿里云官网下载 odps-for-eclipse 组件(eclipse插件),解压,进入plugins文件夹,复制 odps-eclipse-plugin-bundle_0.15.0.jar 包到 eclipse 文件夹下的plugins文件夹里,然后打开eclipse,显示如下图所示的效果则说明配置成功
eclipse界面 -> File -> new -> Other...
四、数据的上传和下载
Tunnel 命令
数据上传
tunnel upload [options] <path> <[project.]table[/partition]>
数据下载
tunnel download [options] <[project.]table[/partition]> <path>
常用的参数
五、数据定义语言DDL
1.建表
2.删除表
3.修改表名
4.添加分区
5.删除分区
6.修改表属性
添加列
修改列
修改表注释
修改列注释
修改生命周期
修改时间
7.快捷建表CTAS
8.创建视图
CREATE [OR REPLACE] VIEW [IF NOT EXISTS] view_name
[(col_name[COMMENT col_comment],...)]
[COMMENT view_comment]
[AS select_statement]
删除视图
DROP VIEW [IF NOT EXISTS] view_name;
9.表的生命周期
生命周期( LifeCycle ) : MaxCompute表中的数据,从最后一次更新时间算起,在经过指定的时间后没有变动,则此表将被MaxCompute自动回收(删除)。此指定时间就是该MaxCompute表的生命周期。(单位:天)
10.MULTI INSERT
六、数据操作语言 DML
1.查询操作
2.更新数据
输出到普通表或者静态分区
输出到动态分区
如果目标表有多级分区,在运行insert语句时允许指定部分分区为静态,但是静态分区必须是高级分区(分区字段靠前的分区),动态生成的分区值不可以为null
3.多路输出 MULTI INSERT
4.表关联
5.MAPJOIN
6.分支表达式
第一种
CASE <value>
WHEN <condition_1> then <result_1>
WHEN <condition_2> then <result_2>
...
else <result_n>
END
第二种
CASE
WHEN <condition_1> then <result_1>
WHEN <condition_2> then <result_2>
...
else <result_n>
END
七、用户自定义函数
八、MapReduce
MapReduce是由Google最早提出的分布式数据处理模型, MR是一种简单 易用编程框架,基于该框架的程序可以运行在多个机器的集群上,并以-种安全可靠的方式处理TB、PB级别的海量数据。
MR框架处理数据过程主要分成两个阶段:
Map阶段和Reduce阶段。通常会把输入的数据集切分为若干独立的数据块,由map任务以完全并行的方式处理它们。框架会对map的输出先进行排序,然后把结果输入给reduce任务。
MapReduce框架
MR框架运转在<key, value>键值对上,也就是说,框架把作业的输入看为是一组<key, value>键值对,同样也产出一组<key, value>键值对做为作业的输出, 这两组键值对的类型可能不同。
九、Graph
MaxCompute Graph是一套面向迭代的图计算处理框架。图计算作业使用图进行建模,图由点(Vertex)和边(Edge)组成,点和边包含权值(Value)。通过迭代对图进行编辑、演化,最终求解出结果,典型应用: PageRank ,单源最短距离算法, K-均值聚类算法等等。用户可以使用MaxCompute GRAPH提供的接口Java SDK编写图计算程序。
图计算用于挖掘人、物等实体之间的潜在的不易观察的行为和联系,这些联系很难通过传统的关系型数据库表示。
■最短路径:好友推荐、转账检测、计算关系紧密程度
■最小连通图:洗钱、虚假交易等
■关键人物识别:寻找意见领袖,防止客户流失的群体效应
■PageRank :传播影响力分析
十、MaxCompute安全与权限
1.授权
授权操作一般涉及到三个要素:主体(Subject ,可以是用户或者角色),客体(Object)和操作(Action)。在MaxCompute中,主体是指用户或角色,客体是指项目空间中的各种类型对象, 操作则与特定对象类型有关,不同类型的对象支持的操作也不尽相同。
关于授权的一些说明:
■主题主要包括用户、角色等
■客体包括项目空间Project、 表Table、 函数Function等
■操作和授权的对象相关 ,以表为例,支持: Describe、Select、 Update、 Drop、 All等
■主要的动作包括授予( grant)、收回( revoke)、查看( show grants )等:
➢grant actions on object to subject
➢revoke actions on object from subject
➢show grants for subject
2.添加用户并授权
决定对另一个用户授权时,需要先将该用户添加到自己的项目空间中来。添加用户的语法如下:
add user <username>;
当一个用户离开此项目团队时,需要将该用户从项目空间中移除。用户一旦从项目空间中被移除,该用户将不再拥有任何访问项目空间资源的权限。移除用户的命令如下:
remove user <username> ;
用户授权需注意:
➢当一个用户被移除后,该用户不再拥有访问该项目空间资源的任何权限。
➢移除一个用户之前,如果该用户已被赋予某些角色,则需要先撤销该用户的所有角色。
➢当一个用户被移除后,与该用户有关的ACL授权仍然会被保留。一旦该用户以后被再添加到该项目空间时,该用户的历史的ACL授权访问权限将被重新激活。
➢MaxCompute目前不支持在项目空间中彻底移除个用户及其所有权限数据
3.角色管理
角色( Role )是一组访问权限的集合,当需要对一组用户赋予相同的权限时,可以使用角色授权,可以大大简化授权流程,降低授权管理成本。
角色管理基本语法:
创建角色:
create role <rolename>
删除角色:
drop role <rolename> ;
给用户指派某种角色:
grant <rolename> to <username> ;
撤销角色指派:
revoke < rolename> from <username> ;
角色授权需注意:
■创建项目空间时会自动创建一 个admin角色,被授予固定权限,不能被修改
■删除一个角色时,只有在该角色的所有用户都被撤销后才会成功
■大数据开发套件中成员角色类型对应 了不同的MaxCompute角色
4.项目空间安全设置
MaxCompute是一个支持多租户的数据处理平台,不同的租户对数据安全需求不尽相同。为了满足不同租户对数据安全的灵活需求, MaxCompute支持项目空间级别的安全配置, ProjectOwner可以定制适合自己的外部账号支持和鉴权模型。
查看鉴权模型的语句:
show SecurityConfiguration ;
5.鉴权模型
6.项目空间保护
ProjectProtection :项目空间的数据保护,是否允许数据流出项目空间。缺省值为关闭( false )。一旦当项目空间开启项目空间的数据保护机制后,无法将项目空间中的数据转移到项目空间之外,所有的数据只能在项目空间内部流动。
set ProjectProtection=true ;
TrustedProject :可信项目空间。项目空间( prj1 )保护选项打开后,数据无法流出,若有一个项目空间( prj2 ) ,按照业务需求项目空间prj2可以从项目空间prj1中正常获取数据,则可以在项目空间prj1中把项目空间prj2设置为可信项目空间,设置成功后,prj1中的数据可以正常流转至项目空间prj2。不过是单向的
add trustedproject prj2;