华为云用户手册

  • 用户通过CTAS创建hive表报schema解析异常错误 目前 DLI 支持hive语法创建TEXTFILE、SEQUENCEFILE、RCFILE、ORC、AVRO、PARQUET文件类型的表。 如果用户CTAS建表指定的文件格式为AVRO类型,而且直接使用数字作为查询语句(SELECT)的输入,如“CREATE TABLE tb_avro STORED AS AVRO AS SELECT 1”则会报schema解析异常。 此问题的原因是如果不指定列名,则会把SELECT后的内容同时作为列名和插入值,而AVRO格式的表不支持列名为数字,所以会报解析schema异常错误。 您可以通过“CREATE TABLE tb_avro STORED AS AVRO AS SELECT 1 AS colName”指定列名的方式解决该问题,或者将存储格式指定为除AVRO以外的其它格式。 父主题: SQL作业运维类
  • 字符码不一致导致数据乱码怎么办? 在DLI执行作业时,为了避免因字符编码不一致导致的乱码问题,建议您统一数据源的编码格式。 DLI服务只支持UTF-8文本格式,因此在执行创建表和导入操作时,用户的数据需要以UTF-8编码。 在将数据导入DLI之前,确保源数据文件(如 CS V、JSON等)是以UTF-8编码保存的。如果数据源不是UTF-8编码,请在导入前提前转换为UTF-8编码。 父主题: DLI数据库和表类
  • 用户导表到OBS报“path obs://xxx already exists”错误 该提示信息说明您将数据导出到一个已经存在的OBS路径。 解决方案: 新建OBS目录。 您可以新建一个不存在的OBS目录用于存储导出的数据。 删除已存在的OBS目录。 删除已存在的OBS目录后,目录下的所有数据将会被删除。请谨慎执行此删除操作。 检查目录权限 确保您已具备访问和写入该OBS路径的权限。如果权限缺失可以联系管理员添加对应的OBS桶权限。 父主题: SQL作业运维类
  • 跨源访问 MRS HBase,连接超时,日志未打印错误怎么办? 用户在跨源连接中没有添加集群主机信息,导致KRB认证失败,故连接超时,日志也未打印错误。 建议您重新配置主机信息后再重试访问MRS HBase。 在“增强型跨源”页面,单击该连接“操作”列中的“修改主机信息”,在弹出的对话框中,填写主机信息。 格式:“IP 主机名/ 域名 ”,多条信息之间以换行分隔。 MRS主机信息获取,详细请参考《 数据湖探索 用户指南》中的“修改主机信息”章节描述。 父主题: 增强型跨源连接类
  • 问题现象 跨源连接创建对等连接失败,报错信息如下: Failed to get subnet 2c2bd2ed-7296-4c64-9b60-ca25b5eee8fe. Response code : 404, message : {"code":"VPC.0202","message":"Query resource by id 2c2bd2ed-7296-4c64-9b60-ca25b5eee8fe fail.the subnet could not be found."}
  • 问题现象 Spark作业运行报数据库权限不足,报错信息如下: org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Permission denied for resource: databases.xxx,action:SPARK_APP_AC CES S_META)
  • 怎样将老版本的Spark队列切换成通用型队列 当前DLI服务包括“SQL队列”和“通用队列”两种队列类型。 其中,“SQL队列”用于运行SQL作业,“通用队列”兼容老版本的Spark队列,用于运行Spark作业和Flink作业。 通过以下步骤,可以将老版本的“Spark队列”转换为新的“通用队列”。 重新购买“通用队列”。 将在旧的“Spark队列”中的作业迁移到新的“通用型队列”中,即在提交Spark作业时指定新的队列。 释放旧的“Spark队列”,即删除或退订队列。 父主题: DLI弹性资源池和队列类
  • 提交SQL作业时,返回“unsupported media Type”信息 在DLI提供的REST API中,可以在请求URI中附加请求消息头,例如:Content-Type。 “Content-Type”为消息体的类型(格式),默认取值为“application/json”。 提交SQL作业的URI为:POST /v1.0/{project_id}/jobs/submit-job 其“Content-Type”只支持“application/json”,若设置为“text”则会报错,报错信息为“unsupported media Type”。 父主题: DLI API类
  • 原因分析 客户建表语句: CREATE TABLE IF NOT EXISTS dli_to_rds USING JDBC OPTIONS ( 'url'='jdbc:mysql://to-rds-1174405119-oLRHAGE7.datasource.com:5432/postgreDB', 'driver'='org.postgresql.Driver', 'dbtable'='pg_schema.test1', 'passwdauth' = 'xxx', 'encryption' = 'true'); 客户的RDS数据库为PostGre集群,url的协议头填写错误导致。
  • 根因分析 该问题的根因是数据库设置的时区不合理,通常该问题出现时Flink读取的时间和RDS数据库的时间会相差13小时。 请在RDS数据库内执行如下语句 show variables like '%time_zone%' 执行结果如下: 图1 执行结果 表1 参数说明 参数 说明 system_time_zone 数据库时区。 这里它指向 'SYSTEM',也就是数据库服务器的系统时间('system_time_zone')。而这个系统时间在这里指向 CST,所以,最终数据库时区才是 CST。 time_zone 数据库所在服务器的时区,服务器是台主机。 如本地数据库所在计算机的默认时区是中国标准时间,则查出来 'system_time_zone' 是 CST。 问题根因:在Mysql的time_zone是SYSTEM,system_time_zone是CST的情况下会造成bug。 CST在mysql里被理解为China Standard Time(UTC+8),但在 Java 里被理解为Central Standard Time (USA)(UTC-5)。 Flink taskmanager本质是一个 java 进程,在Mysql 的jdbc驱动的代码里会设置时区,这个时区是通过TimeZone.getTimeZone(canonicalTimezone) 读取的。也就是说,读取的是CST(UTC+8),但真正设置的时区却是CST(UTC-5)。
  • 关联OBS桶中嵌套的JSON格式数据如何创建表 如果需要关联OBS桶中嵌套的JSON格式数据,可以使用异步模式创建表。 以下是一个示例的建表语句,展示了如何使用 JSON 格式选项来指定 OBS 中的路径: create table tb1 using json options(path 'obs://....') using json:指定使用 JSON 格式。 options:用于设置表的选项。 path:指定OBS中JSON文件的路径。 父主题: SQL作业开发类
  • Spark如何将数据写入到DLI表中 使用Spark将数据写入到DLI表中,主要设置如下参数: fs.obs.access.key fs.obs.secret.key fs.obs.impl fs.obs.endpoint 示例如下: import loggingfrom operator import addfrom pyspark import SparkContextlogging.basicConfig(format='%(message)s', level=logging.INFO)#import local filetest_file_name = "D://test-data_1.txt"out_file_name = "D://test-data_result_1"sc = SparkContext("local","wordcount app")sc._jsc.hadoopConfiguration().set("fs.obs.access.key", "myak")sc._jsc.hadoopConfiguration().set("fs.obs.secret.key", "mysk")sc._jsc.hadoopConfiguration().set("fs.obs.impl", "org.apache.hadoop.fs.obs.OBSFileSystem")sc._jsc.hadoopConfiguration().set("fs.obs.endpoint", "myendpoint")# red: text_file rdd objecttext_file = sc.textFile(test_file_name)# countscounts = text_file.flatMap(lambda line: line.split(" ")).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)# writecounts.saveAsTextFile(out_file_name) 父主题: Spark作业开发类
  • 怎样管理在DLI上运行的作业 管理大量的DLI作业时您可以采用以下方案: 作业分组: 将几万个作业根据不同的类型分组,不同类型的作业通过不同的队列运行。 创建 IAM 子用户 或者创建IAM子用户,将不同类型的作业通过不同的用户执行。 具体请参考《 数据湖 探索用户指南》。 此外DLI还提供了作业管理功能,包括编辑、启动、停止、删除作业,以及导出和导入作业。您可以利用这些功能来定期维护和管理作业。 父主题: DLI产品咨询类
  • 使用Spark作业访问sftp中的文件,作业运行失败,日志显示访问目录异常 Spark作业不支持访问sftp,建议将文件数据上传到OBS,再通过Spark作业进行读取和分析。 上传数据到OBS桶:通过OBS管理控制台或者使用命令行工具将存储在sftp中的文件数据上传到OBS桶中。 Spark读取OBS文件数据,详见使用Spark Jar作业读取和查询OBS数据。 配置Spark作业:配置Spark作业访问OBS中存储的数据。 提交Spark作业:完成作业编写后,提交并执行作业。 父主题: Spark作业运维类
  • DLI是否支持导入其他租户共享OBS桶的数据? DLI支持将同一个租户下子账户共享OBS桶中的数据导入,但是租户级别共享OBS桶中的数据无法导入。 DLI不支持导入其他租户共享的OBS桶中的数据,主要是为了确保数据的安全性和数据隔离。 对于需要跨租户共享和分析数据的场景,建议先将数据脱敏后上传到OBS桶中,再进行数据分析,分析完成后及时删除OBS桶中的临时数据,以确保数据安全 父主题: DLI产品咨询类
  • 处理步骤 检查客户安全组是否放通,安全组放通规则如下所示。 入方向规则:检查本安全组内的入方向网段及端口是否已开放,若没有则添加。 出方向规则:检查出方向规则网段及端口是否开放(建议所有网段开放)。 客户安全组入方向和出方向配置的都是DLI队列的子网。建议客户将入方向源地址配成0.0.0.0/0,端口8000,表示任意地址都可以访问DWS8000端口。 将入方向源地址配成0.0.0.0/0,端口8000,仍然无法连接,继续排查子网配置。客户的DWS子网关联了网络ACL。网络ACL是一个子网级别的可选安全层,通过与子网关联的出方向/入方向规则控制出入子网的数据流。关联子网后,网络ACL默认拒绝所有出入子网的流量,直至添加放通规则。通过检查,发现其DWS所在子网关联的ACL是空值。 因此,问题的原因是:客户子网关联了网络ACL,但是没有配置出入规则,造成IP地址不可访问。 客户配置子网出入规则后,测试成功。
  • 问题现象 在 DataArts Studio 上运行DLI SQL脚本,执行结果的运行日志显示语句执行失败,错误信息为: DLI.0999: RuntimeException: org.apache.hadoop.fs.obs.OBSIOException: initializing on obs://xxx.csv: status [-1] - request id[null] - error code [null] - error message [null] - trace :com.obs.services.exception.ObsException: OBS servcie Error Message. Request Error:...Cause by: ObsException: com.obs.services.exception.ObsException: OBSs servcie Error Message. Request Error: java.net.UnknownHostException: xxx: Name or service not known
  • 为什么insert overwrite覆盖分区表数据的时候,覆盖了全量数据? 当您使用insert overwrite语句覆盖分区表的数据时,如果发现它覆盖了全量数据而不是预期的分区数据,这可能是因为动态分区覆盖功能没有被启用。 如果需要动态覆盖DataSource表指定的分区数据,您需要先配置参数 dli.sql.dynamicPartitionOverwrite.enabled=true,然后通过insert overwrite语句实现。 “dli.sql.dynamicPartitionOverwrite.enabled”默认值为“false”,在不配置时它会覆盖整张表的数据。 详细说明请参考插入数据。 父主题: DLI数据库和表类
  • DLI中的Spark组件与MRS中的Spark组件有什么区别? DLI和MRS都支持Spark组件,但在服务模式、接口方式、应用场景和性能特性上存在一些差异。 DLI服务的Spark组件是全托管式服务,用户对Spark组件不感知,仅仅可以使用该服务,且接口为封装式接口。 DLI的这种模式减轻了运维负担,可以更专注于数据处理和分析任务本身。 具体请参考《数据湖探索用户指南》。 MRS服务Spark组件的是建立在客户的购买MRS服务所分配的虚机上,用户可以根据实际需求调整及优化Spark服务,支持各种接口调用。 MRS的这种模式提供了更高的自由度和定制性,适合有大数据处理经验的用户使用。 具体请参考《 MapReduce服务 开发指南》。 父主题: DLI产品咨询类
  • 全局变量的使用中,一个子账号是否可以使用其他子账号创建的全局变量 全局变量可用于简化复杂参数。例如,可替换长难复杂变量,提升SQL语句可读性。 全局变量的使用具有以下约束限制: 存量敏感变量只有创建用户才能使用,其余普通全局变量同账号同项目下的用户共用。 如果同账号同项目下存在多个相同名称的全局变量时,需要将多余相同名称的全局变量删除,保证同账号同项目下唯一,此时具备该全局变量修改权限的用户均可以修改对应的变量值。 如果同账号同项目下存在多个相同名称的全局变量,优先删除用户自建的。如果仅存在唯一名称的全局变量,则具备删除权限即的用户均可删除该全局变量。 父主题: DLI产品咨询类
  • 根因分析 global_temp数据库是Spark3.x默认内置的数据库,是Spark的全局临时视图。 通常在Spark作业执行注册viewManager时,会校验该数据库在metastore是否存在,如果该数据库存在则会导致Spark作业执行失败。 因此当Spark3.x的作业日志中如果出现一条访问catalog查询该数据库,并提示数据库不存在是为了确保Spark作业正常运行,无需执行其他操作。
  • 问题现象 使用Flink作业输出流写入数据到了OBS中,通过该OBS文件路径创建的DLI表进行数据查询时,无法查询到数据。 例如,使用如下Flink结果表将数据写入到OBS的“obs://obs-sink/car_infos”路径下。 create sink stream car_infos_sink ( carId string, carOwner string, average_speed double, buyday string ) partitioned by (buyday) with ( type = "filesystem", file.path = "obs://obs-sink/car_infos", encode = "parquet", ak = "{{myAk}}", sk = "{{mySk}}"); 通过该OBS文件路径创建DLI分区表,在DLI查询car_infos表数据时没有查询到数据。 create table car_infos ( carId string, carOwner string, average_speed double) partitioned by (buyday string) stored as parquet location 'obs://obs-sink/car_infos';
  • 问题现象 Flink 提交失败,异常为: Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.obs.metrics.OBSAMetricsProvider not found at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2664) at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2688) ... 31 common frames omitted Caused by: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.obs.metrics.OBSAMetricsProvider not found at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2568) at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2662) ... 32 common frames omitted
  • 问题现象 在 CDM 迁移数据到DLI,迁移作业提交后,在CDM作业迁移日志中查看作业执行失败,具体日志有如下报错信息: org.apache.sqoop.common.SqoopException: UQUERY_CONNECTOR_0001:Invoke DLI service api failed, failed reason is %s.at org.apache.sqoop.connector.uquery.intf.impl.UQueryWriter.close(UQueryWriter.java:42)at org.apache.sqoop.connector.uquery.processor.Dataconsumer.run(Dataconsumer.java:217)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)
  • DLI是否支持创建临时表? 问题描述:临时表主要用于存储临时中间结果,当事务结束或者会话结束的时候,临时表的数据可以自动删除。例如MySQL中可以通过:“create temporary table ...” 语法来创建临时表,通过该表存储临时数据,结束事务或者会话后该表数据自动清除。当前DLI是否支持该功能? 解决措施:当前DLI不支持创建临时表功能,只能根据当前业务逻辑控制来实现相同功能。DLI支持的SQL语法可以参考创建DLI表。
  • 如何合并小文件 使用SQL过程中,生成的小文件过多时,会导致作业执行时间过长,且查询对应表时耗时增大,建议对小文件进行合并。 推荐使用临时表进行数据中转 自读自写在突发异常场景下存在数据丢失的风险 执行SQL: INSERT OVERWRITE TABLE tablenameselect * FROM tablenameDISTRIBUTE BY floor(rand()*20) 父主题: SQL作业开发类
  • 执行查询语句报错:The current account does not have permission to perform this operation,the current account was restricted. Restricted for no budget. 该提示信息说明您可能因账户欠费获余额不足导致操作受限。 解决方案: 检查账户状态。 请先确认是否欠费,如有欠费请充值。 重新登录账户。 如果充值后仍然提示相同的错误,请退出账号后重新登录。 父主题: SQL作业运维类
  • JOIN数据倾斜解决方案 登录数据湖探索管理控制台,选择“SQL作业”,在要修改的作业所在行的“操作”列,单击“编辑”进入SQL编辑器界面。 在SQL编辑器界面,单击“设置”,在“配置项”尝试添加以下几个Spark参数进行解决。 参数项如下,冒号前是配置项,冒号后是配置项的值。 spark.sql.enableToString:falsespark.sql.adaptive.join.enabled:truespark.sql.adaptive.enabled:truespark.sql.adaptive.skewedJoin.enabled:truespark.sql.adaptive.enableToString:falsespark.sql.adaptive.skewedPartitionMaxSplits:10 spark.sql.adaptive.skewedPartitionMaxSplits表示倾斜拆分力度,可不加,默认为5,最大为10。 单击“执行”重新运行作业,查看优化效果。
  • count函数如何进行聚合 使用count函数进行聚合的正确用法如下: SELECT http_method, count(http_method)FROM apigatewayWHERE service_id = 'ecs' Group BY http_method 或者 SELECT http_methodFROM apigatewayWHERE service_id = 'ecs' DISTRIBUTE BY http_method 错误用法:将会报错。 SELECT http_method, count(http_method)FROM apigatewayWHERE service_id = 'ecs' DISTRIBUTE BY http_method 父主题: SQL作业开发类
  • Group By数据倾斜解决方案 取部分数据执行select count(*) as sum,Key from tbl group by Key order by sum desc查询具体是哪些key引起的数据倾斜。 然后对于倾斜Key单独做处理,加盐让其先将他分为多个task分别统计,最后再对分开统计结果进行结合统计。 例如:如下SQL示例,假设已知倾斜key为'Key01',导致单个task处理大量数据,做如下处理: SELECT a.Key, SUM(a.sum) AS CntFROM ( SELECT Key, count(*) AS sum FROM tbl GROUP BY Key, CASE WHEN KEY = 'Key01' THEN floor(random () * 200) ELSE 0 END ) aGROUP BY a.Key;
共99315条