
计费相关 存储计费:按照存储在 MaxCompute 的数据的容量大小进行阶梯计费。 计算计费:MaxCompute 分按量后付费和按 CU 预付费两种计算计费方式。 按量后付费:按量后付费方式针对 SQL 任务和 MapReduce 任务进行计费。 SQL 任务按量后付费:即 SQL 任务按 I/O 后付费。 MapReduce 按量后付费:即 MapReduce 任务按量进行计费。 按 CU 预付费:此方式仅在阿里云大数据平台提供。 下载计费: MaxCompute 将按照下载的数据大小进行计费注意是对公网下载收费,内网下载不收费参考https://help.aliyun.com/document_detail/27989.html?spm=5176.doc45389.6.560.LYjhcl SQL语法和标准sql区别 1,无事务控制2,暂时不支持update/delete3,不支持修改字段类型,不支持删除字段4,不支持 select from 多表5,其他hive对标函数,官方文档没有的暂时不支持更多参考https://help.aliyun.com/document_detail/50985.html?spm=5176.doc27862.6.757.lSC74f SQL限制 select 最大显示10000行想导出大于10000行参考https://help.aliyun.com/document_detail/53093.html?spm=5176.7751065.6.751.iLm6hF2,string字段最大8M更多其他限制参考https://help.aliyun.com/document_detail/51823.html?spm=5176.doc53093.6.618.R37r8p java沙箱限制类问题 用户经常问:本地测试正常,在提交到odps后失败,代码一毛一样https://help.aliyun.com/document_detail/27967.html?spm=5176.doc51823.6.647.Rt0efa原因:处于安全考虑,对一些第三方jar包做了限制一般是fastjson这个包比较常见,由于java沙箱限制,对一些第三方jar包由限制,fastjson的jar包被限制因为安全沙箱的原因无法使用。https://help.aliyun.com/document_detail/27967.html建议用gsonimport com.google.gson.Gson;这个包试下其他的jar的限制用户遇到类似报错可以提交工单咨询 下图是常见报错例子 没有启用新类型flag 若想使用新数据类型,需在 SQL 语句前加语句:set odps.sql.type.system.odps2=true;目前情况是需要加这个set,后续会省掉https://help.aliyun.com/document_detail/27821.html?spm=5176.doc27967.6.546.XhnAGU新数据类型,以及新函数、函数返回值是新数据类型都需要set如果没有set,报错现象com.aliyun.odps.OdpsException: ODPS-0130071:[1,8] Semantic analysis exception - function or view udtf_recom cannot be resolved找不到函数或者方法 oss和ots外部表创建,查询失败 1,检查是否按照文档授权https://help.aliyun.com/document_detail/45389.html?spm=5176.doc27821.6.691.5g0yGt2,报错类似DDL syntax error:ODPS-0130071:Semantic analysis exception - unrecognized option 'EXTERNAL'.检查:是否引用了新类型,也需要set 3,如果建表后查询失败检查用户oss或者ots数据量是否巨大,oss的object数量是否很多单个object是否很大参考文档 https://www.atatech.org/articles/67977 理解报错例子 没有授权 客户端odpscmd 报错 连接客户端/访问域名先看下域名https://help.aliyun.com/document_detail/34951.html?spm=5176.doc48950.6.572.58H50H项目名称Ak信息如果报错找不到java类什么的一般是客户端java环境(暂时不支持java9),建议java 7和8 任务运行比较慢 1,如果是按量付费,请提交工单,如果是预付费,可以先看下cu对应的项目是否有大量作业或者比较大的作业,长期没有执行完。可以使用主账户执行命令: TOP INSTANCE;这种方式查看当前正在运行的任务(在客户端(版本为0.29.0或以上)运行。)下载最新版本的客户端: https://help.aliyun.com/document_detail/27804.html?您也可以通过这个工具查看项目下运行任务的状态https://yq.aliyun.com/articles/247739?spm=5176.8091938.0.0.7Sf007如果是预付费cu用户可以使用这个工具查看cu使用情况https://help.aliyun.com/document_detail/66565.html?spm=a2c4g.11186623.6.713.QARDJv2,数据倾斜https://help.aliyun.com/document_detail/51020.html?spm=5176.doc34951.6.754.iMKNUT 有对大数据技术感兴趣的,可以加笔者(已从阿里离职)的微信 wx4085116 目前开了一个大数据线上培训班。有兴趣的加我。
计费相关 存储计费:按照存储在 MaxCompute 的数据的容量大小进行阶梯计费。 计算计费:MaxCompute 分按量后付费和按 CU 预付费两种计算计费方式。 按量后付费:按量后付费方式针对 SQL 任务和 MapReduce 任务进行计费。 SQL 任务按量后付费:即 SQL 任务按 I/O 后付费。 MapReduce 按量后付费:即 MapReduce 任务按量进行计费。 按 CU 预付费:此方式仅在阿里云大数据平台提供。 下载计费: MaxCompute 将按照下载的数据大小进行计费注意是对公网下载收费,内网下载不收费参考https://help.aliyun.com/document_detail/27989.html?spm=5176.doc45389.6.560.LYjhcl SQL语法和标准sql区别 1,无事务控制2,暂时不支持update/delete3,不支持修改字段类型,不支持删除字段4,不支持 select from 多表5,其他hive对标函数,官方文档没有的暂时不支持更多参考https://help.aliyun.com/document_detail/50985.html?spm=5176.doc27862.6.757.lSC74f SQL限制 select 最大显示10000行想导出大于10000行参考https://help.aliyun.com/document_detail/53093.html?spm=5176.7751065.6.751.iLm6hF2,string字段最大8M更多其他限制参考https://help.aliyun.com/document_detail/51823.html?spm=5176.doc53093.6.618.R37r8p java沙箱限制类问题 用户经常问:本地测试正常,在提交到odps后失败,代码一毛一样https://help.aliyun.com/document_detail/27967.html?spm=5176.doc51823.6.647.Rt0efa原因:我们处于安全考虑,对一些第三方jar包做了限制一般是fastjson这个包比较常见,回复口径: 由于java沙箱限制,对一些第三方jar包由限制,fastjson的jar包被限制因为安全沙箱的原因无法使用。https://help.aliyun.com/document_detail/27967.html建议用gsonimport com.google.gson.Gson;这个包试下其他的jar的限制用户遇到类似报错可以提交工单咨询 下图是常见报错例子 没有启用新类型flag 若想使用新数据类型,需在 SQL 语句前加语句:set odps.sql.type.system.odps2=true;目前情况是需要加这个set,后续会省掉https://help.aliyun.com/document_detail/27821.html?spm=5176.doc27967.6.546.XhnAGU新数据类型,以及新函数、函数返回值是新数据类型都需要set如果没有set,报错现象com.aliyun.odps.OdpsException: ODPS-0130071:[1,8] Semantic analysis exception - function or view udtf_recom cannot be resolved找不到函数或者方法 oss和ots外部表创建,查询失败 1,检查是否按照文档授权https://help.aliyun.com/document_detail/45389.html?spm=5176.doc27821.6.691.5g0yGt2,报错类似DDL syntax error:ODPS-0130071:Semantic analysis exception - unrecognized option 'EXTERNAL'.检查:是否引用了新类型,也需要set 3,如果建表后查询失败检查用户oss或者ots数据量是否巨大,oss的object数量是否很多单个object是否很大参考文档 https://www.atatech.org/articles/67977 理解报错例子 没有授权 客户端odpscmd 报错 连接客户端/访问域名先看下域名https://help.aliyun.com/document_detail/34951.html?spm=5176.doc48950.6.572.58H50H项目名称Ak信息如果报错找不到java类什么的一般是客户端java环境(暂时不支持java9),建议java 7和8 任务运行比较慢 1,如果是按量付费,请提交工单,如果是预付费,可以先看下cu对应的项目是否有大量作业或者比较大的作业,长期没有执行完。可以使用主账户执行命令: TOP INSTANCE;这种方式查看当前正在运行的任务(在客户端(版本为0.29.0或以上)运行。)下载最新版本的客户端: https://help.aliyun.com/document_detail/27804.html?您也可以通过这个工具查看项目下运行任务的状态https://yq.aliyun.com/articles/247739?spm=5176.8091938.0.0.7Sf007如果是预付费cu用户可以使用这个工具查看cu使用情况https://help.aliyun.com/document_detail/66565.html?spm=a2c4g.11186623.6.713.QARDJv2,数据倾斜https://help.aliyun.com/document_detail/51020.html?spm=5176.doc34951.6.754.iMKNUT
总则:数据同步会尽量走内网连接。 一、关于测试连通 1,目前vpc测试连通性支持的数据源是 rds数据源,其他数据源vpc网络正在排期,金融云网络暂时不支持测试连通性。2,跨区域内网测试连通性支持的是 rds 数据源,其他数据源也在规划中;云mongo和redis数据源内网跨区域经典网络是可以连通的3,ecs自建数据源,实际上不用关心自建数据源的类型。这个和ecs所在区域和网络类型有关。参考上面vpc和跨区域的1,2两点描述。用户ecs需要放行对应DataWorks服务的相关ip,DataWorks提供了相关安全组供添加,参考https://help.aliyun.com/document_detail/62917.html?spm=a2c4g.11174283.6.600.afH9DZ4,本地机房或者自己电脑的数据源,一律走公网jdbc格式。如果不通,检查用户本地网络的限制,或者数据库本身的限制5,新加坡,香港区域也是适用于上述说法 关于跨区域、vpc的数据源(rds除外),金融云网络。现在统一的解决办法 一,走公网。也需要把相关白名单ip放行 https://help.aliyun.com/document_detail/60024.html?二,配置自定义资源组(目前暂时支持华东2区添加自定义资源组)步骤如下:1,准一台和数据源同区域同网络的ecs作为调度资源https://help.aliyun.com/document_detail/52330.html?spm=5176.product30254.6.564.aCM3Th,并将这台ecs的ip加入数据源的白名单(没有白名单就不加)或者安全组大的端口范围无法在ecs安全组界面添加的,请使用ecs的安全组api添加:https://help.aliyun.com/document_detail/25554.html?|https://help.aliyun.com/document_detail/25554.html?spm=5176.doc25485.6.860.MEdQih2,数据源测试连通的时候直接确定保存3,使用脚本模式配置同步4,在运维中心-任务管理-列表模式-修改资源组为自己调度资源,测试运行 三、关于rds-odps收费问题 目前在大数据开发套件配置关于odps的数据同步,都是不收费的。除非用户自己在脚本模式自己加参数配置odps的tunnel的公网地址,会收费(实际上我们在脚本模式生成的模板中没有提供这个参数) 四、总结排查思路 1,当遇到测试连通性这一步失败的时候,*核实数据源区域,网络类型,rds白名单是否添加完整,实例id,数据库名称,用户名是否正确***常见错误实例,这种是 密码,数据库错误 ***网络不通示意图2,同步过程中出现网络断开等首先要完整日志,看下调度资源是哪个,是否是自定义资源如果是自定义资源,核实自定义资源组的ip是否添加到数据源比如rds白名单(mongo也是有白名单限制的,也需要添加)核实两端数据源连通性是否通过,核实rds,mongo白名单是否会添加完整(如果不完整,有的时候会成功有的时候会失败,如果任务下发到已添加的调度服务器上会成功,没添加的会失败)3,任务显示成功,但是日志出现8000断开报错,是因为用户使用的自定义调度资源组,没有对10.116.134.123,访问 8000 端口在安全组内网入方向放行。添加后重新运行即可。看下4,其他日志报错,看下具体报错,脏数据字段类型不对应odps分区找不到字段类型长度不够等 可以参考这个文档的一些案例https://yq.aliyun.com/articles/82428?spm=5176.8091938.0.0.vcOiqt5,odps同步到ads,https://help.aliyun.com/document_detail/26412.html?spm=5176.product26371.6.583.4FqlV9一般是权限问题,没有授权。odps中对garuda_buildaliyun.com以及garuda_dataaliyun.com授权,ads中当前账户对database的授权。 有对大数据技术感兴趣的,可以加笔者的微信 wx4085116.目前笔者已经从阿里离职,博客不代表阿里立场。笔者开了一个大数据培训班。有兴趣的加我。
目前,实时计算越来越被广泛应用,比如 实时ETL、实时报表、实时大屏展示等一些监控预警和在线系统的场景。企业对计算速度和消息更新速度要求越来越高。开源框架中,Storm,Sparks,Flink等在企业生产中大量投入使用,但是开发相对复杂,需要对接各种框架api、sdk等,另外人力成本相对较高。那么有没有一种高效的实时计算平台,只要会写SQL并且可视化的操作就可以快速完成实时计算的业务开发呢 阿里云目前推出产品 阿里云流计算(公测中,预计18年3月份商业化)(StreamCompute)传送门:https://help.aliyun.com/document_detail/62437.html?spm=a2c4g.11186623.6.544.Ed7XzG 阿里云流计算全链路示意图可以简单快速的实现仅用SQL就完成流计算的业务链路,下面我们就使用流计算给大家示范。 架构: 以阿里云流计算为核心,从数据流向上我们可以分为数据从哪里,到哪里去。本次实验架构为:Logstash+DataHub+阿里云流计算+RDS-mysql其中,Logstash :开源框架,用于采集数据DataHub:阿里云自主研发大型缓存队列(可以理解为类似 开源Kafka )https://help.aliyun.com/document_detail/47439.html?spm=a2c4g.11186623.6.539.hri7GyRDS-mysql:阿里云关系型数据库 mysql版 搭建流程: 第一步:创建DataHub 项目和Topic 具体参考https://help.aliyun.com/document_detail/47448.html?spm=a2c4g.11186623.6.546.eJLHOm如图是本次实验创建的: 第二步:搭建Logstash 参考 https://help.aliyun.com/document_detail/47451.html?spm=5176.product27797.6.588.iFTE4i配置文件如下 input { file { path => "/Users/yang/test/stream.csv" start_position => "beginning" } } filter{ csv { columns => ['name', 'age'] } } output { datahub { access_id => "LTAIu****Ouj87b" access_key => "MfY8ONjK6******7OEdyXw4T" endpoint => "https://dh-cn-hangzhou.aliyuncs.com" project_name => "M_shangdantest" topic_name => "to_stream_topic" #shard_id => "0" #shard_keys => ["thread_id"] dirty_data_continue => true dirty_data_file => "/Users/yang/test/dirty.data" dirty_data_file_max_size => 1000 } } 第三步:创建流计算任务 1,可视化注册刚才创建的DataHub数据源,接入数据。如图2,可视化注册数据输出的数据库RDS-mysql3,编写从数据来源(DataHub)取数据经过计算写入数据目的源(RDS-mysql)的业务SQL。如图代码附上,具体业务逻辑可以自己通过SQL实现: CREATE TABLE to_stream_topic ( `name` VARCHAR, age BIGINT ) WITH ( type = 'datahub', endPoint = 'http://dh-cn-hangzhou.aliyun-inc.com', roleArn='acs:ram::xxxxx:role/aliyunstreamdefaultrole', project = 'shangdantest', topic = 'to_stream_topic' ); INSERT INTO resoult_stream SELECT name,age from to_stream_topic; CREATE TABLE resoult_stream ( `name` VARCHAR, age BIGINT ) WITH ( type= 'rds', url = 'jdbc:mysql://rm-xxxxxxx.mysql.rds.aliyuncs.com:3306/lptest', userName = 'xxxxx', password = 'xxxx', tableName = 'resoult_stream' ); 更多操作其他数据源参考:https://help.aliyun.com/document_detail/62509.html?spm=a2c4g.11186623.6.633.DPannE 以上操作完成后可以1,启动logstash2,测试流计算,调试非常方便,对线上业务没有影响,自动从DataHub中抽取数据进行测试3,启动流计算作业,如图4,观察数据是否成功写入RDS-Mysql 到此 流计算一个实时链路搭建完毕,有没有发现很酷炫,只需要写写SQL,加一些数据源的配置即可。整个过程一小时就可以完成,相对开源省去了繁琐的各种环境搭建,代码编写,监控等等。 有对大数据技术感兴趣的,可以加笔者的微信 wx4085116.目前笔者已经从阿里离职,博客不代表阿里立场。笔者开了一个大数据培训班。有兴趣的加我。
当前,很多用户的业务数据存放在传统关系型数据库上,例如阿里云的RDS,做业务读写操作。当数据量非常大的时候,此时传统关系型数据库会显得有些吃力,那么会经常有将mysql数据库的数据迁移到[大数据处理平台-大数据计算服务(Maxcompute,原ODPS)(https://www.aliyun.com/product/odps?spm=5176.doc27800.765261.309.dcjpg2),利用其强大的存储和计算能力进行各种查询计算,结果再回流到RDS。 一般情况下,业务数据是按日期来区分的,有的静态数据可能是按照区域或者地域来区分,在Maxcompute中数据可以按照分区来存放,可以简单理解为一份数据放在不同的子目录下,子目录的名称以日期来命名。那么在RDS数据迁移到Maxcompute上的过程中,很多用户希望可以自动的创建分区,动态的将RDS中的数据,比如按日期区分的数据存放到Maxcompute中,这个流程自动化创建。同步的工具是使用Maxcompute的配套产品-[大数据开发套件](https://data.aliyun.com/product/ide?spm=5176.7741945.765261.313.TQqfkK)。下面就举例说明RDS-Maxcompute自动分区几种方法的使用。 一,将RDS中的数据定时每天同步到Maxcompute中,自动创建按天日期的分区。 这里就要用到大数据开发套件-数据集成的功能,我们采用界面化的配置。 如图地方,设置Maxcompute的分区格式 一般配置到这个地方的时候,默认是系统自带时间参数:${bdp.system.bizdate} 格式是yyyymmdd。也就是说在调度执行这个任务的时候,这个分区会被自动替换为 **任务执行日期的前一天**,相对用户比较方便的,因为一般用户业务数据是当前跑前一天的业务数据,这个日期也叫业务日期。 如图 如果用户想使用当天任务运行的日期作为分区值,需要自定义这个参数,方法如图,也可以参考文档 https://help.aliyun.com/document_detail/30281.html?spm=5176.product30254.6.604.SDunjF 自定义的参数,格式非常灵活,日期是当天日期,用户可以自由选择哪一天,以及格式。 可供参考的变量参数配置方式如下: 后N年:$[add_months(yyyymmdd,12*N)] 前N年:$[add_months(yyyymmdd,-12*N)] 后N月:$[add_months(yyyymmdd,N)] 前N月:$[add_months(yyyymmdd,-N)] 后N周:$[yyyymmdd+7*N] 前N周:$[yyyymmdd-7*N] 后N天:$[yyyymmdd+N] 前N天:$[yyyymmdd-N] 后N小时:$[hh24miss+N/24] 前N小时:$[hh24miss-N/24] 后N分钟:$[hh24miss+N/24/60] 前N分钟:$[hh24miss-N/24/60] 注意: 请以中括号 [] 编辑自定义变量参数的取值计算公式,例如 key1=$[yyyy-mm-dd]。 默认情况下,自定义变量参数的计算单位为天。例如 $[hh24miss-N/24/60] 表示 (yyyymmddhh24miss-(N/24/60 * 1天)) 的计算结果,然后按 hh24miss 的格式取时分秒。 使用 add_months 的计算单位为月。例如 $[add_months(yyyymmdd,12 N)-M/24/60] 表示 (yyyymmddhh24miss-(12 N 1月))-(M/24/60 1天) 的结果,然后按 yyyymmdd 的格式取年月日。 如图,配置完成后,我们来测试运行看下,直接查看日志 可以,看到日志中,Maxcompute(日志中打印原名ODPS)的信息中 partition分区,date_test=20170829,自动替换成功。 再看下实际的数据过去了没呢 我们看到数据是过来了,成功自动创建了一个分区值。那么这个任务定时调度的时候,就会自动生成一个分区,每天自动的将RDS中的数据同步到Maxcompute中的按照日期创建的分区中。 二,如果用户的数据有很多运行日期之前的历史数据,怎么自动同步,自动分区呢。大数据开发套件-运维中心-有个补数据的功能。 首先,我们需要在RDS端把历史数据按照日期筛选出来,比如历史数据2017-08-25这天的数据,我要让他自动同步到Maxcompute的20170825的分区中。 在RDS阶段可以设置where过滤条件,如图 在Maxcompute页面,还是按照之前一样配置 然后一定要 保存-提交。 提交后到运维中心-任务管理-图形模式-补数据 选择日期区间 提交运行,这个时候就会同时生成多个同步的任务实例按顺序执行 看下运行的日志,可以看到运行过程对RDS数据的抽取,在Maxcompute自动创建的分区 看下运行结果,数据写入的情况,自动创建了分区,数据同步过来了。 三,如果用户数据量比较巨大,第一次全量的数据,或者并不是按照日期分区,是按照省份等分区。那么此时数据集成就不能做到自动分区了。也就是说,想按照RDS中某个字段进行hash,相同的字段值自动放到Maxcompute中以这个字段对应值的分区中。 同步本身是做不了的,是在Maxcompute中通过SQL完成,是Maxcompute的特有功能,实际上也是真正的动态分区,大家可以参考文章 https://yq.aliyun.com/articles/81775?spm=5176.8091938.0.0.JMsroJ 。那么就需要我们先把数据全量同步到Maxcompute的一个临时表。 流程如下 1,先创建一个SQL脚本节点-用来创建临时表 drop table if exists emp_test_new_temp; CREATE TABLE emp_test_new_temp (date_time STRING, name STRING, age BIGINT, sal DOUBLE); 2,创建同步任务的节点,就是简单的同步任务,将RDS数据全量同步到Maxcompute,不需要设置分区。 3,使用sql进行动态分区到目的表 drop table if exists emp_test_new; --创建一个ODPS分区表(最终目的表) CREATE TABLE emp_test_new ( date_time STRING, name STRING, age BIGINT, sal DOUBLE ) PARTITIONED BY ( date_test STRING ); --执行动态分区sql,按照临时表的字段date_time自动分区,date_time字段中相同的数据值,会按照这个数据值自动创建一个分区值 --例如date_time中有些数据是2017-08-25,会自动在ODPS分区表中创建一个分区,date=2017-08-25 --动态分区sql如下 --可以注意到sql中select的字段多写了一个date_time,就是指定按照这个字段自动创建分区 insert overwrite table emp_test_new partition(date_test)select date_time,name,age,sal,date_time from emp_test_new_temp --导入完成后,可以把临时表删除,节约存储成本 drop table if exists emp_test_new_temp; 最后将三个节点配置成一个工作流,按顺序执行 执行过程,我们重点观察,最后一个节点的动态分区过程 最后,看下数据 完成动态分区,自动化分区。是不是很神奇,相同的日期数据,到了同一个分区里。如果是以省份命名,也是如此,我自己都怕了。 大数据开发套件实际上可以完成绝大部分的自动化作业,尤其是数据同步迁移,调度等,界面化操作使得数据集成变得简单,不用苦逼的加班搞ETL了,你懂的。 有对大数据技术感兴趣的,可以加笔者的微信 wx4085116.目前笔者已经从阿里离职,博客不代表阿里立场。笔者开了一个大数据培训班。有兴趣的加我。