全部产品

基础问题

更新时间:2020-10-14 15:38:13

什么是阿里云Data Lake Analytics(DLA)?

阿里云Data Lake Analytics是Serverless化的交互式联邦查询服务。无需ETL,使用标准SQL即可分析与集成对象存储服务OSS、数据库(PostgreSQL/MySQL/SQL Server等)、NoSQL(TableStore等)数据源中的数据。

在传统数据分析解决方案中,进行数据分析时需要先购买分析节点实例(计算和存储一体化),无论是计算还是存储任何一方先到达瓶颈,都要线性地扩容服务器资源。并且当分析任务空闲时,仍然需要承担计算资源的开销。

Data Lake Analytics是基于Serverless架构的数据分析引擎,进行数据分析时无需购买或者管理服务器,而且DLA的升级对您完全透明。Data Lake Analytics基于ECS部署,弹性扩展能让业务真正做到按需扩存储,按使用量付费,不运行分析任务时只需承担存储成本,整个方案成本极低。

为什么需要使用DLA?

无论是自建Hadoop或者开源的Greenplum等方案,存储和计算成本都是一体化的。使用这些大数据分析技术后,存储和计算的方案都是固化的。而Data Lake Analytics打破了这一架构局限性,使得数据分析方案更加灵活。

您可以将海量KV查询数据存储在TableStore中,Data Lake Analytics可以高速地查询并处理TableStore中的数据,然后将业务流水数据存储在关系型数据库(MySQL、SQL Server、PostgreSQL)中。Data Lake Analytics可以对上述存储中的数据进行分析,并赋予上述数据库复杂的查询能力。

您也可以将日志或者归档数据存储在OSS中,使用Data Lake Analytics快速地分析OSS中的数据。云上中小企业可以结合业务特点选择最廉价的存储、搭配最普惠灵活的分析能力,同时Data Lake Analytics还可以很好地将上述数据源进行联邦查询,例如通过DLA联合查询多个MySQL实例数据

如何开始快速使用DLA?

您可以参见DLA快速入门,方便、快捷地使用Data Lake Analytics。

DLA如何收费?

您在使用DLA的过程中会用到两种不同的计费方式:按扫描量付费和按计算资源付费(CU付费)。

DLA采用按量付费的计费模式(也称为后付费),即根据扫描的字节(Byte)数收费。没有任何前期拉起集群的费用、维护费用和升级费用。详细计费规则为:

  • 扫描每TB数据的费用为28元

  • 扫描每GB数据的费用为2.8分

计费时,系统保证扫描的每条数据至少为32MB。系统每小时生成一个收费订单,并从阿里云账号扣费。您可以登录控制台,通过费用>费用账单查看消费记录。

更多DLA计费信息,请参见计费方式

Application was streaming results when the connection failed. Consider raising value of ‘net_write_timeout’ on the server.

出现这种错误一般是在读取MySQL数据源数据的时候,由于默认的 net_write_timeout 较小,数据还没有读完就被MySQL把连接关掉了,去MySQL把这个参数值适当调大即可。

结构化的数据放到oss, 通过dla对数据进行运算,这一套感觉就是MaxCompute产品做的事。 有什么区别

DLA是全内存的Serverless计算的架构,速度更快,存储开放,比如用户把数据放OSS,用户控制更加自由。

遇到 You have no right to access this object because of bucket acl 怎么办?

这一般是在 客户建表写自己的OSS时发生的,DLA在默认的授权策略是没有 写与删除用户OSS的权限,需要用户授权。具体信息请参见文档:https://help.aliyun.com/document_detail/114683.html

输出csv文件要用逗号做分隔符,该怎么写?

  • hint里加入result-col-del=[,]

DLA的现有数据跟polardb做一个联表查询

DLA支持PolarDB的查询及写入,具体信息请参见文档 https://zhuanlan.zhihu.com/p/54360736

找sql history

在控制台有页面展示:https://datalakeanalytics.console.aliyun.com/dla/cn-hangzhou/moniterCenter/excuteSqlMoniter

dla 读 redis ,sorted set 的集合要怎么建表?

暂时不支持

子账号如何授权

具体信息请参见文档:https://help.aliyun.com/document_detail/98381.html?spm=a2c4g.11186623.6.573.3be34c07QsSAf7

从HDFS同步数据到OSS,相同的SQL在DLA中查出来是11万, 自建的Spark查自己的HDFS出来是19万?

一般DLA引擎不会出问题,可以先排查自己的OSS的数据是否同步正确。根据我们的经验,大部分是用户同步数据到OSS有问题。

DLA支持直接基于.gz压缩数据的数据处理吗?

支持 ,缺少一个文档

DLA能对目录下既有压缩文件,又有非压缩文件同时处理吗?

可以同时支持

新建表 ‘compression.type’=’gzip’ ,读出来的数据都是乱码

CREATE EXTERNAL TABLE data (
rmid string,
tag string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE LOCATION 'oss://xxx-data/20190110/'
TBLPROPERTIES (
   'compression.type'='gzip'
);

读出来的数据都是乱码‘compression.type’=’gzip’这个参数只对写生效。读的时候是根据文件后缀确定压缩方式的。加和的文件没有加后缀。

请问下现在DLA是默认递归目录下所有子目录和文件吗?

支持

DLA创建odps schema的入口在哪

具体信息请参见, https://yq.aliyun.com/articles/705889

要用datax导出dla的数据,需要用哪个reader

mysqlreader

DLA支持 in (select uid from**) 吗? 效率怎么样?

支持,效率比join要差

类型映射不一致,引起的问题

because '3.00199E9' in colum
n '4' is outside valid range for the datatype INTEGER.

原因是有个字段在mysql中是unsigned int类型而dla中是int类型,所以超出了范围

执行 MSCK repair table action; 加载不了分区

msck的命令只能对目录名字符合key=value的格式的才可以的。例如:oss://abc/yyy/action/year=2018/

多个hint怎么一起用?

/*+ pool-selector=default , max-running-time-sec=50 */
/*+ run-async=true, result-meta-included=true */
select * from t1

是否同时生效异步查询和最大50秒执行两个hint?hint 不能这么使用, 需要写在一起使用逗号隔开。比如 /+ xxx=aaa, yyy=bbbb /

DLA在那种场景下会给用户的SQL添加 Limit 500 这样的限制?

为了保障页面的稳定性,在控制台会有limit 500的限制,如果超过限制,建议把结果写入到自己的OSS,再通过OSS下载查看

在哪些情况下SQL扫描量是为0的,不计费的?

DDL及扫描量数据量<0.1k的情况

子账号执行 SQL 查询为什么失败?

目前不支持使用子账号去查询主账号里面的数据,比如 show query_task where id = ‘xxxx’, 这个目前是没结果的。

如何查看表的分区数目?

使用类似下面的语句:

select count(distinct <partiton_key>) from tbl;

【控制台】当前”异步执行”如何拿到执行结果

先执行异步执行,控制台会显示ASYNC_TASK_ID,拿着这个id在同步执行里面运行show query_task where id = ‘’,返回的结果里面result_file_oss_file字段为结果所在oss的路径。(注意只有当sql执行完成后,result_file_oss_file才会有值)

image.png

控制台显示Error Code:User.Unauthorized异常

确认用户是否使用的阿里云子账号登录,并且主账号给其授予的权限策略为”AliyunDLAReadOnlyAccess”。如果是这样让其主账号给其授予“AliyunDLAFullAccess”策略。具体信息请参见https://help.aliyun.com/document_detail/146683.html?spm=a2c4g.11186623.6.576.1dd84cb19UDDEi

阿里云子账号在哪里执行SQL

当前统一引导用户使用DMS执行,等后面DLA支持阿里云主子账号的权限控制整理清楚后再用新方案。

CSV文件中文乱码问题

linux下面使用“file filepath”查看文件编码,然后使用“LazySimpleSerDe”,如果原始编码为”ISO-8859”,配置’serialization.encoding’=’gbk’。对应文档https://help.aliyun.com/document_detail/109657.html?spm=a2c4g.11186623.6.624.501e68952178y9

Null IO Stream

可能是以下原因:

  • 用户的Bucket可能是归档类型。

  • 用户SQL查询过程中原先存在的文件被其它的ETL任务删掉了。

Query exceeded distributed user memory limit of 2.00TB/Query execeeded per-node user memory limit of xxGB

中文版本:

DLA关于一个查询能使用的单个节点的内存,以及整个集群的总内存是有限制的,不同的集群因为配置/worker个数,不完全一样,具体可以看Presto代码里面的每个集群的配置文件,比如: charts/production/beijing_default.yaml , 这种可以建议用户对SQL进行一些优化, 比如:

  • 优化JOIN,以扫描更少的数据

  • 对数据进行分区

  • 分拆计算,把一个大SQL拆成多个小SQL。

English Version: Presto service like DLA or the similar service provided by AWS Athena do have memory limit, e.g.: https://forums.aws.amazon.com/message.jspa?messageID=894737In many cases, the issue can be workarounded, e.g. “Optimize Joins” , “Partition the Data”, “Divide and Conquer” mentioned this thread: https://forums.aws.amazon.com/message.jspa?messageID=894737And we are also working on a Serverless Spark service, which might make solving this kind of issue easier.

Unexpected end of input stream

一般是数据文件有问题,让用户提供查询的ID,去后台日志找出对应的文件的路径, 让用户下载下来检查一下文件的完整性。根据文件类型的不同,验证的方式不一样:

  • 比如如果是gunzip的文件,用gunzip解压看看是否能正常解压。

ORC扫描量去预期的高

我们都知道列存的一个特性是对于分析型的查询效率要比行存要好,原因在于分析型的查询往往只会获取一个表里面的少数几列的数据,这样执行引擎比如 Presto 在实际扫描底层数据的时候只需要扫描需要的列的数据就好了,不需要扫描所有数据。而这种效果只有当你底层的数据是以列存的形式存储才能达到。比如:

SELECT col1
FROM tbl1
WHERE col2 = 'hello'

但是在实际使用过程中我们会发现,如果文件不是很大的话,或者文件不小,但是表的列很多的话,上面说的“节省扫描量”的效果会不起作用,这是因为 Presto 对于是否只扫描单个列,还是获取整个文件是有一个参数调控:

dataSizeSessionProperty(
        ORC_TINY_STRIPE_THRESHOLD,
        "ORC: Threshold below which an ORC stripe or file will read in its entirety",
        hiveClientConfig.getOrcTinyStripeThreshold(),
        false)

这个参数的默认值是 8MB , 所以如果你的 Stripe 太小,Presto 会读取整个文件,而不是读取一个个 Stripe,道理也很简单,如果每个Stripe太小,一次次地读取 Stripe 花在网络上的开销可能比直接读取整个文件的开销还要大,因为读取小文件,特别是云时代的这种对象存储的小文件代价是很大的。

json建表ddl出现parser失败

检查两个问题eg:1、BusinessPeriodType 这里面不能有空格;2、EnterpriseId int, 实际的数据为string,这里类型要写为string

一键建仓连接数据库报错:Access denied for user

确认是否修改了连接数据库的用户名和密码,一般是用户名或密码修改导致。如果是用户名或者密码修改,可以点击Schema管理,找到您的一键建仓任务,点击 详细信息 -> 配置 -> 更新,修改一键建仓任务的配置。

一键建仓连接数据库报错:because Could not create connection to database server. Attempted reconnect 3 times. Giving up

此时说明一键建仓任务在读数据的rds实例,压力过大,此时建议有1)调整一键建仓同步时间,与高负载的读写业务错峰运行2)调整一键建仓的并发高级配置,降低并发数,如:connections-per-job=10、total-allowed-connections=30,表明一个表将由10个并发链接去读,并且最大有30个链接,即最多3个表并发进行同步。可以针对你的rds实例规格适当调整,详见文档:一键建仓>>高级选项功能

一键建仓连接数据库报错:because Encountered too many errors talking to a worker node. The node may have crashed or be under too much load. This is probably a transient issue, so please retry your query in a few minutes

说明此时任务运行的压力过大,如提示信息描述,可以重试。若还未成功,可联系 “DLA答疑”

多库合并、一键建仓报错:No such instance with ID: rm-xxxxxx

说明这个建仓任务涉及的此rds实例rm-xxxxxx已经释放了一键建仓任务报错:because Communications link failureThe last packet successfully received from the server was 900,120 milliseconds ago. The last packet sent successfully to the server was 900,120 milliseconds ago.), 23 out of 110 jobs are finished排除用户数据库有视图,目前presto访问某些用户视图时,数据总是长时间读取不到,报的异常。另外一种可能是用户压力过大,rds/mysql 重启中断或者不响应。建议排除视图,降低并发数