精华内容
下载资源
问答
  • ODPS

    千次阅读 2017-04-23 21:13:00
    ODPS ODPS 功能之概述篇 原文 http://blog.aliyun.com/2962 主题 SQL 概述 ODPS是阿里云基于自有的云计算技术研发一套开放数据处理服务(Open Data Processing Service,简称 ODPS),具有TB/...

    ODPS

    ODPS 功能之概述篇

    概述

    ODPS是阿里云基于自有的云计算技术研发一套开放数据处理服务(Open Data Processing Service,简称 ODPS),具有TB/PB级数据计算能力,主要用于大数据仓库、挖掘、分析以及数据分享等场景。 今天阿里内部包括阿里贷款、数据魔方、DMP(阿里妈妈广告联盟)、余额宝等多款产品的数据分析都在使用ODPS。

    ODPS 整体架构如下图,

    主要分为三层:

    接入层:以RESTful API方式提供服务,用户及数据应用通过Http/Https与接入层建立链接上传数据及提交数据分析作业;

    逻辑层:ODPS的核心控制层,负责用户认证、签权、作业分发、Meta管理以及存储计算集群管理;

    存储计算层:数据的存储及计算作业运行。该层是由多个集群构成,所有集群挂接到ODPS控制层。数据存储在飞天的盘古上,每个文件分三份存储。控制层将用户提交的计算作业调度不同的集群上。

    ODPS功能

    用户项目空间-Project

    Project是用户使用ODPS时最先接触的概念,它类似Oracle的schema或者Mysql中的database。Project 也是ODPS中最基本的资源隔离单位,每个用户数据及计算任务都隶属于一个Project。 各Project 之间也可以通过授权建立共享通道,进行数据交换。Project 也是ODPS中的计量单元,收费也是以一个Project为基本单位的。

    用户在使用ODPS之前,需要申请创建一个Project,有了Project之后,用户就可以上传数据做数据分析了。

    数据处理流程

    一般的大数据处理流程分为三部分,如下图所示:

    1. 数据主要来源于在线系统,如业务数据库Mysql、Oracle,网站的日志文件。 这些数据都可以通过ODPS提供的数据通道功能导入到ODPS中;

    2. 数据导入后,可以使用SQL、MR做数据分析,也可以使用流计算对数据进行聚合等操作,还可以使用机器学习算法对数据建模、预测。ODPS提供的是“All in One ”服务,只要数据导入到ODPS后,各种高大尚分析挖掘工具都可以直接拿过来使用,用户只需要关注在自己的数据业务,根本不需要关于底层是如何工作的;

    3. 数据处理完毕后,如果是算法模型,可以使用ODPS的在线预测服务,将模型Push到在线预测系统中进行在线的数据预测。如果是分析结果,可以通过数据通道导回到Mysql 、Oracle中,与业务应用系统对接;

    围绕这样的一个数据处理流程,ODPS在各个阶段提供了不同的功能。

    数据存储

    用户的数据上传到ODPS后,默认会以结构化的方式存储到ODPS的表。表隶属于Project,可以进行分区,有自己的数据类型,如Bigint, Boolean, Double, Datetime, String, Decimal。 数据上传后,以列压缩的方式存储到盘古上。这种压缩方式的好处就是对于文本类型的数据,一般都能取得较好的压缩比,一般是4:1,即10G的数据,在ODPS上的size为2.5G。每个文件默认会保存三份。

    数据通道

    根据数据分析的性质, ODPS提供两种数据通道-批量数据上传及实时数据上传两种。

    批量数据上传适合大量数据的上传,批量上传通道限制每个写入ODPS的数据块最大为100G。每次上传完成后,调用Commit方法,数据即可保存到表中;

    实时上传适合数据流处理的场景,如流计算,每次上传数据的packet为2M。通过实时通道上传的数据可以直接使用ODPS Stream SQL 进行流计算,也可以使用数据订阅接口将数据转发到第三方的流计算应用中,这个功能就类似于AWS的Kinesis。 通过实时上传的数据,默认会保存一份到ODPS表中,所以也可以通过实时通道向ODPS实时导入数据;

    批量通道提供了上传和下载的接口,实时通道只提供了上传的接口,但同时也提供了订阅接口,允许数据被其它应用所订阅。

    使用可以使用CLT中的数据上传命令将本地的文本文件上传至ODPS,也可以使用Java、Python SDK通过编程上传数据。 同时ODPS也引入了两个开源社区中日志数据上传的两大利器:Flume和Fluentd。用户可以使用这两个工具将各种源的数据上传到ODPS中。今天ODPS的用户大部分都在通过这两款工具将Web 日志实时导入到ODPS中做数据分析。

    SQL

    用户最熟悉使用SQL对数据分析了。ODPS也支持SQL查询操作,而且语法类似于Hive 的HQL。SQL操作的主要对象是表,数据量可在T级到P级。SQL中提供的功能有:

    DLL:表、列、分区、视图、生命周期等操作 ;

    DML:数据更新、多路输出以及动态分区输出 ;

    Join:多表关联分析,支持 inner , left , right full join 以及mapjoin;

    窗口函数:支持常见的窗口函数如avg,count 也支持滑动窗口;

    UDF: 支持通过Java、Python编写UDF、UDAF和UDTF;

    Stream SQL

    通过实时通道上传的数据,可以直接使用Stream SQL做流计算。 ODPS 的流计算是一种创新的流计算方式,可以通过类SQL的语法就能定义流计算的作业,如:

    创建一个流计算的任务,该任务引用stream_in表作为数据源,并且将结果写入stream_out表中

    create streamjob streamjob1 as

    insert into stream_out

    select count(*)

    from stream_in ;

    end streamjob;

    随着数据的上传,在ODPS客户端窗口中执行若干次

    select * from stream_out;

    会发现有一系列逐渐累积增长的汇总数据。

    Stream SQL 支持单流计算、多流Join、同时还支持流与维表的Join,并提供了聚合、排序及子查询的功能。

    MapReduce

    ODPS提供了MapReduce的编程接口。用户在处理数据时,如果SQL满足不了要求,可以使用MapReduce。

    MapReduce处理数据过程主要分成2个阶段:Map阶段和Reduce阶段。首先执行Map阶段,再执行Reduce阶段。Map和Reduce的处理逻辑由用户自定义实现, 但要符合MapReduce框架的约定。

    • 在正式执行Map前,需要将输入数据进行”分片”。所谓分片,就是将输入数据切分为大小相等的数据块,每一块作为单个Map Worker的输入被处理, 以便于多个Map Worker同时工作。

    • 分片完毕后,多个Map Worker就可以同时工作了。每个Map Worker在读入各自的数据后,进行计算处理,最终输出给Reduce。Map Worker在输出数据时, 需要为每一条输出数据指定一个Key。这个Key值决定了这条数据将会被发送给哪一个Reduce Worker。Key值和Reduce Worker是多对一的关系, 具有相同Key的数据会被发送给同一个Reduce Worker,单个Reduce Worker有可能会接收到多个Key值的数据。

    • 在进入Reduce阶段之前,MapReduce框架会对数据按照Key值排序,使得具有相同Key的数据彼此相邻。如果用户指定了”合并操作”(Combiner), 框架会调用Combiner,将具有相同Key的数据进行聚合。Combiner的逻辑可以由用户自定义实现。与经典的MapReduce框架协议不同,在ODPS中, Combiner的输入、输出的参数必须与Reduce保持一致。这部分的处理通常也叫做”洗牌”(Shuffle)。

    • 接下来进入Reduce阶段。相同的Key的数据会到达同一个Reduce Worker。同一个Reduce Worker会接收来自多个Map Worker的数据。 每个Reduce Worker会对Key相同的多个数据进行Reduce操作。最后,一个Key的多条数据经过Reduce的作用后,将变成了一个值。

    由于目前ODPS MR只能处理ODPS中表里的数据,与Hadoop MR相比,不同的地方就在Map和Reduce 的声明上,如下:

    ODPS MR的输入数据是表的Record,可以通过Record对象来获取每列的值,如:

    ODPS对用户提供了JAVA的MR编程接口,同时还可以使用开源的Eclipse 开源插件在本地编写、调度MR程序,成功后再部署到ODPS上运行。

    图模型-Graph

    ODPS 提供了类似Google Pregel的图编程模型。 用户可以用来编写满足聚类、Pagerank以及求最短路径这样场景的算法。

    ODPS GRAPH能够处理的图必须是是一个由点(Vertex)和边(Edge)组成的有向图。由于ODPS仅提供二维表的存储结构, 因此需要用户自行将图数据分解为二维表格式存储在ODPS中,在进行图计算分析时, 使用自定义的GraphLoader将二维表数据转换为ODPS Graph引擎中的点和边。

    点的结构可以简单表示为 < ID, Value, Halted, Edges >,分别表示点标识符(ID),权值(Value),状态(Halted, 表示是否要停止迭代), 出边集合(Edges,以该点为起始点的所有边列表)。边的结构可以简单表示为<DestVertexID, Value >,分别表示目标点(DestVertexID)和权值(Value)。如下图所示:

    典型的Graph 程序逻辑包括三步:

    1. 加载图:通过自定义的GraphLoader将数据解析为点或边,并对数据分片,分配到相应的Worker上;

    2. 迭代计算:遍历所有非结束状态的点或收到消息的点,并调用其Compute方法进行计算;

    3. 迭代终止:所有点处于结束或达到最大迭代次数后,程序终止;

    机器学习平台 DT PAI

    DT PAI是阿里巴巴推出的基于云计算的机器学习平台。在这个平台上,用户可以使用多种算法及在线预测服务。

    DT PAI的功能包括

    • 与ODPS完美集成,基于Project级别数据访问;
    • 提供特征工程工具,如基本统计、拆分、随机采样、归一化等 ;
    • 提供部分数据统计工具模块,如全表统计、直方图、百分位等;
    • 提供多种机器学习算法,包括逻辑回归、随机森林、SVM、朴素贝叶斯、GBDT回归以及聚类算法等;
    • 提供标准的模型评估方法,如ROC、混淆矩阵、AUC;
    • 提供离线预测,将预测数据导入到ODPS表中,通过模型预测完成后,直接输出到结果表中;
    • 提供在线预测,通过将Offline Model发布到Online Model 服务中,即可以使用API使用实时在线预测服务;
    • 提供PAI 命令, 基于ODPS CLT运行所有算法;
    • 通过PAI Web 控制台轻松搭建算法实验,PAI Web 如下:

    安全

    大家在使用ODPS的时候,最关心的就是自己的数据放到ODPS是否安全,是否会被泄露。 ODPS 支持多租户的使用场景,满足不同用户在ODPS中独立、协同、共享等不同数据操作的需求,可以说ODPS的安全机制是ODPS能在对外服务核心。

    ODPS的安全由如下功能构成:

    • 访问ODPS的用户必须在阿里云官网上进行注册,在使用ODPS的时候,都需要进一步认证;
    • 用户在访问ODPS Project中每个对象时都需要授权,用户在读取数据或执行作业时都会被检查权限;
    • ODPS中支持ACL授权,允许管理者使用Grant、Revoke等命令对用户、角色进行管理;
    • ODPS中还支持Policy授权,允许Project Owner使用JSON格式的描述语言对主体(访问者)、资源(访问对象)、操作三者之前通过访问限制及效力策略进行管理、控制;
    • ODPS还支持Package方式授权。将Project A中的对象打到Package中,然后安装到Package B,满足跨Project B访问A中数据的需求;
    • ODPS中的Project 还有保护模型,即数据只能在本Project中计算,不允许导到本地或导到其他project输出,但可以通过白名单导出;
    • ODPS中所有计算是在受限的沙箱中运行的,多层次的应用沙箱,从KVM级到Kernel级。系统沙箱配合鉴权管理机制,用来保证数据的安全;
    posted @ 2017-04-23 21:13 酸奶加绿茶 阅读( ...) 评论( ...) 编辑 收藏
    展开全文
  • ODPS资料大全

    2016-04-08 11:02:29
    ODPS
  • odps_sink Flume提供ODPS接收器的插件(ODPS是Aliyun的产品) 用法 运行mvn clean package来构建jar 将jar与ODPS相关的jar放入Flume的lib文件夹中 修改conf文件 路线图 支持分钟级分区 可配置的接收器模式 将\n...
  • 面向Java开发人员的ODPS SDK 要求 Java 8+ 建造 git clone ... cd aliyun-odps-java-sdk mvn clean package -DskipTests 运行单元测试 您将必须在源代码树中配置test.conf文件: odps-sdk-impl/odps-common-local/...
  • 用来连接odps的客户端,可以在ideal中引入该插件进行连接odps
  • ODPS SQL

    2021-10-12 08:53:55
    Aliyun ODPS Command Line Tool Version 0.29.6 @Copyright 2017 Alibaba Cloud Computing Co., Ltd. All rights reserved. odps@ u_ee02volv_1633959038>tunnel upload -fd "\t" -dfp yyyy-MM-dd D:\data\ods_...
    Aliyun ODPS Command Line Tool
    Version 0.29.6
    @Copyright 2017 Alibaba Cloud Computing Co., Ltd. All rights reserved.
    odps@ u_ee02volv_1633959038>tunnel upload -fd "\t"  -dfp  yyyy-MM-dd D:\data\ods_user_app_detail_dt_201612 ods_user_app_detail_dt_201612;
    Upload session: 202110112149119db4ca0b1d7e8135
    Start upload:D:\data\ods_user_app_detail_dt_201612
    Using \n to split records
    Upload in strict schema mode: true
    Total bytes:34393452     Split input to 1 blocks
    2021-10-11 21:49:11     scan block: '1'
    2021-10-11 21:49:12     scan block complete, blockid=1
    2021-10-11 21:49:12     upload block: '1'
    2021-10-11 21:49:17     1:0:34393452:D:\data\ods_user_app_detail_dt_201612      55%     18.1 MB 3.6 MB/s
    2021-10-11 21:49:21     1:0:34393452:D:\data\ods_user_app_detail_dt_201612      100%    32.8 MB 3.6 MB/s
    2021-10-11 21:49:21     upload block complete, blockid=1
    upload complete, average speed is 3 MB/s
    OK
    odps@ u_ee02volv_1633959038>tunnel upload -fd "\t"  -dfp  yyyy-MM-dd D:\data\ods_user_call_detail_dt_201612 ods_user_call_detail_dt_201612;
    Upload session: 20211011215027d2c5ca0b1d7f410d
    Start upload:D:\data\ods_user_call_detail_dt_201612
    Using \n to split records
    Upload in strict schema mode: true
    Total bytes:41498184     Split input to 1 blocks
    2021-10-11 21:50:27     scan block: '1'
    2021-10-11 21:50:28     scan block complete, blockid=1
    2021-10-11 21:50:28     upload block: '1'
    2021-10-11 21:50:33     1:0:41498184:D:\data\ods_user_call_detail_dt_201612     47%     18.7 MB 3.7 MB/s
    2021-10-11 21:50:38     1:0:41498184:D:\data\ods_user_call_detail_dt_201612     100%    39.6 MB 4 MB/s
    2021-10-11 21:50:38     upload block complete, blockid=1
    upload complete, average speed is 3.3 MB/s
    OK
    odps@ u_ee02volv_1633959038>tunnel upload -fd "\t"  -dfp  yyyy-MM-dd D:\data\ods_user_sms_detail_dt_201612 ods_user_sms_detail_dt_201612;
    Upload session: 2021101121520890b6ca0b1d7f2bed
    Start upload:D:\data\ods_user_sms_detail_dt_201612
    Using \n to split records
    Upload in strict schema mode: true
    Total bytes:25275251     Split input to 1 blocks
    2021-10-11 21:52:07     scan block: '1'
    2021-10-11 21:52:08     scan block complete, blockid=1
    2021-10-11 21:52:08     upload block: '1'
    2021-10-11 21:52:13     1:0:25275251:D:\data\ods_user_sms_detail_dt_201612      96%     23.3 MB 4.7 MB/s
    2021-10-11 21:52:14     1:0:25275251:D:\data\ods_user_sms_detail_dt_201612      100%    24.1 MB 4.8 MB/s
    2021-10-11 21:52:14     upload block complete, blockid=1
    upload complete, average speed is 3.4 MB/s
    OK
    odps@ u_ee02volv_1633959038>tunnel upload -fd "\t"  D:\data\dim_app_flag  dim_app_flag;
    Upload session: 202110112153541ebdca0b1d7f6852
    Start upload:D:\data\dim_app_flag
    Using \n to split records
    Upload in strict schema mode: true
    Total bytes:4614         Split input to 1 blocks
    2021-10-11 21:53:54     scan block: '1'
    2021-10-11 21:53:54     scan block complete, blockid=1
    2021-10-11 21:53:54     upload block: '1'
    2021-10-11 21:53:54     upload block complete, blockid=1
    OK
    odps@ u_ee02volv_1633959038>tunnel upload -fd "\t"  D:\data\dim_sms_flag  dim_sms_flag;
    Upload session: 2021101121552111bdca0b1d7eada9
    Start upload:D:\data\dim_sms_flag
    Using \n to split records
    Upload in strict schema mode: true
    Total bytes:8161         Split input to 1 blocks
    2021-10-11 21:55:21     scan block: '1'
    2021-10-11 21:55:21     scan block complete, blockid=1
    2021-10-11 21:55:21     upload block: '1'
    2021-10-11 21:55:21     upload block complete, blockid=1
    upload complete, average speed is 8 KB/s
    OK
    odps@ u_ee02volv_1633959038>tunnel upload -fd "\t"  D:\data\dim_call_flag  dim_call_flag;
    Upload session: 20211011215535d0b6ca0b1d7f6394
    Start upload:D:\data\dim_call_flag
    Using \n to split records
    Upload in strict schema mode: true
    Total bytes:7505         Split input to 1 blocks
    2021-10-11 21:55:35     scan block: '1'
    2021-10-11 21:55:35     scan block complete, blockid=1
    2021-10-11 21:55:35     upload block: '1'
    2021-10-11 21:55:35     upload block complete, blockid=1
    upload complete, average speed is 7.3 KB/s
    OK
    odps@ u_ee02volv_1633959038>tunnel upload -fd "\t"  D:\data\dw_user_brand_sex  dw_user_brand_sex;
    Upload session: 20211011215640d2c5ca0b1d7fa709
    Start upload:D:\data\dw_user_brand_sex
    Using \r\n to split records
    Upload in strict schema mode: true
    Total bytes:881416       Split input to 1 blocks
    2021-10-11 21:56:40     scan block: '1'
    2021-10-11 21:56:40     scan block complete, blockid=1
    2021-10-11 21:56:40     upload block: '1'
    2021-10-11 21:56:40     upload block complete, blockid=1
    upload complete, average speed is 860.8 KB/s
    OK
    odps@ u_ee02volv_1633959038>tunnel upload -fd "\t"  D:\data\dim_user_brand  dim_user_brand;
    Upload session: 20211011215651a7a9ca0b1d7f6169
    Start upload:D:\data\dim_user_brand
    Using \r\n to split records
    Upload in strict schema mode: true
    Total bytes:40   Split input to 1 blocks
    2021-10-11 21:56:51     scan block: '1'
    2021-10-11 21:56:51     scan block complete, blockid=1
    2021-10-11 21:56:51     upload block: '1'
    2021-10-11 21:56:51     upload block complete, blockid=1
    OK
    odps@ u_ee02volv_1633959038>tunnel upload -fd "\t"  D:\data\dim_user_gender  dim_user_gender;
    Upload session: 2021101121572292b6ca0b1d80334b
    Start upload:D:\data\dim_user_gender
    Using \r\n to split records
    Upload in strict schema mode: true
    Total bytes:12   Split input to 1 blocks
    2021-10-11 21:57:22     scan block: '1'
    2021-10-11 21:57:22     scan block complete, blockid=1
    2021-10-11 21:57:22     upload block: '1'
    2021-10-11 21:57:23     upload block complete, blockid=1
    upload complete, average speed is 12 bytes/s
    OK
    odps@ u_ee02volv_1633959038>

    展开全文
  • odps_book 介绍 这是ODPS书的源代码和数据。 下面主要是按模块(而不是书的章节)来划分的。 介绍 - ch02,快速入门 dship - ch03 sql - ch04, ch05 udf - ch05 隧道 - ch06,使用隧道将数据从 Hadoop 传输到 ...
  • ODPS参考手册

    2014-08-05 21:46:52
    阿里odps开放平台的参考手册,里面详细介绍了odps的操作
  • ODPS参考资料

    2018-02-07 02:04:42
    内部资料,ODPS(Open Data Processing Service),是阿里巴巴通用计算平台提供的一种快速、完全托管的 GB/TB/PB 级数据仓库解决方案,现在已更名为MaxCompute,MaxCompute 向用户提供了完善的数据导入方案以及多种...
  • 阿里云 odps 文档

    2017-12-08 16:06:05
    阿里巴巴的 odps 文档,帮助新手快速扫盲 本资料共包含以下附件: odps_SQL.pdf
  • odps优化

    2020-04-09 09:51:49
    set odps.sql.mapper.merge.limit.size=64 作用:设定控制文件被合并的最大阈值,单位M,默认64M,在[0,Integer.MAX_VALUE]之间调整。 场景:当Map端每个Instance读入的数据量不均匀时,可以通过设置这个变量值进行...

    业务 代码

    资源

    mapper

    1、小文件
    set odps.sql.mapper.merge.limit.size=64

    作用:设定控制文件被合并的最大阈值,单位M,默认64M,在[0,Integer.MAX_VALUE]之间调整。
    场景:当Map端每个Instance读入的数据量不均匀时,可以通过设置这个变量值进行小文件的合并,使得每个Instance的读入文件均匀。一般会和odps.sql.mapper.split.size这个参数结合使用。

    set odps.sql.mapper.split.size=256

    作用:设定一个Map的最大数据输入量,可以通过设置这个变量达到对Map端输入的控制,单位M,默认256M,在[1,Integer.MAX_VALUE]之间调整。
    场景:当每个Map Instance处理的数据量比较大,时间比较长,并且没有发生长尾时,可以适当调小这个参数。如果有发生长尾,则结合odps.sql.mapper.merge.limit.size这个参数设置每个Map的输入数量。

    2、 mapper长尾
    distribute by :用来控制map输出结果的分发,即map端如何拆分数据给reduce端。 会根据distribute by 后边定义的列,根据reduce的个数进行数据分发,默认是采用hash算法。
    select * from mytest distrubute by word sort by word;
    当 distribute by 后边跟的列是:rand()时,即保证每个分区的数据量基本一致

    reduce

    1 Mapjoin设置

    set odps.sql.mapjoin.memory.max=512

    作用:设置Mapjoin时小表的最大内存,默认512,单位M,[128,2048]之间调整。

    展开全文
  • ODPS JDBC 驱动程序有两种方法。 1.第一个是使用独立库: 从 . 结帐。 2.二是依靠maven为你解决依赖: < dependency > < groupId >com.aliyun.odps</ groupId > < artifactId >odps-jdbc</ ...
  • ODPS是分布式的海量数据处理平台,提供了丰富的数据处理功能和灵活的编程框架。本文从ODPS面临的挑战、技术架构、Hadoop迁移到ODPS、应用实践注意点等方面带领我们初步了解了ODPS的现状与前景。 ODPS是分布式的海量...
  • ODPS简介

    万次阅读 2015-08-24 16:21:46
    初识ODPS ODPS是分布式的海量数据处理平台,提供了丰富的数据处理功能和灵活的编程框架,主要的功能组件有如下几个。 Tunnel服务:数据进出ODPS的唯一通道,提供高并发、高吞吐量的数据上传和下载服务。SQL:基于...
    

    初识ODPS

    ODPS是分布式的海量数据处理平台,提供了丰富的数据处理功能和灵活的编程框架,主要的功能组件有如下几个。

     

    • Tunnel服务:数据进出ODPS的唯一通道,提供高并发、高吞吐量的数据上传和下载服务。
    • SQL:基于SQL92并进行了本地化扩展,可用于构建大规模数据仓库和企业BI系统,是应用最为广泛的一类服务。
    • DAG编程模型:类似Hadoop MapReduce,相对SQL更加灵活,但需要一定的开发工作量,适用于特定的业务场景或者自主开发新算法等。
    • Graph编程模型:用于大数据量的图计算功能开发,如计算PageRank。
    • XLIB:提供诸如SVD分解、逻辑回归、随机森林等分布式算法,可用于机器学习、数据挖掘等场景。
    • 安全:管控ODPS中的所有数据对象,所有的访问都必须经过鉴权,提供了ACL、Policy等灵活强大的管理方式。

     

    ODPS采用抽象的作业处理框架将不同场景的各种计算任务统一在同一个平台之上,共享安全、存储、数据管理和资源调度,为来自不同用户需求的各种数据处理任务提供统一的编程接口和界面。

    和阿里云的其他云计算服务一样,ODPS也是采用HTTP RESTful服务,并提供Java SDK、命令行工具(Command Line Tool,CLT)和上传下载工具dship,以及阿里云官网提供统一的管理控制台界面。在阿里内部,有多个团队基于ODPS构建交互界面的Web集成开发环境,提供数据采集、加工、处理分析、运营和维护的一条龙服务。基于ODPS进行应用开发,最直接的是使用CLT以及dship等工具。如果不能满足需要,也可以进一步考虑使用ODPS SDK或RESTful API等进行定制开发,如图1所示。

    图1  ODPS应用开发模式

    如果你的业务发展需要一个足够强大、能开箱即用的大数据处理平台,并且不想花费太多精力去关注这一切如何实现与运维,那么ODPS是一个非常理想的选择。

    规模的挑战

    在DT时代,数据是宝贵的生产资料,但不断扩大的数据规模给ODPS带来了极大的挑战。在阿里内部就曾直面这种情况:在可以预见的时间内,单个集群的规模无法再容纳所有的数据。

    解决方案是扩大单集群的规模,同时让应用系统可以管理多个集群。在这个背景下,ODPS作为一个海量数据的处理平台,结合5K项目开发了多集群管理的功能,使得数据处理的规模跨上了一个新的台阶。当单个计算集群的存储或计算容量不足时,将数据重新分布到新的集群上。更重要的一点是,这种跨多个集群的能力,对上层应用是透明的,用户在运行SQL或者Graph模型时,不必了解数据是分布在哪个物理集群上,如图2所示。

    图2  ODPS的跨集群能力

    网站日志分析

    这里,我们将基于最常见的网站日志分析这一应用场景,实践如何通过ODPS来构建企业数据仓库,包括数据的导入导出以及清洗转换。其ETL过程与基于传统数据库的解决方法并不完全一致,在数据传输环节并没有太多的清洗转换,这项工作是在数据加载到ODPS后,用SQL来完成的。在数据加载到ODPS后,可以充分利用平台的水平扩展能力,处理的数据量可以轻松地扩展到PB级别,而且作为一个统一的平台,除构建数据仓库外,在ODPS中利用内置的功能即可进行数据挖掘和建模等工作。在实际工作中,数据采集、数仓构建和数据挖掘等都是由不同的团队来完成的,针对这一情况,ODPS中提供了完善的安全管理功能,可以精确地控制每个人可以访问到的数据内容(下例中为突出主要的过程,忽略了用户的授权管理)。

    数据来源于网站酷壳(CoolShell.cn)上的HTTP访问日志数据(access.log),格式如下:

    一个典型的企业数据仓库通常包含数据采集、数据加工和存储、数据展现等几个过程,如图3所示。

    图3  数据仓库主要过程

    数据采集

    真实的网站日志数据中不可避免地会存在很多脏数据,可以先通过脚本对源数据做简单的处理解析,去掉无意义的信息,例如第二个字段“-”。在数据量比较大的情况下,单机处理可能成为瓶颈。这时可以将原始的数据先上传到ODPS,充分利用分布式处理的优势,通过ODPS SQL对数据进行转换。

    在ODPS中,大部分的数据都是以结构化的表形式存在的,因此第一步要创建ODS层源数据表。由于数据是每天导入ODPS中,所以采取分区表,以日期字符串作为分区,在ODPS CLT中执行SQL如下:

    假设当前数据是20140301这一天的,添加分区如下:

    解析后的数据文件在/home/admin/data/20140301/output.log下,通过dship命令导入ODPS中,如下:

     

    数据加工和存储

    在ods_log_tracker表中,request字段包含三个信息:HTTP方法、请求路径和HTTP协议版本,如“GET /articles/4914.html HTTP/1.1”。在后续处理中,会统计方法为GET的请求总数,并对请求路径进行分析,因而可以把原始表的request字段拆解成三个字段method、url和protocol。这里使用的是ODPS SQL内置的正则函数解析的字符串并生成表dw_log_parser:

     

    与传统的RDBMS相比,ODPS SQL面向大数据OLAP应用,没有事务,也没有提供update和delete功能。在写结果表时,尽量采用INSERT OVERWRITE到某个分区来保证数据一致性(如果用户写错数据,只需要重写该分区,不会污染整张表)。如果采用INSERT INTO某张表的方式,那么在作业因各种原因出现中断时,不方便确定断点并重新调度运行。

    ODPS SQL提供了丰富的内置函数,极大方便了应用开发者。对于某些功能,如果SQL无法完成的话,那么可以通过实现UDF(用户自定义函数)来解决。例如希望将ip字段转化成数字形式,从而和另一张表关联查询,可以实现UDF,如下:

     

    编译生成JAR包udf_ip2num.jar,将它作为资源上传到ODPS,然后创建函数并测试,如下:

     

    表dual(需要用户自己创建)类似于Oracle中的dual表,包含一列和一行,经常用于查询一些伪列值(pseudo column),是SQL开发调试的利器。

    对于较复杂的数据分析需求,还可以通过ODPS DAG(类似MapReduce)编程模型来实现。篇幅限制,这里不一一介绍。

     

    图4  PV/UV展示结果

    数据展现

    应用数据集市往往是面向业务需求对数据仓库表进行查询分析,例如统计基于终端设备信息的PV和UV,生成结果表adm_user_measures。R是一款开源的、功能强大的数据分析工具。通过R来绘图,展示结果报表可以有两种方式:一是通过dship命令将数据导出到本地,再通过R展现结果;二是在R环境中安装RODPS Package,直接在R中读取表中的数据并展现。在RStudio中,基于小样本数据统计的展现结果如图4所示。

    迁移到ODPS

    Hadoop作为开源的大数据处理平台,已得到了广泛应用。在使用Hadoop集群的用户,可以比较轻松地迁移到ODPS中,因为ODPS SQL与Hive SQL语法基本一致,而MapReduce作业可以迁移到更加灵活的DAG的执行模型。对于数据的迁移,可以通过ODPS Tunnel来完成。

    数据通道服务ODPS Tunnel是ODPS与外部交互的统一数据通道,能提供高吞吐量的服务并且能够水平进行服务能力的扩展。Tunnel服务的SDK集成于ODPS SDK中。实际上,dship也是调用SDK实现的客户端工具,支持本地文件的导入导出。我们鼓励用户根据自己的场景需求,开发自己的工具,例如基于SDK开发对接其他数据源(如RDBMS)的工具。

    把海量数据从Hadoop集群迁移到ODPS的基本思路是:实现一个Map Only程序,在Hadoop的Mapper中读取Hadoop源数据,调用ODPS SDK写到ODPS中。执行逻辑大致如图5所示。

    Hadoop MapReduce程序的执行逻辑主要包含两阶段:一是在客户端本地执行,如参数解析和设置、预处理等,这在main函数完成;二是在集群上执行Mapper,多台Worker分布式执行map代码。在Mapper执行完成后,客户端有时还会做一些收尾工作,如执行状态汇总。

    图5  Hadoop到ODPS的数据迁移

    这里,我们在客户端本地的main函数中解析参数,创建UploadSession,把SessionID传给Mapper,Mapper通过SessionID获取UploadSession,实现写数据到ODPS。当Mapper执行完成后,客户端判断执行结果状态,执行Session的commit操作,把成功上传的数据Move到结果表中。

    默认情况下,Hadoop会自动根据文件数划分Mapper个数。在文件大小比较均匀时,这种方式没什么问题。然而存在大文件时,整个大文件只在一个Mapper中执行可能会很慢,造成性能瓶颈。这种情况下,应用程序可自己对文件进行切分。

    下面实现一个类Hdfs2ODPS来完成这个功能。其中run函数完成了前面提到的主要逻辑,主要代码如下(其中包括了对ODPS Tunnel的使用)

     

    在这个函数中,首先调用函数parseArguments对参数进行解析(后面会给出),然后初始化DataTunnel和UploadSession。创建UploadSession后,获取SessionID,并设置到conf中,在集群上运行的Mapper类会通过该conf获取各个参数。然后,调用runJob函数,其代码如下:

    runJob函数设置Hadoop conf,然后通过JobClient.runJob(conf);启动Mapper类在集群上运行,最后调用conf.getNumMapTasks() 获取Task数,Task数即上传到ODPS的并发数。在Mapper中,可以通过conf.getLong("mapred.task.partition")获取Task编号,其值范围为[0, NumMapTasks)。因此,在Mapper中可以把Task编号作为上传的blockid。客户端在Mapper成功返回时,就完成commit所有的Session。

    应用实践注意点

    与单机环境相比,在ODPS这样的分布式环境中进行开发,思维模式上需要有很大转变。下面分享一些实践中的注意点。

    在分布式环境下,数据传输需要涉及不同机器的通信协作,可以说它是使用ODPS整个过程中最不稳定的环节,因为它是一个开放性问题,由于数据源的不确定,如文件格式、数据类型、中文字符编码格式、分隔符、不同系统(如Windows和Linux)下换行符不同,double类型的精度损失等,存在各种未知的情况。脏数据也是不可避免的,在解析处理时,往往是把脏数据写到另一个文件中,便于后续人工介入查看,而不是直接丢弃。在上传数据时,Tunnel是Append模式写入数据,因而如果多次写入同一份数据,就会存在数据重复。为了保证数据上传的“幂等性”,可以先删除要导入的分区,再上传,这样重复上传也不会存在数据重复。收集数据是一切数据处理的开始,所以必须非常严谨可靠,保证数据的正确性,否则在该环节引入的正确性问题会导致后续处理全部出错,且很难发现。

    对于数据处理流程设计,要特别注意以下几点。

     

    • 数据模型:好的数据模型事半功倍。
    • 数据表的分区管理:如数据每天流入,按日期加工处理,则可以采取时间作为分区,在后续处理时可以避免全表扫描,同时也避免由于误操作污染全表数据。
    • 数据倾斜:这是作业运行慢的一个主要原因,数据倾斜导致某台机器成为瓶颈,无法利用分布式系统的优势,主要可以从业务角度解决。
    • 数据的产出时间:在数据处理Pipeline中,数据源往往是依赖上游业务生成的,上游业务的数据产出延迟很可能会影响到整个Pipeline结果的产出。
    • 数据质量和监控:要有适当的监控措施,如某天发生数据抖动,要找出原因,及时发现潜在问题。
    • 作业性能优化:优化可以给整个Pipeline的基线留出更多时间,而且往往消耗资源更少,节约成本。
    • 数据生命周期管理:设置表的生命周期,可以及时删除临时中间表,否则随着业务规模扩大,数据会膨胀很快。

     

    此外,数据比对、A/B测试、开发测试和生产尽可能采用两个独立的Project。简言之,在应用开发实践中,要理解计费规则,尽可能优化存储计算开销。

    ODPS现状和前景

    阿里巴巴提出了“数据分享第一平台”的愿景,其多年来坚持投资开发ODPS平台的初心就是希望有一天能够以安全和市场的模式,让中小互联网企业能够使用阿里巴巴最宝贵的数据。阿里内部提出了所有数据“存、通和用”,将不同业务数据关联起来,发挥整体作用。ODPS目前正在发展中,它在规模上,支持淘宝核心数据仓库,每天有PB级的数据流入和加工;在正确性上,支持阿里金融的小额无担保贷款业务,其对数据计算的准确性要求非常苛刻;在安全上,支持支付宝数据全部运行在ODPS平台上,由于支付宝要符合银行监管需要,对安全性要求非常高,除了支持各种授权和鉴权审查,ODPS平台还支持“最小访问权限”原则:作业不但要检查是否有权限访问数据,而且在整个执行过程中,只允许访问自己的数据,不能访问其他数据。

    前面的示例只是展现了ODPS的冰山一角。作为阿里巴巴云计算大数据平台,ODPS采用内聚式平台系统架构,各个组件紧凑内聚,除了结构化数据处理SQL、分布式编程模型MapReduce外,还包含图计算模型、实时流处理和机器学习平台,如图6所示。

    图6  ODPS功能模块

    随着ODPS对外开放的不断推进和第三方数据的流入,相信会有各种创新在ODPS上生根发芽、开花结果。

    尽管如此,云计算和大数据是两个新兴的领域,技术和产品发展日新月异。作为一个平台,虽然ODPS已在阿里内部被广泛使用,但在产品和技术上还有很多方面需要进一步完善和加强,希望ODPS能够和云计算大数据应用共同成长,成为业界最安全、最可靠和最方便易用的平台。

    本文主要内容节选自作者即将出版的新书《ODPS权威指南》。

    本文作者:张云远,长期工作于数据仓库及BI领域,先后任职于建设银行、TCS及惠普,2011年加入阿里云,担任ODPS产品经理,主要负责SQL模块的产品功能。经历了阿里金融等数据仓库在ODPS上的建设过程,作为登月一号项目的PM负责将小微金服离线数据平台迁移到ODPS。

    李妹芳,阿里数据平台事业部工程师,曾译有《Linux系统编程》、《数据之美》、《数据可视化之美》等书,其新书《ODPS权威指南》即将上市。

    转自:http://www.csdn.net/article/2014-10-20/2822184点击打开链接

    展开全文
  • 阿里ODPS技术权威指南

    2018-07-16 10:00:53
    ODPS(Open Data Processing Service)是阿里巴巴自主研发的海量数据处理和分析的服务平台,主要应用于数据分析、海量数据统计、数据挖掘、机器学习和商业智能等领域。目前,ODPS不仅在阿里内部得到广泛应用,享有很...
  • ODPS Eclipse插件 这是用于开发作业的Eclipse插件 该插件提供以下功能: 本地调试MapReduce程序 本地Debug UDF / UDTF程序 本地UDF / UDTF单元测试 要求 Eclipse> = 3.7 Java> = 1.6 用法 创建ODPS项目 文件->新建...
  • ODPS系列(1):初识ODPS

    千次阅读 2020-02-05 15:12:49
    注:MaxCompute,原名ODPS,出于使用习惯考虑,以下用ODPS代指MaxCompute,即阿里巴巴大数据计算服务。 一、为什么选择ODPS? 1.选择Apache Hadoop? 以Hadoop为代表的开源组件,搭建及维护的成本较高,遇见...
  • 记录python读写ODPS

    2021-07-29 20:13:44
    from odps import ODPS odps = ODPS(access_id='xxxxxxx', #登陆账号 secret_access_key='xxxxxxxx', #登陆密码 project='xxxxxx', #odps上的项目名称 endpoint='http://service.odps.aliyun.com/api') #官方提供...
  • ODPS基础

    2019-10-08 08:02:50
    遇到一个项目需求是统计128张分库分表的数据表记录的最大id,通过单表查询计算非常费时,也无法应对分表数更多的情况,因此考虑到通过odps进行任务发布和运算 在云端 http://d2.alibaba-inc.com/是云梯的第二版,...
  • 1.3 ODPS

    2016-12-06 09:48:00
    来源(完全照搬.... 注册odps账号注册地址:http://www.aliyun.com/product/odps/还赠送一个同名的支付宝账号。 开通“开放数据处理服务 ODPS”服务开通时需要先实名认证,...认证后可以开通odps服务,默认是“按量付...
  • odps操作手册

    2014-12-21 14:24:56
    开放数据处理服务(Open Data Processing Service,ODPS)是基于飞天内核构建的海量数据处理和分析的服务平台,它以RESTful API 形式提供服务,具有PB级别的数据处理能力,适用于数据分析、海量数据统计和挖掘等领域...
  • ODPS Python SDK和数据分析框架 ----------------- 轻松访问ODPS API的方式。 安装 快速方法: pip install pyodps[full] 与整合: pip install pyodps#egg=pyodps[mars] 如果您不需要使用Jupyter,只需键入 pip ...
  • ODPS depends on 64bit integer (long in java), and php32 build doesn't include this type, so we have to use php 64bit version for running odps project. ----由于odps中的数据类型Bigint、Datetime的传输...
  • ODPS MapReduce

    2015-12-08 15:50:55
    1、ODPS MapReduce入门 http://beader.me/2014/05/05/odps-mapreduce/?utm_source=tuicool&utm_medium=referral 2、阿里官网介绍 http://help.aliyun.com/document_detail/odps/MapReduce/summary/mr.html
  • 2. 编写ReadDDL类,用于连接ODPS,读取对应的表结构 package com.op.ddlutil; import com.aliyun.odps.*; import com.aliyun.odps.account.Account; import com.aliyun.odps.account.AliyunAccount; import ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,383
精华内容 3,353
关键字:

ODPS