华为云用户手册

  • 如何调整抽取并发数 集群最大抽取并发数的设置与 CDM 集群规格有关,并发数上限建议配置为vCPU核数*2,如表1所示。 表1 集群最大抽取并发数配置建议 规格名称 vCPUs/内存 集群并发数上限参考 cdm.large 8核 16GB 16 cdm.xlarge 16核 32GB 32 cdm.4xlarge 64核 128GB 128 图1 集群最大抽取并发数配置 作业抽取并发数的配置原则如下: 迁移的目的端为文件时,CDM不支持多并发,此时应配置为单进程抽取数据。 表中每行数据大小为1MB以下的可以设置多并发抽取,超过1MB的建议单线程抽取数据。 作业抽取并发数可参考集群最大抽取并发数配置,但不建议超过集群最大抽取并发数上限。 目的端为 DLI 数据源时,抽取并发数建议配置为1,否则可能会导致写入失败。 图2 作业抽取并发数配置
  • CDM有哪些优势? 云数据迁移 (Cloud Data Migration,简称CDM)服务基于分布式计算框架,利用并行化处理技术,使用CDM迁移数据的优势如表1所示。 表1 CDM优势 优势项 用户自行开发 CDM 易使用 自行准备服务器资源,安装配置必要的软件并进行配置,等待时间长。 程序在读写两端会根据数据源类型,使用不同的访问接口,一般是数据源提供的对外接口,例如JDBC、原生API等,因此在开发脚本时需要依赖大量的库、SDK等,开发管理成本较高。 CDM提供了Web化的管理控制台,通过Web页实时开通服务。 用户只需要通过可视化界面对数据源和迁移任务进行配置,服务会对数据源和任务进行全面的管理和维护,用户只需关注数据迁移的具体逻辑,而不用关心环境等问题,极大降低了开发维护成本。 CDM还提供了REST API,支持第三方系统调用和集成。 实时监控 需要自行选型开发。 您可以使用 云监控服务 监控您的CDM集群,执行自动实时监控、告警和通知操作,帮助您更好地了解CDM集群的各项性能指标。 免运维 需要自行开发完善运维功能,自行保证系统可用性,尤其是告警及通知功能,否则只能人工值守。 使用CDM服务,用户不需要维护服务器、虚拟机等资源。CDM的日志,监控和告警功能,有异常可以及时通知相关人员,避免7*24小时人工值守。 高效率 在迁移过程中,数据读写过程都是由一个单一任务完成的,受限于资源,整体性能较低,对于海量数据场景通常不能满足要求。 CDM任务基于分布式计算框架,自动将任务切分为独立的子任务并行执行,能够极大提高数据迁移的效率。针对Hive、HBase、MySQL、DWS( 数据仓库 服务)数据源,使用高效的数据导入接口导入数据。 多种数据源支持 数据源类型繁杂,针对不同数据源开发不同的任务,脚本数量成千上万。 支持数据库、Hadoop、NoSQL、数据仓库、文件等多种类型的数据源。 多种网络环境支持 随着云计算技术的发展,用户数据可能存在于各种环境中,例如公有云、自建/托管IDC、混合场景等。在异构环境中进行数据迁移需要考虑网络连通性等因素,给开发和维护都带来较大难度。 无论数据是在用户本地自建的IDC中(Internet Data Center,互联网数据中心)、云服务中、第三方云中,或者使用E CS 自建的数据库或文件系统中,CDM均可帮助用户轻松应对各种数据迁移场景,包括数据上云,云上数据交换,以及云上数据回流本地业务系统。 父主题: 数据集成(CDM作业)
  • 数据服务专享版API解冻 在 DataArts Studio “空间管理”页签中,单击工作空间操作列“编辑”链接。 图3 编辑空间管理 在“空间信息”中,单击“设置”按钮对已分配配额进行配置。 图4 设置已分配配额 数据服务已创建的API属于计费项,当前操作正在增加API配额,这会使工作空间下可以创建更多的API,同时可能使收费增加,请确认。 设置专享版API已分配配额。 图5 设置配额 已分配配额不能小于已使用配额,不能大于总配额-总分配配额+已分配配额。 选择需要解冻的API,单击操作列“解冻”完成API的解冻。 图6 解冻API 创建专享版API需要收费(10个以内不收费,超过10个的API的个数1个API收费1元/1天)。
  • 解决方案 此类问题一般是由于用户不具备 MRS 集群操作权限导致的。 对于租户下新增的用户,需要在MRS集群列表的界面找到对应的MRS集群实例,手动单击同步。 操作如下: 进入MRS控制台,查看现有集群,单击对应的集群名称进入概览页。 图1 MRS集群实例 在“ IAM 用户同步”处,单击同步。 图2 单击同步 在操作日志处查看操作结果。 图3 操作日志 如果经过上述步骤,账号已同步。但还是提示MRS权限不足的话,则需要登录到Manger管理页面中创建一个与当前主账号同名的账号。 在步骤4中,需要创建一个与当前主账号同名的账号。
  • 如何实现用户的工作空间隔离,使其无法查看其他未授权工作空间? DataArts Studio基于系统角色+工作空间角色实现授权的能力。默认情况下,当为普通用户配置了DAYU User系统角色,未添加为某个工作空间角色时,则该用户无法查看此工作空间。 注意,如果该普通用户同时被配置了DAYU Administrator、Tenant Guest或Tenant Administrator角色,则工作空间隔离失效,该用户可查看所有工作空间。 父主题: 咨询与计费
  • 解决方案 优先联系DBA修改表结构,将需要过滤的列配置为索引列,然后重试。 如果由于数据不离散,导致还是失败请参考2~4,通过增大JDBC超时时间解决。 根据作业找到对应的MySQL连接名称,查找连接信息。 图2 连接信息 单击“连接管理”,在“操作”列中,单击“连接”进行编辑。 图3 连接 打开高级属性,在“连接属性”中建议新增“connectTimeout”与“socketTimeout”参数及参数值,单击“保存”。 图4 编辑高级属性
  • 套餐包到期未续订或按需资源欠费时,我的数据会保留吗? 云服务进入宽限期/保留期后,华为云将会通过邮件、短信等方式向您发送提醒,提醒您续订或充值。保留期到期仍未续订或充值,存储在云服务中的数据将被删除、云服务资源将被释放。 宽限期:指客户的包周期资源到期未续订或按需资源欠费时,华为云提供给客户进行续费与充值的时间,宽限期内客户可正常访问及使用云服务。 保留期:指宽限期到期后客户的包周期资源仍未续订或按需资源仍未缴清欠款,将进入保留期。保留期内客户不能访问及使用云服务,但对客户存储在云服务中的数据仍予以保留。 华为云宽限期和保留期时长设定请参考宽限期保留期。 父主题: 咨询与计费
  • 解决方案 您需要检查IAM用户所在的用户组是否已经在IAM控制台中被授予DAYU User或DAYU Administrator的系统角色。IAM用户的创建和授权系统角色的具体操作如下: 创建用户组并授权系统角色。 使用华为账号登录 统一身份认证 服务IAM控制台,创建用户组,并授予DataArts Studio的系统角色,如“DAYU Administrator”或“DAYU User”。 创建用户组并授权的具体操作,请参见创建用户组并授权。 配置用户组的DataArts Studio权限时,直接在搜索框中输入权限名“DAYU”进行搜索,然后勾选需要授予用户组的权限,如“DAYU User”。 DataArts Studio部署时通过物理区域划分,为项目级服务。授权时,“授权范围方案”如果选择“所有资源”,则该权限在所有区域项目中都生效;如果选择“指定区域项目资源”,则该权限仅对此项目生效。IAM用户授权完成后,访问DataArts Studio时,需要先切换至授权区域。 创建用户并加入用户组。 在IAM控制台创建用户,并将其加入步骤1中创建的用户组。 创建用户并加入用户组的具体操作,请参见创建用户并加入用户组。 仅当创建IAM用户时的访问方式勾选“编程访问”后,此IAM用户才能通过认证鉴权,从而使用API、SDK等方式访问DataArts Studio。 为“DAYU User”系统角色用户自定义工作空间角色,并将其添加到工作空间成员、配置角色。 对于“DAYU User”权限的IAM用户而言,DataArts Studio工作空间角色决定了其在工作空间内的权限,当前有管理员、开发者、部署者、运维者和访客这五种预置角色可被分配。如果预置角色可以满足您的使用需求,则无需自定义工作空间角色,直接将用户添加到工作空间成员、配置预置角色即可;否则,请您创建自定义角色,再将用户添加到工作空间成员、配置自定义角色。自定义工作空间角色的具体操作请参见(可选)自定义工作空间角色,添加工作空间成员并配置角色的具体操作请参见添加工作空间成员和角色。 角色的权限说明请参见权限列表章节。 用户登录并验证权限 新创建的用户登录控制台,切换至授权区域,验证权限,例如: 在“服务列表”中选择 数据治理中心 ,进入DataArts Studio实例卡片。从实例卡片进入控制台首页后,确认能否正常查看工作空间列表情况。 进入已添加当前用户的工作空间业务模块(例如管理中心),查看能否根据所配置的工作空间角色,正常进行业务操作。
  • 可能原因 DataArts Studio基于DAYU系统角色+工作空间角色实现授权的能力。为使IAM用户权限正常,IAM用户所在的用户组需要在IAM控制台中被授予DAYU User或DAYU Administrator的系统角色,另外也必须确保DAYU User角色的IAM用户已在对应的DataArts Studio工作空间中被设置为对应的工作空间角色。 如果您只给用户配置了工作空间的角色,则会出现无权限的报错。
  • CDM可以跨账户使用吗? CDM不支持跨账户使用,可以通过授权给同一账户IAM子用户使用。 IAM用户授权操作步骤如下: 创建用户组并授权 在IAM控制台创建用户组,并授予CDM集群只读权限“CDM ReadOnlyAccess”。 创建用户并加入用户组 在IAM控制台创建用户,并将其加入1中创建的用户组。 用户登录并验证权限 新创建的用户登录控制台,切换至授权区域,验证权限: 在“服务列表”中选择“云数据迁移服务”,进入CDM主界面查看集群,若未提示权限不足,表示“CDM ReadOnlyAccess”已生效。 在“服务列表”中选择除CDM服务外的任一服务,若提示权限不足,表示“CDM ReadOnlyAccess”已生效。 父主题: 数据集成(CDM作业)
  • 为什么权限同步到DLI中,会提示权限不够? 权限同步到DLI的任务通过云服务委托(dlg_agency)完成,因此需要委托拥有IAM认证服务相关权限,具体所需权限如表1所示。 表1 待授予权限 权限名称 配置目的 是否必选 授权项/系统权限(二者选其一配置即可) IAM权限 系统获取用户或用户组、创建角色时,需要该权限。 例如用户同步时,如果无此权限会导致操作失败。 是 iam:users:listUsers iam:groups:listGroups iam:users:listUsersForGroup iam:roles:createRole iam:roles:deleteRole iam:roles:updateRole iam:permissions:grantRoleToGroup iam:permissions:listRoleAssignments iam:permissions:revokeRoleFromGroup Security Administrator DLI权限同步权限 DLI权限同步时,需要该权限。 例如DLI权限同步时,如果无此权限会导致同步失败,系统提示权限不足。 DLI权限管理时必选 dli:database:grantPrivilege dli:table:grantPrivilege dli:column:grantPrivilege dli:queue:grantPrivilege DLI FullAccess 如出现此提示,可参考如下示例完成委托授权(本例以授予系统权限为例): 登录IAM控制台。 在统一身份认证服务左侧导航窗格中,单击“委托”。 在搜索框中,搜索“dlg_agency”,找到dlg_agency委托项,单击“授权”。 图1 dlg_agency授权 在授权框中,分别搜索并勾选“Security Administrator”和“DLI FullAccess”,单击“下一步”。 图2 勾选Security Administrator 单击“确定”,给委托完成授权。授权后,等待15-30分钟,权限可正常同步到DLI。 父主题: 数据安全
  • 数据目录组件有什么用? 数据目录的核心是通过元数据采集任务,采集并展示企业在工作空间范围内的数据资产地图,包括元数据信息和数据血缘关系。 元数据管理 元数据管理模块是 数据湖 治理的基石,支持创建自定义策略的采集任务,可采集数据源中的技术元数据。支持自定义业务元模型,批量导入业务元数据,关联业务和技术元数据、全链路的血缘管理和应用。 数据地图 数据地图围绕数据搜索,服务于数据分析、数据开发、数据挖掘、数据运营等数据表的使用者和拥有者,提供方便快捷的数据搜索服务,拥有功能强大的血缘信息及影响分析。 在数据地图中,可通过关键词搜索数据资产,支持模糊搜索,快速检索,定位数据。 使用数据地图根据表名直接查看表详情,快速查阅明细信息,掌握使用规则。获得数据详细信息后,可添加额外描述。 通过数据地图的血缘分析可以查看每个数据表的来源、去向,并查看每个表及字段的加工逻辑。 对数据资产,可以从业务角度定义分类或标签。 父主题: 数据目录
  • 原因分析 获取Shell节点的运行日志。 [2021/11/17 02:00:36 GMT+0800] [INFO] No job-level agency is set, Workspace-level agency is dlg_agency, Execute job use agency dlg_agency, job id is 07572F197E4642E5BE549C2B656F157Ctm7cHkHd[2021/11/17 02:00:36 GMT+0800] [DEBUG] ===============================================[2021/11/17 02:00:36 GMT+0800] [INFO] Get response from agent when try to submit shell running job :[2021/11/17 02:00:36 GMT+0800] [INFO]{"jobResultList":[{"jobId":"a567f7f5-3c9e-4dfc-a464-bd477ac5b1ea","status":"created","errorCode":0,"failCount":0,"result":[]}],"agentId":"614853ee-c1c6-456d-9aa6-fc84ad1281ed"}[2021/11/17 02:00:36 GMT+0800] [DEBUG] ===============================================[2021/11/17 02:05:56 GMT+0800] [DEBUG] ===============================================[2021/11/17 02:05:56 GMT+0800] [INFO] Job Run finish , the raw output is :[2021/11/17 02:05:56 GMT+0800] [INFO]{"jobId":"a567f7f5-3c9e-4dfc-a464-bd477ac5b1ea","status":"failed","errorCode":3427,"errorMessage":"Shell script job execute failed.","failCount":0,"result":[{"is_success":false,"exeTime":300.609}]}[2021/11/17 02:05:56 GMT+0800] [DEBUG] ===============================================[2021/11/17 02:05:56 GMT+0800] [DEBUG] ===============================================[2021/11/17 02:05:56 GMT+0800] [INFO] The return code is : [-1].[2021/11/17 02:05:56 GMT+0800] [DEBUG] ===============================================[2021/11/17 02:05:56 GMT+0800] [INFO] Execute shell script job finished.[2021/11/17 02:05:56 GMT+0800] [ERROR] Shell exit code is not 0[2021/11/17 02:05:56 GMT+0800] [DEBUG] ===============================================[2021/11/17 02:05:56 GMT+0800] [ERROR] Shell script job execute failed. Please contact ECS Service.[2021/11/17 02:05:56 GMT+0800] [ERROR] Exception message: RuntimeException: Shell script job execute failed. Please contact ECS Service.[2021/11/17 02:05:56 GMT+0800] [ERROR] Root Cause message:RuntimeException: Shell script job execute failed. Please contact ECS Service. 确认其ECS的sshd_config参数如下。 原因分析:由于ssh session超时断开了,因此Shell节点失败。
  • 解决办法 编辑ECS的/etc/ssh/sshd_config文件,添加或者更新如下两个值。 ClientAliveInterval 300 ClientAliveCountMax 3 ClientAliveInterval指定了服务器端向客户端请求消息的时间间隔,默认是0,不发送请求。然而ClientAliveInterval 300表示五分钟发送一次,然后客户端响应,这样就保持长连接了。ClientAliveCountMax的默认值3。ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数达到一定值,就自动断开,正常情况下,客户端会正常响应。 修改后,重启ECS的sshd,执行如下命令: restart sshd.service 检查sshd是否启动成功(下图为成功):
  • CDM有哪些安全防护? CDM是一个完全托管的服务,提供了以下安全防护能力保护用户数据安全。 实例隔离:CDM服务的用户只能使用自己创建的实例,实例和实例之间是相互隔离的,不可相互访问。 系统加固:CDM实例的操作系统进行了特别的安全加固,攻击者无法从Internet访问CDM实例的操作系统。 密钥加密:用户在CDM上创建连接输入的各种数据源的密钥,CDM均采用高强度加密算法保存在CDM数据库。 无中间存储:数据在迁移的过程中,CDM只处理数据映射和转换,而不会存储任何用户数据或片段。 父主题: 数据集成(CDM作业)
  • 解决方案 登录作业使用的源数据库。 查询同步任务选择的database对象所对应的流复制槽名称。 select slot_name from pg_replication_slots where database = 'database'; 执行如下语句,删除对应的流复制槽。 select * from pg_drop_replication_slot('slot_name'); 执行如下语句,查询流复制槽是否成功删除。 select slot_name from pg_replication_slots where slot_name = 'slot_name';
  • 如何调整抽取并发数 集群最大抽取并发数的设置与CDM集群规格有关,并发数上限建议配置为vCPU核数*2,如表1所示。 表1 集群最大抽取并发数配置建议 规格名称 vCPUs/内存 集群并发数上限参考 cdm.large 8核 16GB 16 cdm.xlarge 16核 32GB 32 cdm.4xlarge 64核 128GB 128 图1 集群最大抽取并发数配置 作业抽取并发数的配置原则如下: 迁移的目的端为文件时,CDM不支持多并发,此时应配置为单进程抽取数据。 表中每行数据大小为1MB以下的可以设置多并发抽取,超过1MB的建议单线程抽取数据。 作业抽取并发数可参考集群最大抽取并发数配置,但不建议超过集群最大抽取并发数上限。 目的端为DLI数据源时,抽取并发数建议配置为1,否则可能会导致写入失败。 图2 作业抽取并发数配置
  • 代码示例 使用Java调用CDM服务的REST API创建、启动、查询、删除CDM作业的代码示例如下: package cdmclient;import java.io.IOException;import org.apache.http.Header;import org.apache.http.HttpEntity;import org.apache.http.HttpHost;import org.apache.http.auth.AuthScope;import org.apache.http.auth.UsernamePasswordCredentials;import org.apache.http.client.CredentialsProvider;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpDelete;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.methods.HttpPut;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.BasicCredentialsProvider;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils; public class CdmClient {private final static String DOMAIN_NAME="云账号名";private final static String USER_NAME="云用户名";private final static String USER_PASSWORD="云用户密码";private final static String PROJECT_ID="项目ID";private final static String CLUSTER_ID="CDM集群ID";private final static String JOB_NAME="作业名称";private final static String FROM_LINKNAME="源连接名称";private final static String TO_LINKNAME="目的连接名称";private final static String IAM_ENDPOINT="IAM的Endpoint";private final static String CDM_ENDPOINT="CDM的Endpoint"; private CloseableHttpClient httpclient;private String token;public CdmClient() {this.httpclient = createHttpClient();this.token = login();}private CloseableHttpClient createHttpClient() {CloseableHttpClient httpclient =HttpClients.createDefault();return httpclient;}private String login(){HttpPost httpPost = new HttpPost("https://"+IAM_ENDPOINT+"/v3/auth/tokens");String json ="{\r\n"+"\"auth\": {\r\n"+"\"identity\": {\r\n"+"\"methods\": [\"password\"],\r\n"+"\"password\": {\r\n"+"\"user\": {\r\n"+"\"name\": \""+USER_NAME+"\",\r\n"+"\"password\": \""+USER_PASSWORD+"\",\r\n"+"\"domain\": {\r\n"+"\"name\": \""+DOMAIN_NAME+"\"\r\n"+"}\r\n"+"}\r\n"+"}\r\n"+"},\r\n"+"\"scope\": {\r\n"+"\"project\": {\r\n"+"\"name\": \"PROJECT_NAME\"\r\n"+"}\r\n"+"}\r\n"+"}\r\n"+"}\r\n";try {StringEntity s = new StringEntity(json);s.setContentEncoding("UTF-8");s.setContentType("application/json");httpPost.setEntity(s);CloseableHttpResponse response = httpclient.execute(httpPost);Header tokenHeader = response.getFirstHeader("X-Subject-Token");String token = tokenHeader.getValue();System.out.println("Login successful");return token;} catch (Exception e) {throw new RuntimeException("login failed.", e);}} /*创建作业*/public void createJob(){HttpPost httpPost = new HttpPost("https://"+CDM_ENDPOINT+"/cdm/v1.0/"+PROJECT_ID+"/clusters/"+CLUSTER_ID+"/cdm/job");/**此处JSON信息比较复杂,可以先在作业管理界面上创建一个作业,然后单击作业后的“作业JSON定义”,复制其中的JSON内容,格式化为Java字符串语法,然后粘贴到此处。*JSON消息体中一般只需要替换连接名、导入和导出的表名、导入导出表的字段列表、源表中用于分区的字段。**/String json ="{\r\n"+"\"jobs\": [\r\n"+"{\r\n"+"\"from-connector-name\": \"generic-jdbc-connector\",\r\n"+"\"name\": \""+JOB_NAME+"\",\r\n"+"\"to-connector-name\": \"generic-jdbc-connector\",\r\n"+"\"driver-config-values\": {\r\n"+"\"configs\": [\r\n"+"{\r\n"+"\"inputs\": [\r\n"+"{\r\n"+"\"name\": \"throttlingConfig.numExtractors\",\r\n"+"\"value\": \"1\"\r\n"+"}\r\n"+"],\r\n"+"\"validators\": [],\r\n"+"\"type\": \"JOB\",\r\n"+"\"id\": 30,\r\n"+"\"name\": \"throttlingConfig\"\r\n"+"}\r\n"+"]\r\n"+"},\r\n"+"\"from-link-name\": \""+FROM_LINKNAME+"\",\r\n"+"\"from-config-values\": {\r\n"+"\"configs\": [\r\n"+"{\r\n"+"\"inputs\": [\r\n"+"{\r\n"+"\"name\": \"fromJobConfig.schemaName\",\r\n"+"\"value\": \"sqoop\"\r\n"+"},\r\n"+"{\r\n"+"\"name\": \"fromJobConfig.tableName\",\r\n"+"\"value\": \"city1\"\r\n"+"},\r\n"+"{\r\n"+"\"name\": \"fromJobConfig.columnList\",\r\n"+"\"value\": \"code&name\"\r\n"+"},\r\n"+"{\r\n"+"\"name\": \"fromJobConfig.partitionColumn\",\r\n"+"\"value\": \"code\"\r\n"+"}\r\n"+"],\r\n"+"\"validators\": [],\r\n"+"\"type\": \"JOB\",\r\n"+"\"id\": 7,\r\n"+"\"name\": \"fromJobConfig\"\r\n"+"}\r\n"+"]\r\n"+"},\r\n"+"\"to-link-name\": \""+TO_LINKNAME+"\",\r\n"+"\"to-config-values\": {\r\n"+"\"configs\": [\r\n"+"{\r\n"+"\"inputs\": [\r\n"+"{\r\n"+"\"name\": \"toJobConfig.schemaName\",\r\n"+"\"value\": \"sqoop\"\r\n"+"},\r\n"+"{\r\n"+"\"name\": \"toJobConfig.tableName\",\r\n"+"\"value\": \"city2\"\r\n"+"},\r\n"+"{\r\n"+"\"name\": \"toJobConfig.columnList\",\r\n"+"\"value\": \"code&name\"\r\n"+"}, \r\n"+"{\r\n"+"\"name\": \"toJobConfig.shouldClearTable\",\r\n"+"\"value\": \"true\"\r\n"+"}\r\n"+"],\r\n"+"\"validators\": [],\r\n"+"\"type\": \"JOB\",\r\n"+"\"id\": 9,\r\n"+"\"name\": \"toJobConfig\"\r\n"+"}\r\n"+"]\r\n"+"}\r\n"+"}\r\n"+"]\r\n"+"}\r\n";try {StringEntity s = new StringEntity(json);s.setContentEncoding("UTF-8");s.setContentType("application/json");httpPost.setEntity(s);httpPost.addHeader("X-Auth-Token", this.token);httpPost.addHeader("X-Language", "en-us");CloseableHttpResponse response = httpclient.execute(httpPost);int status = response.getStatusLine().getStatusCode();if(status == 200){System.out.println("Create job successful.");}else{System.out.println("Create job failed.");HttpEntity entity = response.getEntity();System.out.println(EntityUtils.toString(entity));}} catch (Exception e) {e.printStackTrace();throw new RuntimeException("Create job failed.", e);}} /*启动作业*/public void startJob(){HttpPut httpPut = new HttpPut("https://"+CDM_ENDPOINT+"/cdm/v1.0/"+PROJECT_ID+"/clusters/"+CLUSTER_ID+"/cdm/job/"+JOB_NAME+"/start");String json = "";try {StringEntity s = new StringEntity(json);s.setContentEncoding("UTF-8");s.setContentType("application/json");httpPut.setEntity(s);httpPut.addHeader("X-Auth-Token", this.token);httpPut.addHeader("X-Language", "en-us");CloseableHttpResponse response = httpclient.execute(httpPut);int status = response.getStatusLine().getStatusCode();if(status == 200){System.out.println("Start job successful.");}else{System.out.println("Start job failed.");HttpEntity entity = response.getEntity();System.out.println(EntityUtils.toString(entity));}} catch (Exception e) {e.printStackTrace();throw new RuntimeException("Start job failed.", e);}} /*循环查询作业运行状态,直到作业运行结束。*/public void getJobStatus(){HttpGet httpGet = new HttpGet("https://"+CDM_ENDPOINT+"/cdm/v1.0/"+PROJECT_ID+"/clusters/"+CLUSTER_ID+"/cdm/job/"+JOB_NAME+"/status");try {httpGet.addHeader("X-Auth-Token", this.token);httpGet.addHeader("X-Language", "en-us");boolean flag = true;while(flag){CloseableHttpResponse response = httpclient.execute(httpGet);int status = response.getStatusLine().getStatusCode();if(status == 200){HttpEntity entity = response.getEntity();String msg = EntityUtils.toString(entity);if(msg.contains("\"status\":\"SUCCEEDED\"")){System.out.println("Job succeeded");break;}else if (msg.contains("\"status\":\"FAILED\"")){System.out.println("Job failed.");break;}else{Thread.sleep(1000);}}else{System.out.println("Get job status failed.");HttpEntity entity = response.getEntity();System.out.println(EntityUtils.toString(entity));break;}}} catch (Exception e) {e.printStackTrace();throw new RuntimeException("Get job status failed.", e);}} /*删除作业*/public void deleteJob(){HttpDelete httpDelte = new HttpDelete("https://"+CDM_ENDPOINT+"/cdm/v1.0/"+PROJECT_ID+"/clusters/"+CLUSTER_ID+"/cdm/job/"+JOB_NAME);try {httpDelte.addHeader("X-Auth-Token", this.token);httpDelte.addHeader("X-Language", "en-us");CloseableHttpResponse response = httpclient.execute(httpDelte);int status = response.getStatusLine().getStatusCode();if(status == 200){System.out.println("Delete job successful.");}else{System.out.println("Delete job failed.");HttpEntity entity = response.getEntity();System.out.println(EntityUtils.toString(entity));}} catch (Exception e) {e.printStackTrace();throw new RuntimeException("Delete job failed.", e);}} /*关闭*/public void close(){try {httpclient.close();} catch (IOException e) {throw new RuntimeException("Close failed.", e);}}public static void main(String[] args){CdmClient cdmClient = new CdmClient();cdmClient.createJob();cdmClient.startJob();cdmClient.getJobStatus();cdmClient.deleteJob();cdmClient.close();}}
  • 问题描述 数据库中存储的是1或0,但没有true和false的数据,但MySQL迁移时读取到的是true或false,提示报错信息:Unable to execute the SQL statement. Cause: ERROR: invalid input syntax for integer: "true" Where: COPY sd_mask_ext, line 1, column mask_type。
  • DataArts Studio和ROMA有什么差异? 从数据运营方案(数据中台)的数据集成、 数据治理 以及数据开放三层结构来看,DataArts Studio和ROMA主要差别在于数据治理方面: ROMA作为连接各个系统的管道,对接入数据没有治理和规划的功能。 DataArts Studio支持对接入数据进行结构分析,重新建模,最终打破数据孤岛,帮助企业建立统一数据模型。 在实际使用中,经常需要DataArts Studio和ROMA的密切配合使用,支撑用户的数字化转型。 父主题: 咨询与计费
  • 运行作业后查看日志时系统提示“OBS日志文件不存在,请检查文件是否被删除或者没有OBS写入权限”的处理方法 使用管理员用户登录IAM控制台。 在统一身份认证服务的左侧导航窗格中,选择“用户”,单击用户名进入用户信息界面。 单击“访问方式”后面的,修改访问方式。 勾选“编程访问”和“管理控制台访问”。 图4 配置访问方式 单击“确定”。 在管理控制台创建工作空间时,作业日志OBS路径只支持OBS对象桶,不支持并行文件系统。如果不配置作业日志OBS路径,DataArts Studio数据开发默认会把日志写到dlf-log-{projectId}桶中,DataArts Studio数据服务默认会把日志写到dlm-log-{projectId}桶中。 如果“作业日志OBS路径”没有选择已有的OBS桶,首次运行作业时,默认的DLF桶创建不出来,无法写入日志。为了确保作业日志正常写入OBS桶中,当创建工作空间时,请选择已有的OBS路径。
  • 解决方法 使用管理员用户登录IAM控制台。 在统一身份认证服务的左侧导航窗格中,选择“用户”,单击用户名进入用户信息界面。 查看用户所属的用户组。 图2 用户所属的用户组 在左侧导航窗格中,选择“用户组”,单击用户所属的用户组后面“操作”列的“授权”。 在授权界面,选择需要给用户组添加的权限,搜索需要的权限名称,请配置为OBS OperateAccess或OBS Administrator。 图3 给用户组授权 单击“下一步”,选择最小授权范围,系统默认“所有资源”。 单击“确定”。 如果权限没有问题,请检查OBS日志文件是否存在。
  • 数据目录支持采集哪些对象的资产? 数据目录目前支持采集数据湖的资产,例如MRS Hive、DLI、DWS等,除此之外也支持采集以下数据源的元数据: 关系型数据库,如MySQL/PostgreSQL等(可使用RDS类型连接,采集其元数据) 云搜索服务 CSS 图引擎服务GES 对象存储服务 OBS MRS Hudi组件(MRS Hudi作为一种数据格式,元数据存放在Hive中,操作通过Spark进行。在Hudi表开启“同步hive表配置”后,可通过采集MRS Hive元数据的方式采集Hudi表的元数据) 详情请参见支持的数据源。 父主题: 数据目录
  • 什么是数据血缘关系? 大数据时代,数据爆发性增长,海量的、各种类型的数据在快速产生。这些庞大复杂的数据信息,通过联姻融合、转换变换、流转流通,又生成新的数据,汇聚成数据的海洋。 数据的产生、加工融合、流转流通,到最终消亡,数据之间自然会形成一种关系。我们借鉴人类社会中类似的一种关系来表达数据之间的这种关系,称之为数据的血缘关系。与人类社会中的血缘关系不同,数据的血缘关系还包含了一些特有的特征: 归属性:一般来说,特定的数据归属特定的组织或者个人,数据具有归属性。 多源性:同一个数据可以有多个来源(多个父亲)。一个数据可以是多个数据经过加工而生成的,而且这种加工过程可以是多个。 可追溯性:数据的血缘关系,体现了数据的生命周期,体现了数据从产生到消亡的整个过程,具备可追溯性。 层次性:数据的血缘关系是有层次的。对数据的分类、归纳、总结等对数据进行的描述信息又形成了新的数据,不同程度的描述信息形成了数据的层次。 DataArts Studio生成的血缘关系图如图1所示,为数据表对象,为作业节点对象,通过对象和箭头的编排表示血缘信息。从血缘关系图中可以看到,wk_02表数据是由wk_01表数据经过hive_1作业节点加工而生成的,wk_02表数据经由hive_2作业节点加工又分别生成了wk_03、wk_04和wk_05的表数据。 图1 数据血缘关系示例 父主题: 数据目录
  • 问题案例总览 表1 问题案例总览 类型 相关文档 网络打通 数据源和资源组网络不通如何排查? 数据源安全组放通哪些端口可满足Migration访问? Hudi 如何配置Hudi Compaction的Spark周期任务? DWS MySQL到DWS实时同步中,同步新增列的DDL时报错怎么办? MySQL到DWS实时同步中,DWS为什么需要对主键null值进行过滤? Kafka Kafka到DLI实时同步中,作业运行失败,报“Array element access needs an index starting at 1 but was 0”怎么办? Oracle Oracle数据源如何开通归档日志、查询权限和日志解析权限? PostgreSQL PostgreSQL数据源如何手动删除复制槽? 父主题: 数据集成(实时作业)
  • 问题描述 1. 运行migration mysql2dws链路的实时同步作业,DDL同步中对增加列操作设置为“正常处理”。 2. 在目的端DWS表有数据的场景下,源端MySQL执行DDL语句,添加带非空约束的列,默认值为空字符串,如:alter table test add column t_col varchar(30) not null default '' 3. migration作业产生异常,报错执行DDL失败,失败原因为:column "t_col" contains null values。
  • 原因分析 查看日志提示报错信息为“Array element access needs an index starting at 1 but was 0”,即数组下标必须从1开始,a[1]表示数组中的第一个元素。 查看该CDM实时作业:配置源端为Kafka,目的端为DLI字段映射,赋值来源为“源表字段”,赋值框使用kafka消息中的嵌套json数组写入方式为a[0]。由于在字段映射使用源表字段对目标列进行赋值时,数组下标必须从1开始(表示数组的第一个元素),如果误用了下标0,那么作业会运行失败,故发现该问题为赋值数组下标设置错误导致,需重新设置。 图2 原有参数配置
  • 解决方案 对于不同的数据源其使用的端口也不尽相同,具体可通过查看各数据源官方文档确定具体端口。 下表提供部分数据源端口情况,仅供参考。 表1 数据源使用端口概览 数据源 涉及端口 MySQL 3306 DWS 8000 PostgreSQL 5432 Oracle 1521 Kafka 非安全:9092/9094 安全:9093/9095 MRS Hudi MRS Hudi所使用端口较为复杂,具体请参考《MRS集群服务常用端口列表》。 图1 MRS Hudi安全组规则示例
  • 解决方案 关系建模或维度建模修改字段更新表后,但实际上数据库中物理表并无变化,这是因为未对数据表更新方式做配置,此选项默认为“不更新”。 配置数据表更新方式操作如下: 在DataArts Studio控制台首页,选择实例,单击“进入控制台”,选择对应工作空间的“数据架构”模块,进入数据架构页面。 在数据架构控制台,单击左侧导航树中的“配置中心”。 单击“功能配置”页签。 配置“数据表更新方式”选择为“依据DDL更新模板”或“重建数据表”。 不更新:不更新数据库中的表。 依据DDL更新模板:依据DDL模板管理中配置的DDL更新模板,更新数据库中的表,但能否更新成功是由底层数仓引擎的支持情况决定的。由于不同类型的数仓支持的更新表的能力不同,在数据架构中所做的表更新操作,如果数仓不支持,则无法确保数据库中的表和数据架构中的表是一致的。例如,DLI类型的表更新操作不支持删除表字段,如果在数据架构的表中删除了表字段,则无法在数据库中相应的删除表字段。 如果线下数据库支持更新表结构语法,可以在DDL模板配置对应语法,之后更新操作就可以通过DataArts Studio管控;如果线下数据库不支持更新,那只有通过重建这种方式更新。 重建数据表:先删除数据库中已有的表,再重新创建表。选择该选项可以确保数据库中的表和数据架构中的表是一致的,但是由于会先删除表,因此一般建议只在开发设计阶段或测试阶段使用该选项,产品上线后不推荐使用该选项。 单击“确定”,完成配置。
  • 可能原因 DataArts Studio基于DAYU系统角色+工作空间角色实现授权的能力。为使IAM用户权限正常,IAM用户所在的用户组需要在IAM控制台中被授予DAYU User或DAYU Administrator的系统角色,另外也必须确保DAYU User角色的IAM用户已在对应的DataArts Studio工作空间中被设置为对应的工作空间角色。 如果您只给用户配置了DAYU User系统角色,未配置工作空间角色,则会出现无法查看工作空间的报错。
共99269条