华为云用户手册

  • 代码示例 使用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();}}
  • 原因分析 确认 MRS 集群的JdbcServer是多实例模式还是多租模式。 如果是多实例模式,跳转3。 否则跳转2。 多租户模式下,确认其他租户的作业是否正常。 如果所有租户的作业执行spark sql都有问题,跳转3。 否则,跳转4。 进一步确认:用dlf建个脚本,选择直连连接,执行一条spark sql,看是否报time out的错(甚至可能数据库都list不出来)。如果有以上现象,大概率是MRS集群的jdbc server出了问题。 单租户执行不了spark sql,则多半是队列资源限制,打开yarn,搜索租户的队列,查看Spark2x-JD BCS erver2x的yarn任务,此时可能会搜索不到yarn任务,或者State为ACCEPTED,这两种情况都是资源不足起不了yarn任务的现象。打开yarn的schedule,查看队列资源,关注以下几个参数: Used Resources: 已使用的内存与CPU核数 Max Resources:队列中最大可供使用的内存与CPU核数 Used Application Master Resources: 已使用的AM资源 Max Application Master Resources: 队列中最大可供使用的AM资源 通过对比基本就能确定是哪个资源不足导致yarn任务执行异常。
  • 解决方法 单击服务列表,搜索“MRS”,进入MRS控制台。 单击集群名称进入“现有集群”页面,查询弹性ip,如下图所示。 通过弹性IP地址,登录MRS集群后台。 用户名:admin 密码:创建集群时的密码 执行ip a | grep wsom命令查询MRS集群的浮动ip(wsom标志),如下图所示。 返回创建MRS连接界面,输入查询到的IP,创建连接成功。 创建MRS数据源连接时,认证类型要与MRS集群是否开启KERBEROS保持一致。
  • 原因分析 集群并发数到达上限 联系SRE查看cdm后台日志:/var/log/cdm/local/framework.log,搜索关键字:cluster running task,如果运行的并发数与available的并发数一致,则说明此时并发数已到达集群上限。 集群内存使用达到阈值 联系SRE查看cdm后台日志:/var/log/cdm/local/framework.log,搜索关键字:memory usage exceeds threshold,如果此时集群在不断打此日志,则说明堆内存使用已经超过75%,集群可能有oom的风险。
  • 故障分析 根据报错分析,考虑是客户侧字段类型转换存在问题,将值为"false"的bool类型转为int类型报错。进一步排查作业配置第二步,字段映射界面,查看对应关系。 根据上一步字段映射分析,其中"support_gpu_instancing"字段源端为TINYINT类型,源端值为"0"或"1",实际是"false"或"true"。迁移到目的端INT类型的字段中会报错,提示类型转换错误,因为Mysql会自动识别将"0"或"1"转换为"false"或"true"。
  • 故障分析 排查客户CDM昨天日志报错发现报错: 2021-09-29 10:35:32,638 ERROR LocalJobRunner Map Task #13 #loader [org.apache.sqoop.connector.hive.hiveWriter.HiveOrcWriter:83] Create file system error. java.nio.file.AccessDeniedException: obs-itotshujuruhu-bingxing-fangcongyang: doesBucketExist on obs-itotshujuruhu-bingxing-fangcongyang: com.obs.services.exception.ObsException: Error message:Request Error.OBS servcie Error Message. -- ResponseCode: 403 根据报错“hiveWriter.HiveOrcWriter:83] Create file system error”以及“Error.OBS servcie Error Message. -- ResponseCode: 403”考虑是Hive同步表到OBS目录报错。用户配置连接器时候,没有打开OBS开关。 检查连接器配置,发现没有打开开关,参数含义是“是否支持OBS存储,如果Hive表数据存储在OBS,需要打开此开关”。
  • CDM可以跨账户使用吗? CDM不支持跨账户使用,可以通过授权给同一账户IAM子用户使用。 IAM用户授权操作步骤如下: 创建用户组并授权 在IAM控制台创建用户组,并授予CDM集群只读权限“CDM ReadOnlyAccess”。 创建用户并加入用户组 在IAM控制台创建用户,并将其加入1中创建的用户组。 用户登录并验证权限 新创建的用户登录控制台,切换至授权区域,验证权限: 在“服务列表”中选择“ 云数据迁移 服务”,进入CDM主界面查看集群,若未提示权限不足,表示“CDM ReadOnlyAccess”已生效。 在“服务列表”中选择除CDM服务外的任一服务,若提示权限不足,表示“CDM ReadOnlyAccess”已生效。 父主题: 通用类
  • 故障分析 整库迁移每个表中数据平均2~5亿条。源端10分钟会更新一次数据。 CDM不支持实时迁移,但是支持定时迁移,用户10分钟就会有批量数据更新,考虑是迁移任务没有完成,源库已经更新,回滚超时。 Oracle报错ORA-01555,数据迁移如果做整表查询,并且查询时间较长时,这个过程有其他用户进行频繁commit操作,Oracle的RBS还比较小,就有可能出现这个问题,详细分析可以参考帖子:https://blog.csdn.net/SongYang_Oracle/article/details/6432182。
  • 原因分析 查看后端日志报:org.postgresql.util.PSQLException: ERROR: relation "表名" does not exist。 怀疑是CDM 集群开启沙箱所导致的,后端对集群取消沙箱,重启CDM 集群后问题依然存在。 查看CDM迁移作业,源端数据库表名全部为小写,但是迁移的表中是包含有大写字母,将所要迁移的表名跟数据库中保持一致,目的端字段就可以映射出来了,问题解决。
  • 解决方案 优先联系DBA修改表结构,将需要过滤的列配置为索引列,然后重试。 如果由于数据不离散,导致还是失败请参考2~4,通过增大JDBC超时时间解决。 根据作业找到对应的MySQL连接名称,查找连接信息。 图2 连接信息 单击“连接管理”,在“操作”列中,单击“连接”进行编辑。 图3 连接 打开高级属性,在“连接属性”中建议新增“connectTimeout”与“socketTimeout”参数及参数值,单击“保存”。 图4 编辑高级属性
  • 问题描述 数据库中存储的是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。
  • 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均可帮助用户轻松应对各种数据迁移场景,包括数据上云,云上数据交换,以及云上数据回流本地业务系统。 父主题: 通用类
  • 解决方案 如果源端网络不稳定,可以使用分片重试能力多次执行作业,可能需要调整作业配置。 如作业配置了分片数,或者源端为分区表,且作业配置了按表分区抽取,则单击更多-分片重试,重跑失败分片(比如配置了100个分片,上次执行到50个分片报错,则单击失败重试后,仅会执行剩余50个分片)。 如且源端非分区表,作业未配置分片数,建议调大作业分片数,再重新执行作业,后续再发生异常通过失败重试断点续传。 如源端为分区表,且未配置按表分区抽取,建议配置按表分区抽取后,重新执行作业,后续再发生异常通过失败重试断点续传。
  • 解决方案 用户的MRS集群是1.8.1,CDM为2.6.0。 报错看CDM封装的Hive SDK无法识别Hive数据源, 但Hive连接器测试连通性是正常的,于是仔细检查Hive的连接器配置的参数。 安全集群MRS Manager用户、用户组和角色配置都正确,发现Hive版本配置的为HIVE_3_X。 由于MRS1.8.1集群hive版本为1.2.1,故应该选择hive_1_X。正确修改连接器配置,重新创建作业正常。
  • 故障分析 作业配置中源端目标端均通过where语句多条件过滤,并非索引列,查询会全表扫描,且数据量在上亿行,数据量庞大,导致JDBC数据库连接失败,读取数据超时,进而导致sqoop异常,作业失败。 迁移作业是CDM作为客户端先从源数据中抽取部分数据,写到目标端,再进行下一次部分数据抽取,写入目标端,往复执行,直到抽取到写入完成。因此可以添加高级属性:socketTimeout 参数,保证在每次抽取写入数据间隔,CDM一直保持正常会话。
  • 解决方案 查询后台日志,报错为连接超时,截图如下,可能是安全组限制导致。安全组全部放通进行验证,连通性测试成功。 针对FTP服务器的防火墙来说,必须允许以下通讯才能支持主动方式FTP: 1. 任何大于1024的端口到FTP服务器的21端口(客户端初始化的连接)。 2. FTP服务器的21端口到大于1024的端口(服务器响应客户端的控制端口)。 3. FTP服务器的20端口到大于1024的端口(服务器端初始化数据连接到客户端的数据端口)。 4. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)。
  • 操作步骤 找一台Windows机器作为网关机,该机器同时配置内网和外网IP。通过以下测试来确保网关机器的服务要求: 在该机器上ping内网MySQL地址可以ping通,例如:ping 192.168.1.8。 在另外一台可上网的机器上ping网关机的公网地址可以ping通,例如ping 202.xx.xx.10。 下载端口映射工具IPOP,在网关机上安装IPOP。 运行端口映射工具,选择“端口映射”,如图2所示。 本地地址、本地端口:配置为网关机的公网地址和端口(后续在CDM上创建MySQL连接时输入这个地址和端口)。 映射地址、映射端口:配置为内网MySQL的地址和端口。 图2 配置端口映射 单击“增加”,添加端口映射关系。 单击“开始映射”,这时才会真正开始映射,接收数据包。 至此,就可以在CDM上通过弹性IP读取本地内网MySQL的数据,然后导入到云服务DWS中。 CDM要访问本地数据源,也必须给CDM集群配置EIP。 一般云服务DWS默认也是只允许VPC内部访问,创建CDM集群时,必须将CDM的VPC与DWS配置一致,且推荐在同一个内网和安全组,如果不同,还需要配置允许两个安全组之间的数据访问。 端口映射不仅可以用于迁移内网数据库的数据,还可以迁移例如SFTP服务器上的数据。 Linux机器也可以通过IPTABLE实现端口映射。 内网中的FTP通过端口映射到公网时,需要检查是否启用了PASV模式。这种情况下客户端和服务端建立连接的时候是走的随机端口,所以除了配置21端口映射外,还需要配置PASV模式的端口范围映射,例如vsftp通过配置pasv_min_port和pasv_max_port指定端口范围。
  • 原因分析 云搜索服务 对于时间类型有一个特殊处理:如果存储的时间数据不带时区信息,在Kibana可视化的时候,Kibana会认为该时间为GMT标准时间。 在各个地区会产生日志显示时间与本地时区时间不一致的现象,例如,在东八区某地,日志显示时间比本地时区时间少8个小时。因此在CDM迁移数据到 云搜索 服务的时候,如果是通过CDM自动创建的索引和类型(例如图2中,目的端的“date_test”和“test1”在云搜索服务中不存在时,CDM会在云搜索服务中自动创建该索引和类型),则CDM默认会将时间类型字段的格式设置为“yyyy-MM-dd HH:mm:ss.SSS Z”的标准格式,例如“2018-01-08 08:08:08.666 +0800”。 图2 作业配置 此时,从其他数据源导入数据到云搜索服务时,如果源端数据中的日期格式不完全满足标准格式,例如“2018/01/05 15:15:46”,则CDM作业会执行失败,日志提示无法解析日期格式。需要通过CDM配置字段转换器,将日期字段的格式转换为云搜索服务的目的端格式。
  • 解决方案 编辑作业,进入作业的字段映射步骤,在源端的时间格式字段后面,选择新建转换器,如图3所示。 图3 新建转换器 转换器类型选择“表达式转换”,目前表达式转换支持字符串和日期类型的函数,语法和Java的字符串和时间格式函数非常相似,可以查看表达式转换了解如何编写表达式。 本例中源时间格式是“yyyy/MM/dd HH:mm:ss”,要将其转换成“yyyy-MM-dd HH:mm:ss.SSS Z”,需要经过如下几步: 添加时区信息“+0800”到原始日期字符串的尾部,对应的表达式为:value+" +0800"。 使用原始日期格式来解析字符串,将字符串解析为一个日期对象。可以使用DateUtils.parseDate函数来解析,语法是:DateUtils.parseDate(String value, String format)。 将日期对象格式化成目标格式的字符串,可以使用DateUtils.format函数来格式化,语法是DateUtils.format(Date date, String format)。 因此本例中串起来完整的表达式是:DateUtils.format(DateUtils.parseDate(value+" +0800","yyyy/MM/dd HH:mm:ss Z"),"yyyy-MM-dd HH:mm:ss.SSS Z"),如图4所示。 图4 配置表达式 保存转换器配置,再保存并运行作业,可解决云搜索服务的解析日期格式失败问题。
  • CDM有哪些安全防护? CDM是一个完全托管的服务,提供了以下安全防护能力保护用户数据安全。 实例隔离:CDM服务的用户只能使用自己创建的实例,实例和实例之间是相互隔离的,不可相互访问。 系统加固:CDM实例的操作系统进行了特别的安全加固,攻击者无法从Internet访问CDM实例的操作系统。 密钥加密:用户在CDM上创建连接输入的各种数据源的密钥,CDM均采用高强度加密算法保存在CDM数据库。 无中间存储:数据在迁移的过程中,CDM只处理数据映射和转换,而不会存储任何用户数据或片段。 父主题: 通用类
  • 如何调整抽取并发数 集群最大抽取并发数的设置与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 作业抽取并发数配置
  • 原因分析 初步怀疑是新老集群部分参数修改不兼容导致的,通过查看老集群导出的作业json文件,包含throttlingConfig.concurrentSubJobs参数(并发子作业数,新集群已取消这个配置项)。 让客户在导出的json 文件中将删除以下配置项,重新导入作业到新集群,导入成功。 {"name":"throttlingConfig.concurrentSubJobs","value":"10"},
  • 如何调整抽取并发数 集群最大抽取并发数的设置与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 作业抽取并发数配置
  • 处理方法 若未安装Go,可通过“安装Go语言 ”部署步骤进行安装。 正确配置相关环境变量。 由于当前启动/停止操作为“no_login”方式,若系统为Linux系统,Go语言为手动安装,还需在以下文件中增加环境变量: Ubuntu: ~/.bashrc 和 ~/.profile Centos: ~/.bashrc 和 ~/.bash_profile 所需环境变量配置示例如下: export GOROOT=/usr/local/go/go_install_dir/go export GOPATH=/usr/local/go/go_workpath export PATH= $GOROOT/bin:$PATH
  • 云耀云服务器与普通ECS、普通VPS功能对比 表2 云耀云服务器与普通ECS、普通VPS功能对比 产品 云耀云服务器 普通ECS 普通VPS 客户群体 中小企业、开发者、学生 大中型企业用户 有端到端技术实力的用户 应用场景 轻量级应用场景: 轻量企业OA、博客、论坛 云端开发测试环境 跨境电商管理,网站建设 架构复杂的应用场景: 高并发网站,复杂分布集群 大型游戏,大数据分析 视频解码,AI应用 各类自建应用: 轻量级场景 架构复杂的应用场景 自定义场景 技术能力要求 低 中 高 运维能力要求 低 中 高 建设成本 低 中 高 售卖方式 高性价比套餐,整体更优惠 灵活选配资源,独立叠加计费 购买全部资源 应用构建 部分场景开箱即用 手动搭建 全流程手动搭建 管理控制台 一站式整合,独立且简化 面向全业务,较多细节 全流程手动搭建 镜像配置 丰富的应用镜像 丰富的应用镜像 系统镜像 网络配置 自动创建 手动配置 全流程手动配置 华为生态 支持 支持 不支持
  • 云耀云服务器与弹性云服务器的购买和配置区别 表1 云耀云服务器与弹性云服务器的购买和配置区别 产品优势 特点 云耀云服务器 HECS 弹性云服务器 ECS 更轻量的业务场景 适用的场景 适用于网站搭建、开发测试环境、企业应用等低负载应用场景。 全业务场景,典型场景有:网站应用、企业电商、图形渲染、数据分析、高性能计算等高负载应用场景。 更优惠的计费方式 计费模式 包年/包月 包年/包月 按需计费 竞价计费 规格 按套餐售卖,提供多种vCPUs | 内存比的套餐类型。 分为入门型、基本型、进阶型,或自定义配置HECS的规格。请参考配置选型。 多种规格实例类型和规格。 ECS实例类型推荐参考ECS智选推荐。 磁盘 购买HECS时,以控制台套餐实际情况为准。 新增磁盘支持如下磁盘类型: 高IO 超高IO 支持选择多种磁盘类型。 弹性云服务器支持使用的磁盘类型,请参见云硬盘。 网络 自动分配弹性公网IP。 购买HECS时如果选择的是自定义配置,带宽类型选择“暂不配置”,那么支持在购买完成后挂载弹性公网IP。 默认BGP,以控制台套餐实际情况为准。 带宽类型为按带宽计费。 自定义是否绑定弹性公网IP。 线路类型可选。 带宽类型分为按带宽计费、按流量类计费、共享带宽。 更简单的使用体验 产品优势 易搭建、更实惠、易维护、更安全 稳定可靠、安全保障、软硬结合、弹性伸缩 镜像 创建HECS:公共镜像、市场镜像,基本覆盖主流应用场景,满足用户基本需求。 镜像种类、数目丰富,包括:公共镜像、私有镜像、共享镜像、市场镜像。 鉴权方式 密码。 密码、密钥对。 集成的云产品 主机安全 云监控 (支持在HECS控制台设置告警规则) 主机安全 云监控 集成的应用管理 以高频使用的功能为例: CloudShell登录Linux云服务器。 磁盘挂载、扩容、新增。 安全组配置。 添加网卡、删除网卡、切换VPC。 支持查看各区域HECS资源分布。 应用搭建指导。 以高频使用的功能为例: CloudShell登录Linux云服务器。 磁盘挂载、扩容、新增。 安全组配置。 添加网卡、删除网卡、切换VPC。 支持查看各区域ECS资源分布。
  • 云耀云服务器与弹性云服务器区别 与弹性云服务器相比,云耀云服务器简化了购买ECS过程中的一些高级配置,一站式融合购买、登录、磁盘配置、网络配置、云监控、主机安全等多种功能,帮助您更加便捷高效的部署、配置和管理应用。 HECS底层使用的物理硬件资源与ECS一致,同CPU、内存的HECS与ECS计算能力在同一标准。 云耀云服务器与弹性云服务器的主要区别: 云耀云服务器:云耀云服务器是可以快速搭建简单应用的新一代云服务器,按已搭配的套餐售卖,适用于低负载应用场景,可以更加便捷、更加高效的部署、配置和管理应用。 高负载应用场景推荐使用弹性 云服务器ECS ,性能更稳定。 弹性云服务器:弹性云服务器提供多种计费模式、规格类型、镜像类型、磁盘类型,针对不同的业务场景,自定义配置弹性云服务器。
  • 什么是区域、可用区? 区域和可用区用来描述数据中心的位置,您可以在特定的区域、可用区创建资源。 区域(Region):从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 可用区(AZ,Availability Zone):一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 图1阐明了区域和可用区之间的关系。 图1 区域和可用区 目前,华为云已在全球多个地域开放云服务,您可以根据需求选择适合自己的区域和可用区。更多信息请参见华为云全球站点。
  • 云硬盘类型 云耀云服务器使用的云硬盘类型有如下几种: 高IO:该类型云硬盘的最大IOPS可达5000,最低读写时延为1ms,适用于主流的高性能、高可靠应用场景,例如企业应用、中小型开发测试以及Web服务器日志等。 超高IO:该类型云硬盘的最大IOPS可达33000,最低读写时延为1ms,适用于超高IO,超大带宽的读写密集型应用场景,例如高性能计算应用场景,用来部署分布式文件系统,或者I/O密集型应用场景,用来部署各类NoSQL/关系型数据库。
  • 计费项 云耀云服务器根据您选择的规格和使用时长计费。 表1 计费项信息 计费项 计费说明 HECS实例 实例类型及规格(vCPU,内存),购买时长以及所购买的实例数量。 具体请参考云耀云服务器产品价格详情。 镜像 目前华为云中国站的公共镜像中,云耀云服务器使用的公共镜像暂时免费。如果选择市场镜像,以云商店价格为准。 说明: Windows操作系统为市场镜像,该服务由第三方提供。为方便用户选用,在公共镜像中提供入口。具体收费以镜像供应商提供的信息为准。 系统盘(必选) 默认系统盘40GB~80GB(需购买),支持包周期购买方式,具体计费请参考云硬盘计费。建议云硬盘购买周期与云耀云服务器保持一致。 数据盘(可选) 数据盘购支持包周期方式购买和添加,具体参考云硬盘计费。 公网IP(可选) 如有互联网访问需求,您需要购买公网IP,具体请参考公网IP计费。 带宽(可选) 可按带宽计费,具体请参考带宽计费。
共100000条