华为云用户手册

  • 约束与限制 请确保云服务器所在的子网已开启IPv6功能。 若云服务器所在子网未开启IPv6功能,需参考开启云服务器的IPv6功能进行开启,开启后不允许关闭。 请确保云服务器规格支持IPv6功能。 不同区域、不同可用区支持IPv6双栈的云服务器规格不同。ECS是否支持IPv6双栈,请选择区域、可用区后,以控制台的显示为准,查询方法如下图所示。 图1 查询支持IPv6的ECS规格 当ECS规格列表中包含“IPv6”参数,且取值为“是”时,表示该ECS规格支持IPv6。 规格是否支持IPv6由“可用区”和“规格”两个参数决定。 如果设置“可用区”后,规格列表中不显示“IPv6”参数或参数值为“否”,表示当前规格不支持IPv6。 请确保创建云服务器时已选择“自动分配IPv6地址”。 图2 选择“自动分配IPv6地址” 云服务器启动之后动态插拔的网卡不支持IPv6地址动态获取功能。 仅弹性云服务器支持IPv6双栈,裸金属服务器不支持。 同一个网卡上,只能绑定一个IPv6地址。 云服务器网络配置需处于正常状态。 检查网络配置是否正常的方法,请参见检查云服务器网络配置状态。 如果网络配置不正常,请提交工单获取技术支持。
  • 操作导航 Windows系统:本文以Windows 2012版本、Windows 2008版本为例,介绍Windows操作系统启用IPv6的方法,如表1所示。 Linux系统:本文提供了自动配置、手动配置两种方式启用IPv6,推荐您使用自动配置方法,如表1所示。 对于CentOS 6.x和Debian操作系统,云服务器内部配置IPv6自动获取功能之后,将该云服务器制作为私有镜像,使用该镜像在非IPv6网络环境中创建云服务器时,由于等待获取IPv6地址超时,导致云服务器启动较慢,此时您可以参考设置云服务器获取IPv6地址超时时间操作。 表1 不同操作系统启用IPv6操作指导 操作系统 方式 操作指导 Windows 2012 自动配置启用IPv6 Windows 2012操作系统 Windows 2008 自动配置启用IPv6 Windows 2008操作系统 Linux 自动配置启用IPv6(推荐) Linux操作系统(自动配置启用IPv6) Linux 手动配置启用IPv6 Linux操作系统(手动配置启用IPv6)
  • Linux操作系统(自动配置启用IPv6) ipv6-setup-xxx工具能为开启IPv6协议栈的Linux操作系统自动配置动态获取IPv6地址。其中,xxx表示工具系列:rhel或debian。 您也可以参考Linux操作系统(手动配置启用IPv6)手动配置启用IPv6。 ipv6-setup-xxx工具运行时会自动重启网络服务,导致网络短暂不可用。 CentOS 6.x和Debian操作系统的云服务器内部配置IPv6自动获取功能之后,将该云服务器制作为私有镜像,使用该镜像在非IPv6网络环境中创建云服务器时,由于等待获取IPv6地址超时,导致云服务器启动较慢,您可以参考设置云服务器获取IPv6地址超时时间设置获取IPv6地址超时时间为30s,然后再重新制作私有镜像。
  • 操作场景 IPv6的使用,可以有效弥补IPv4网络地址资源有限的问题。如果当前云服务器使用IPv4,那么启用IPv6后,云服务器可在双栈模式下运行,即云服务器可以拥有两个不同版本的IP地址:IPv4地址和IPv6地址,这两个IP地址都可以进行内网/公网访问。 按照约束与限制中的网络环境要求创建的云服务器,有些不能动态获取到IPv6地址,需要进行相关配置才行。如果云服务器使用的是公共镜像,则支持情况如下: Windows公共镜像默认已开启IPv6动态获取功能,无需配置,文中的Windows 2012操作系统和Windows 2008操作系统部分供您验证、参考。 Linux公共镜像开启动态获取IPv6功能时,需要先判断是否支持IPv6协议栈,再判断是否已开启动态获取IPv6。目前,所有Linux公共镜像均已支持IPv6协议栈。
  • 事件状态 系统上报的事件状态如表2所示,您可以根据状态判断系统上报事件的进展,也可以通过状态进行事件筛选。 表2 事件状态 类型 描述 待授权 需要用户对事件操作进行授权, 授权时支持指定开始时间, 系统将会在一定时间内完成操作,详细内容请参见响应事件。 待执行 等待系统资源调度中。 执行中 系统已完成资源调度, 正在修复中。 执行成功 系统已完成事件执行。 请验证业务受损情况, 如遇异常,请联系技术支持。 执行失败 系统自动修复失败。 取消 该事件已被系统取消。
  • 事件类型 系统支持上报的事件如表1所示。 表1 支持系统上报的事件 事件类型 事件说明 事件影响 用户侧处理建议 实例重部署 当系统检测到ECS实例的底层宿主机异常,计划将ECS实例部署到新主机时,会自动上报实例重部署事件。 实例重部署过程中,云服务器将会有短暂时间不可用。 系统会在计划事件执行时间前24~72小时发送该系统事件通知。 须知: 对于包含本地盘的实例,会丢失所有本地盘上的数据。 您可以根据业务需要选择如下处理方式,并在事件处理完成后,及时验证业务受损情况, 如遇问题,请联系技术支持。 响应实例重部署事件 建议您在授权时选择业务低谷期为开始时间,如不指定将会以当前时间为开始时间。 本地盘换盘 系统检测到ECS实例(含裸金属类型实例)的底层宿主机存在磁盘故障风险,会对受影响的ECS实例自动生成本地盘换盘事件。 本地盘换盘会丢失本地盘上的数据。 您可以根据业务需要选择如下处理方式,并在事件处理完成后,及时验证业务受损情况, 如遇问题,请联系技术支持。 须知: 本地盘换盘操作会丢失本地盘上的数据,如果无需保留本地盘数据,可根据业务需要选择如下处理方式。 重部署:会丢失所有本地盘数据 授权换盘:会丢失故障本地盘数据 建议您在授权时选择业务低谷期为开始时间,如不指定将会以当前时间为开始时间。 通常会在开始时间后5个工作日内完成本地盘换盘,请耐心等待。 实例迁移 当系统检测到ECS实例的底层宿主机异常,需要进行重启、关机、下线等系统维护时,计划对ECS实例进行迁移,会自动上报实例迁移事件。 系统会先尝试对云服务器进行热迁移,如遇异常,则会触发HA机制(云服务器将会有短暂时间不可用)。 建议您在事件处理完成后,及时验证业务受损情况, 如遇问题,请联系技术支持。 系统维护 系统检测到ECS实例(含裸金属类型实例)的宿主机存在软硬件故障风险,计划对受影响的实例进行维护操作,会自动生成系统维护事件。 系统维护过程中,宿主机可能会进入下电状态,云服务器不可用。 您可以根据业务需要选择如下处理方式,并在事件处理完成后,及时验证业务受损情况, 如遇问题,请联系技术支持。 响应系统维护事件 建议您在授权时确保实例的业务已离线并选择业务低谷期为开始时间,如不指定将会以当前时间为开始时间。 不同故障系统维护的耗时不同。通常会在授权开始时间后5个工作日内完成系统维护,请耐心等待。
  • 后续任务 部分操作系统无法识别新添加的网卡,需手动激活网卡。下面以Ubuntu系统为例介绍具体激活网卡的操作步骤,其他操作系统请自行完成相关操作,如有问题,请参见对应操作系统的官网指导或手册来完成操作。 在弹性云服务器所在行的“操作”列下,单击“远程登录”。 登录弹性云服务器。 执行如下命令,查看网卡名称。 ifconfig -a 例如,查询到的网卡名为:eth2。 执行如下命令,进入相应目录。 cd /etc/network 执行如下命令,打开interfaces文件。 vi interfaces 在interfaces文件中,增加类似如下信息。 auto eth2 iface eth2 inet dhcp 执行如下命令,保存并退出interfaces文件。 :wq 执行命令ifup ethX或/etc/init.d/networking restart,使新增网卡生效。 上述命令中的X为具体的网卡名称序号,例如,ifup eth2。 执行如下命令,查看回显信息中是否包括2查询到的网卡。 ifconfig 例如,回显信息中包含网卡eth2。 是,表示新增网卡生效,结束。 否,表示新增网卡未生效,执行9。 登录管理控制台,在弹性云服务器所在行的“操作”列下,选择“更多”,并单击“重启”。 再次执行命令ifconfig,查看回显信息中是否包括2查询到的网卡。 是,结束。 否,请联系客服获取技术支持。
  • 修订记录 发布日期 修订记录 2024-06-18 第一百零八次正式发布。 弹性云服务器支持的操作系统监控指标(安装Agent),新增DAVP监控指标。 2024-05-22 第一百零七次正式发布。 新增回收站管理(公测)。 2024-05-21 第一百零六次正式发布。 提升云服务器安全性方法概述,新增云堡垒机介绍。 新增云堡垒机。 2024-05-14 第一百零五次正式发布。 新增通过共享VPC购买ECS。 2024-01-25 第一百零四次正式发布。 修改 默认安全组和规则,修改默认安全组规则。 备份弹性云服务器,增加后续操作。 2024-01-05 第一百零三次正式发布。 新增实例重部署预处理。 2023-10-19 第一百零二次正式发布。 新增 响应系统维护事件 本地盘换盘预处理(裸金属类型实例) 修改 事件概述,新增“授权维护”事件的说明。 2023-10-13 第一百零一次正式发布。 新增通过规格选型引导购买云服务器。 2023-09-20 第一百次正式发布。 新增 响应实例重部署事件 修改 事件概述,修改本地盘换盘事件的修复建议,新增实例重部署事件。 响应本地盘换盘事件,修改操作步骤。 2023-09-08 第九十九次正式发布。 修改操作步骤,涉及: 查看弹性云服务器详细信息(列表视图) 查看云服务器详细信息(精简视图) 导出弹性云服务器列表信息 搜索云服务器 2023-08-25 第九十八次正式发布。 修改 更改安全组,增加批量更改安全组的操作。 搜索云服务器,更新操作步骤。 新增 加入安全组 移出安全组 2023-08-03 第九十七次正式发布。 新增异构类实例安装支持对应监控的CES Agent(Windows)。 2023-07-31 第九十六次正式发布。 新增事件管理。 2023-06-30 第九十五次正式发布。 新增变更规格(批量操作)。 2023-06-15 第九十四次正式发布。 修改 更新一键式重置密码插件安装步骤,涉及: 安装一键式重置密码插件(单台操作) 更新一键式重置密码插件(单台操作) 更新一键式重置密码插件(AOM方式) 更新一键式重置密码插件(批量操作-Windows系统) 下线“更新一键式重置密码插件(批量操作-Linux系统非root用户)” 2023-05-31 第九十三次正式发布。 修改 支持云审计的关键操作,补充支持审计的关键操作列表。 按需计费,补充保证金相关说明。 弹性云服务器支持的操作系统监控指标(安装Agent)、弹性云服务器支持的进程监控指标(安装Agent),补充维度相关信息。 2023-05-27 第九十二次正式发布。 修改 按需计费、竞价计费模式概述,修改关机计费策略。 2023-03-14 第九十一次正式发布。 新增 异构类实例安装支持对应监控的CES Agent(Linux) 2023-02-24 第九十次正式发布。 新增 弹性云服务器支持的进程监控指标(安装Agent) 2023-01-13 第八十九次正式发布。 修改按需转包年/包月,增加按需转包年/包月时,关联资源计费模式转换规则。 2022-12-26 第八十八次正式发布。 修改远程登录Linux弹性云服务器(CloudShell方式),更新前提条件。 2022-12-20 第八十七次正式发布。 新增 启、停弹性云服务器 2022-12-12 第八十六次正式发布。 新增 GPU加速型实例卸载GPU驱动 2022-11-25 第八十五次正式发布。 Tesla驱动及CUDA工具包获取方式,修改CUDA工具包下载地址。 2022-11-15 第八十四次正式发布。 新增开启/关闭超线程。 变更规格通用操作,增加“开启/关闭超线程”操作步骤。 2022-10-27 第八十三次正式发布。 新增 QingTian Enclave管理 2022-08-31 第八十二次正式发布。 新增 更新一键式重置密码插件(AOM方式) 2022-08-29 第八十一次正式发布。 新增 (推荐)GPU加速型实例自动安装GPU驱动(Windows) 获取一键式重置密码插件 2022-08-15 第八十次正式发布。 新增变更规格(性能助手版)。 2022-08-04 第七十九次正式发布。 KVM实例变更为QingTian实例(Windows),新增“检查SCSI驱动”步骤。 2022-07-26 第七十八次正式发布。 新增(推荐)GPU加速型实例自动安装GPU驱动(Linux)。 修改GPU加速型实例安装GRID驱动、Tesla驱动及CUDA工具包获取方式,更新驱动版本。 2022-06-10 第七十七次正式发布。 修改切换操作系统,更新“约束与限制”和“计费规则”。 2022-05-16 第七十六次正式发布。 “启动模板”和“智能购买组”商用,修改: 概述 概述 2022-04-20 第七十五次正式发布。 优化“密码和密钥对”章节: 新增 密码使用场景介绍 密钥对使用场景介绍 通过puttygen.exe工具创建密钥对 导入密钥对 修改 (推荐)通过管理控制台创建密钥对 2022-03-28 第七十四次正式发布。 修改安装一键式重置密码插件(单台操作),补充优化selinux相关的前提条件。 2022-03-07 第七十三次正式发布。 新增搜索云服务器。 修改管理云服务器组,补充故障域相关内容。 2022-01-07 第七十二次正式发布。 新增更新一键式重置密码插件(单台操作)。 2021-11-15 第七十一次正式发布。 修改KVM实例变更为QingTian实例(Windows),修改支持的规格类型。 修改KVM实例变更为QingTian实例(Linux),修改支持的规格类型及操作步骤。 2021-11-02 第七十次正式发布。 修改切换操作系统的约束与限制内容。 2021-09-30 第六十九次正式发布。 新增远程登录Linux弹性云服务器(通过macOS系统主机)。 2021-09-17 第六十八次正式发布。 无公网IP的弹性云服务器访问Internet,修改Linux操作系统的代理主机的操作步骤。 2021-08-23 第六十七次正式发布。 新增提升云服务器安全性方法概述 修改云备份概述,补充备份、快照、镜像有什么区别。 2021-07-28 第六十六次正式发布。 安装一键式重置密码插件(单台操作),修改Linux操作系统卸载插件的操作步骤。 2021-06-30 第六十五次正式发布。 安装一键式重置密码插件(单台操作),补充修改重置密码插件的文件权限的操作步骤。 2021-06-24 第六十四次正式发布。 新增 远程登录Linux弹性云服务器(通过华为云APP) 2021-05-29 第六十三次正式发布。 新增 KVM实例变更为QingTian实例(Windows) KVM实例变更为QingTian实例(Linux) 2021-05-25 第六十二次正式发布。 新增 动态获取IPv6地址,补充Windows 2012操作系统的操作步骤。 2021-05-12 第六十一次正式发布。 新增 启动模板 智能购买组 2021-04-25 第六十次正式发布。 新增 竞价计费模式概述 竞享计费型实例 购买竞享计费型ECS 2021-03-03 第五十九次正式发布。 修改 动态获取IPv6地址,补充支持IPv6的区域和规格。 2021-02-20 第五十八次正式发布。 修改 包年/包月转按需的操作步骤。 2021-02-08 第五十七次正式发布。 修改 更换弹性公网IP补充约束限制。 2020-11-18 第五十六次正式发布。 新增XEN实例变更为KVM实例(Linux-批量自动配置) 2020-09-14 第五十五次正式发布。 修改 弹性云服务器支持的基础监控指标,修改带内网络流入速率、带内网络流出速率、带外网络流入速率、带外网络流出速率。 新增远程登录Linux弹性云服务器(CloudShell方式)。 2020-07-25 第五十四次正式发布。 新增 元数据获取,新增注意事项、防火墙配置示例的操作步骤。 实例自定义数据注入,删除使用明文密码的示例。 2020-05-26 第五十三次正式发布。 新增 主机安全 2020-04-23 第五十二次正式发布。 新增 新增磁盘 解绑弹性公网IP 修改 绑定弹性公网IP 2020-03-18 第五十一次正式发布。 新增远程登录Windows弹性云服务器(RDP文件方式)。 GPU加速型实例安装Tesla驱动及CUDA工具包,优化安装Tesla驱动及CUDA工具包操作指导。 新增GPU驱动概述,介绍GRID驱动和Tesla驱动。 重装操作系统、切换操作系统,修改操作步骤。 2020-01-20 第五十次正式发布。 修改ECS自定义策略,IAM控制台改版,修改权限相关描述及操作。 ECS自定义策略,修改ECS系统权限策略名称。 2020-01-03 第四十九次正式发布。 新增远程登录Windows弹性云服务器(通过macOS系统主机)。 修改创建用户并授权使用ECS。 弹性云服务器支持的基础监控指标,新增监控指标“network_vm_connections”。 2019-12-16 第四十八次正式发布。 新增弹性网卡概述。 新增弹性公网IP概述。 XEN实例变更为KVM实例(Windows),修改安装驱动的操作步骤。 2019-12-03 第四十七次正式发布。 修改 修改ECS自定义策略,新增可视化视图配置自定义策略。 上线“切换虚拟私有云”。 2019-11-01 第四十六次正式发布。 下线“切换虚拟私有云”。 管理云服务器组补充约束与限制。 在控制台重置弹性云服务器密码支持开机重置云服务器密码。 移动“在操作系统内部修改云服务器密码”至常见问题。 移动“未安装重置密码插件且忘记密码时,如何重置密码(Windows)?”至常见问题。 移动“未安装重置密码插件且忘记密码时,如何重置密码(Linux)?”至常见问题。 新增管理项目和企业项目。 更改时区修改设置时区的举例。 2019-10-28 第四十五次正式发布。 修改 XEN实例变更为KVM实例(Windows) XEN实例变更为KVM实例(Linux-自动配置) XEN实例变更为KVM实例(Linux-手动配置) 修改开启网卡多队列功能,Linux云服务器网卡多队列支持列表。 新增“切换虚拟私有云”。 2019-10-17 第四十四次正式发布。 修改 弹性云服务器支持的基础监控指标 查看创建状态 新增 弹性云服务器支持的操作系统监控指标(安装Agent) 2019-09-23 第四十三次正式发布。 修改 开启网卡多队列功能,补充说明Linux操作系统云服务器建议将操作系统内核版本升级至2.6.35及以上。 GPU加速型实例安装Tesla驱动及CUDA工具包,修改安装NVIDIA驱动和CUDA驱动的操作步骤。 修改弹性公网IP的带宽,修改操作场景。 管理云服务器组,补充添加云服务器到云服务器组的注意事项。 2019-09-12 第四十二次正式发布。 新增 更换弹性公网IP,修改操作场景。 2019-09-06 第四十一次正式发布。 修改 配置安全组规则。 在控制台重置弹性云服务器密码。 2019-08-28 第四十次正式发布。 新增 远程登录Windows弹性云服务器(通过移动设备)。 远程登录Linux弹性云服务器(通过移动设备)。 修改 管理云服务器组,添加云服务器到云服务器组补充注意事项。 2019-08-01 第三十九次正式发布。 修改 查看创建状态 查看失败任务 资源与标签 动态获取IPv6地址,修改CentOS 6.3添加ip6tables规则的命令。 2019-07-27 第三十八次正式发布。 新增 查看云服务器详细信息(精简视图) 远程登录Windows弹性云服务器(MSTSC方式)新增“本地Linux操作系统登录Windows云服务器”。 XEN实例变更为KVM实例(Windows) XEN实例变更为KVM实例(Linux-自动配置) 2019-06-30 第三十七次正式发布。 新增 包年/包月计费 按需计费 包年/包月转按需 修改 全文手册结构调整。 下线“查看云服务器详细信息(精简视图)”。 修改重置密码的字符集。 2019-05-30 第三十六次正式发布。 新增 权限管理 修改弹性公网IP的带宽 修改 实例自定义数据注入,新增实例自定义数据注入示例。 删除“故障处理”章节。 远程登录Windows弹性云服务器(MSTSC方式) 2019-04-30 第三十五次正式发布。 修改 变更规格通用操作,补充约束条件。 开启网卡多队列功能 2019-03-25 第三十四次正式发布。 新增 修改云服务器名称 开启网卡多队列功能章节,新增SUSE Enterprise 12 SP3 64bit。 2019-03-18 第三十三次正式发布。 修改 切换操作系统,补充“包年/包月”云服务器切换操作系统约束条件。 2019-03-04 第三十二次正式发布。 修改 元数据获取,修改元数据支持列表。 实例自定义数据注入,补充使用限制。 2019-02-28 第三十一次正式发布。 修改 弹性云服务器支持的基础监控指标,修改弹性云服务器监控指标。 2019-01-18 第三十次正式发布。 增加 GPU加速型实例安装GRID驱动 GPU加速型实例安装Tesla驱动及CUDA工具包。 (推荐使用)安装NVIDIA GPU驱动和CUDA工具包 2018-12-30 第二十九次正式发布。 修改 开启网卡多队列功能 修改FPGA加速型,FPGA加速型云服务器正式商用。 2018-12-06 第二十八次正式发布。 修改 管理云服务器组,支持在弹性云服务器创建成功后,对云服务器组中的弹性云服务器进行添加、移出操作。 2018-11-19 第二十七次正式发布。 增加 购买竞价计费型ECS,竞价计费型实例功能在华南区公测。 购买GPU P1型云服务器 购买GPU P2v型云服务器 2018-11-16 第二十六次正式发布。 增加 动态获取IPv6地址 2018-10-26 第二十五次正式发布。 增加 按需转包年/包月,支持批量转包年/包月操作。 修改 开启网卡多队列功能,更新镜像支持列表。 2018-07-30 第二十四次正式发布。 增加 配额调整 修改 远程登录Linux弹性云服务器(SSH密钥方式)和远程登录Linux弹性云服务器(SSH密码方式),补充CoreOS镜像的登录用户名说明。 6.1-重置密码使用场景介绍(废弃) 更改安全组,支持在操作列下更改安全组。 无公网IP的弹性云服务器访问Internet 弹性云服务器支持的基础监控指标,下线监控指标“系统状态检查失败”。 2018-06-30 第二十三次正式发布。 修改 创建镜像,华南、香港区域支持开机状态下制作镜像。 导出弹性云服务器列表信息,支持导出部分弹性云服务器信息。 切换操作系统,修改前提条件,重装失败的云服务器支持切换操作系统。 2018-05-30 第二十二次正式发布。 增加 购买相同配置云服务器 审计 修改 “密钥管理服务(KMS)”更名为“数据加密服务(DEW)”。 “弹性IP”更名为“弹性公网IP”。 元数据获取,修改“local-ipv4”和“public-ipv4”的描述。 实例自定义数据注入,新增User-Data脚本的介绍。 弹性云服务器支持的基础监控指标,下线监控指标“系统状态检查失败”。 2018-04-30 第二十一次正式发布。 增加 查看失败任务 修改 远程登录Linux弹性云服务器(VNC方式),VNC界面支持复制粘贴功能。 变更规格通用操作,补充规格是否变更成功的查看方法。 查看监控指标 2018-04-05 第二十次正式发布。 增加 Linux弹性云服务器发生kdump时,操作系统无响应 2018-01-30 第十九次正式发布。 增加 上线I3型、H3型弹性云服务器 支持多Project 修改 变更规格通用操作,补充“后续处理”。 无公网IP的弹性云服务器访问Internet 标签概述,系统不再默认创建内置标签。 2017-12-30 第十七次正式发布。 修改 远程登录Windows弹性云服务器(VNC方式),补充FPGA加速型弹性云服务器的登录方法。 2017-12-12 第十六次正式发布。 增加 导出弹性云服务器列表信息,支持导出弹性云服务器列表。 修改 “通用型”弹性云服务器更名为“通用计算型”弹性云服务器。 “高计算型”弹性云服务器根据是否使用IB网卡,划分为“超高性能计算型”和“高性能计算型”弹性云服务器。 实例自定义数据注入,增加使用场景3。 远程登录Linux弹性云服务器(SSH密钥方式),增加使用Xshell进行登录。 未安装重置密码插件且忘记密码时,如何重置密码(Linux),增加lvm的说明。 弹性云服务器支持的基础监控指标,增加支持列表。 2017-11-30 第十五次正式发布。 增加 中国华北区上线S2型弹性云服务器。 在控制台重置弹性云服务器密码 支持标签功能。 修改 “密集存储型”弹性云服务器更名为“磁盘增强型”弹性云服务器。 “图形加速基础型”弹性云服务器更名为“图形加速基础型(G1)”弹性云服务器。 “计算加速型”弹性云服务器更名为“计算加速型(P1)”弹性云服务器。 2017-10-18 第十四次正式发布。 增加 G1型弹性云服务器 修改 重装操作系统,支持实例自定义数据注入。 切换操作系统,支持实例自定义数据注入。 变更规格通用操作中“管理虚拟IP地址”的内容。 在线卸载磁盘 2017-09-30 第十三次正式发布。 增加 中国华南区支持H2型、M2型云服务器 2017-08-15 第十次正式发布。 增加 云服务器组功能 云服务器冻结功能 支持使用加密镜像、加密云硬盘 P1型云服务器 修改 切换操作系统,“包年/包月”方式购买的弹性云服务器,支持切换操作系统。 变更规格通用操作,“包年/包月”方式购买的弹性云服务器,支持添加“包年/包月”方式的云硬盘。 2017-05-25 第九次正式发布。 增加 MTU配置功能 支持给弹性云服务器添加多个安全组 支持数据盘使用共享云硬盘 支持设备类型为SCSI的数据盘 修改 6.1-重置密码使用场景介绍(废弃) 2017-03-06 第八次正式发布。 增加 中国华北区的内存优化型弹性云服务器支持规格m1.8xlarge。 修改 高计算型弹性云服务器支持的规格。 2017-02-15 第七次正式发布。 增加 2017-01-09 第五次正式发布。 修改 重装、切换弹性云服务器操作系统功能,支持更换Keypair。 弹性云服务器初始化和访问弹性云服务器元数据时的安全组规则。 2016-11-28 第四次正式发布。 增加 中国华东区、华南区支持Cloud-init特性 2016-10-29 第三次正式发布。 增加 GPU优化型弹性云服务器 密集存储型弹性云服务器 高计算型弹性云服务器 修改 弹性云服务器的登录方式 2016-07-15 第二次正式发布。 增加 强制关机功能 强制重启功能 切换操作系统功能 修改 重装操作系统功能 2015-10-15 第一次正式发布。
  • 切换须知 切换虚拟私有云支持在开机状态下操作,但是过程中会导致云服务器网络中断。 若弹性云服务器处于开机状态,可能由于网卡有流量访问而导致切换虚拟私有云失败,建议您稍后重试或关机后再进行切换。 切换虚拟私有云后,云服务器子网、私有IP地址、MAC地址、操作系统内网卡名称都会发生改变。 切换虚拟私有云后,请重新配置源/目的检查和虚拟IP地址。 虚拟私有云切换完成后,与网络配置相关的应用软件需要重新配置。与网络相关的服务也需要重新配置,例如ELB、VPN、NAT、DNS等。
  • 约束限制 仅支持处于“运行中”或“关机”状态的弹性云服务器执行此操作。 仅支持单网卡切换虚拟私有云。 切换虚拟私有云前如果重装/切换过云服务器的操作系统,请先登录云服务器,验证重装/切换时设置的密码或密钥是否注入成功。 如果成功登录云服务器,说明密码或密钥注入完成,可继续执行其他操作。 否则说明系统正在注入密码或密钥信息,在此期间请勿对云服务器执行其他操作。 切换虚拟私有云过程中,请勿执行绑定、解绑或更换弹性公网IP等操作,若执行会提示权限不足,无需处理。 如果网卡上有IPv6地址,无法切换虚拟私有云。
  • 创建通用文件系统 在左侧导航栏,选择“通用文件系统”。在页面右上角单击“创建文件系统”。 如图2所示,根据界面提示配置参数,参数说明如表2所示。 图2 创建文件系统 表2 参数说明 参数 说明 备注 区域 必选参数。 租户所在的区域,当前区域请在界面左上方选择。 需要选择和云服务器、VPC终端节点同一个区域。 可用区 同一区域内,电力和网络互相独立的地理区域。 建议选择和云服务器同一个可用区。 名称 用户自定义文件系统的名称。 需全局唯一,不能与已有的通用文件系统名称重复,包括其他用户创建的通用文件系统。文件系统创建成功后,不支持修改名称。 删除通用文件系统后,需要等待30分钟才能创建同名通用文件系统。 只能由英文字母、数字、“_”和“-”组成,创建单个文件系统时输入长度小于等于255个字符,批量创建文件系统时输入长度1-251个字符。 协议类型 文件系统支持的共享访问协议为NFS(暂只支持NFSv3)。 - VPC 需要先选择对应VPC所在的IAM项目,再选择对应的VPC。什么是IAM项目? 需要选择弹性云服务器和VPC终端节点所在的VPC。 云服务器无法访问不在同一VPC下的文件系统,需要选择与云服务器相同的VPC。后续可以在权限列表中补充添加其他VPC。 - 企业项目 该参数针对企业用户使用。创建文件系统时,可以为文件系统添加已有的企业项目。 企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,以及项目内的资源管理、成员管理,默认项目为default。 请从下拉列表中选择所在的企业项目。 说明: 如需使用该功能,请申请开通企业账号。 如需创建新的企业项目,请单击右侧“新建企业项目”或单击控制台页面右上角“企业”进行创建。 更多关于企业项目的信息,请参见《企业管理用户指南》。 配置完成后,单击“立即创建”。 核对文件系统信息,确认无误后单击“提交”。 根据页面提示,返回文件系统列表页面。 您可以看到文件系统显示在文件系统列表中,表示文件系统创建成功。为创建失败,请提交工单进行技术咨询。 图3 通用文件系统创建成功
  • 创建SFS容量型文件系统 在左侧导航栏,选择“SFS容量型”。在页面右上角单击“创建文件系统”。 如图1所示,根据界面提示配置参数,参数说明如表1所示。 图1 创建文件系统 表1 参数说明 参数 说明 备注 区域 必选参数。 租户所在的区域,当前区域请在界面左上方选择。 建议选择和云服务器同一个区域。 可用区 同一区域内,电力和网络互相独立的地理区域。 建议选择和云服务器同一个可用区。 协议类型 文件系统支持的共享访问协议为NFS(暂只支持NFSv3)或CIFS。 NFS协议适合于Linux ECS,CIFS协议适合于Windows ECS。 根据需要选择NFS或CIFS。 虚拟私有云(VPC) 云服务器无法访问不在同一VPC下的文件系统,请选择与云服务器相同的VPC。 说明: 默认VPC下所有的云服务器拥有相同的权限,后续可以对使用的VPC进行修改。 每个文件系统在创建时只可以添加一个VPC。文件系统创建成功后,可通过配置多VPC实现跨VPC、多VPC下的文件共享。 可单击“查看虚拟私有云”查看已有VPC的详细信息或申请新的VPC。 最大容量 需要设置单个文件系统的最大容量,当文件系统的实际使用容量达到该值时,您将无法对文件系统执行写入操作,需要进行扩容。 使用容量范围为1GB~512000GB。 加密 可选参数。 加密针对文件系统加密。可以新创建加密或者不加密的文件系统,无法更改已有文件系统的加密属性。如果设置文件系统加密,则勾选“加密”,界面会出现以下参数: 创建委托 如果当前未授权SFS容量型文件系统服务访问KMS,则该按钮会出现;若已经授权,则该按钮不会出现。 单击“创建委托”以授权SFS容量型文件系统访问KMS,系统会创建名称为“SFSAccessKMS”的委托。当“委托名称”为“SFSAccessKMS”时,表示已经成功授权SFS访问KMS,授权成功后,SFS容量型文件系统可以获取KMS密钥用来加解密文件系统。授权成功后,无需再次授权。 委托名称 委托:委托方通过创建信任关系,给被委托方授予访问其资源的权限。 SFSAccessKMS:当“委托名称”为“SFSAccessKMS”时,表示已经授权SFS容量型文件系统获取KMS密钥,即自定义密钥,用于加解密文件系统。 密钥名称 说明: 当SFSAccessKMS被创建后,才可在当前界面看到“密钥名称”,具体请参见“创建委托”。 密钥名称是密钥的标识,您可以通过“密钥名称”选择需要使用的密钥。您可以选择使用的密钥如下: 默认密钥: 成功授权SFS容量型文件系统访问KMS,系统会创建默认密钥“sfs/default”。 自定义密钥: 即您已有的密钥或者新创建密钥,具体请参见《数据加密服务用户指南》的“创建密钥”章节。 说明: 当您需要使用弹性文件服务加密功能时,需要授权SFS容量型文件系统访问KMS。如果您有授权资格,则可直接授权。如果权限不足,需要联系系统管理员获取安全管理员权限,然后再重新操作,更多详细介绍请参见文件系统加密。 - 名称 用户自定义文件系统的名称。同时创建多个文件系统时,系统自动增加后缀,例如:用户设置名称为“sfs-name”,申请数量为2个时,文件系统的名称将会设置为sfs-name-001,sfs-name-002。 只能由英文字母、数字、“_”和“-”组成,创建单个文件系统时输入长度小于等于255个字符,批量创建文件系统时输入长度1-251个字符。 数量(个) 创建文件系统的数量。 每个云账号可以创建的文件系统的总容量为512000GB,最多可以创建10个文件系统,并且支持同时创建。 当需要创建的文件系统的总容量或数量超出配额限制时,请单击“申请扩大配额”进行申请。 配置完成后,单击“立即创建”。 核对文件系统信息,确认无误后单击“提交”。 根据页面提示,返回文件系统列表页面。 您可以看到文件系统的“状态”显示为“可用”,表示文件系统创建成功。若“状态”为“创建失败”,请联系管理员处理。
  • 前提条件 创建SFS Turbo、SFS容量型和通用文件系统前,确认已有可用的VPC。 若无VPC,可参考《虚拟私有云用户指南》中的“创建虚拟私有云基本信息及默认子网”章节创建VPC。 创建SFS Turbo、SFS容量型和通用文件系统前,确认已有可用的ECS,且ECS归属到已创建的VPC下。 若无ECS,可参考《弹性云服务器快速入门》中的“购买弹性云服务器”章节购买ECS。 创建SFS Turbo文件系统,依赖的服务有:虚拟私有云 VPC、费用中心 BSS、专属存储服务 DSS和弹性云服务器 ECS。需要配置的角色/策略如下: IAM用户设置了SFS Turbo FullAccess权限后,权限集中包含了VPC FullAccess,这是创建文件系统所需要的权限,用户不需额外添加VPC FullAccess 系统策略。 如果需要创建包年包月文件系统,需要设置BSS Administrator权限。 如果需要在专属项目下创建文件系统,需要设置DSS FullAccess 和 ECS FullAccess权限。 创建通用文件系统,依赖的服务有:虚拟私有云 VPC。需要配置的角色/策略如下: IAM用户设置了SFS3 FullAccess权限后,权限集中包含了VPC ReadOnlyAccess,这是创建文件系统所需要的权限,用户不需额外添加VPC ReadOnlyAccess系统策略。
  • 完整示例代码 通过DataFrame API访问 认证用的password硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 # _*_ coding: utf-8 _*_ from __future__ import print_function from pyspark.sql.types import StructType, StructField, IntegerType, StringType from pyspark.sql import SparkSession if __name__ == "__main__": # Create a SparkSession session. sparkSession = SparkSession.builder.appName("datasource-dws").getOrCreate() # Set cross-source connection parameters url = "jdbc:postgresql://to-dws-1174404951-W8W4cW8I.datasource.com:8000/postgres" dbtable = "customer" user = "dbadmin" password = "######" driver = "org.postgresql.Driver" # Create a DataFrame and initialize the DataFrame data. dataList = sparkSession.sparkContext.parallelize([(1, "Katie", 19)]) # Setting schema schema = StructType([StructField("id", IntegerType(), False),\ StructField("name", StringType(), False),\ StructField("age", IntegerType(), False)]) # Create a DataFrame from RDD and schema dataFrame = sparkSession.createDataFrame(dataList, schema) # Write data to the DWS table dataFrame.write \ .format("jdbc") \ .option("url", url) \ .option("dbtable", dbtable) \ .option("user", user) \ .option("password", password) \ .option("driver", driver) \ .mode("Overwrite") \ .save() # Read data jdbcDF = sparkSession.read \ .format("jdbc") \ .option("url", url) \ .option("dbtable", dbtable) \ .option("user", user) \ .option("password", password) \ .option("driver", driver) \ .load() jdbcDF.show() # close session sparkSession.stop() 通过SQL API访问 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # _*_ coding: utf-8 _*_ from __future__ import print_function from pyspark.sql import SparkSession if __name__ == "__main__": # Create a SparkSession session. sparkSession = SparkSession.builder.appName("datasource-dws").getOrCreate() # Createa data table for DLI - associated DWS sparkSession.sql( "CREATE TABLE IF NOT EXISTS dli_to_dws USING JDBC OPTIONS (\ 'url'='jdbc:postgresql://to-dws-1174404951-W8W4cW8I.datasource.com:8000/postgres',\ 'dbtable'='customer',\ 'user'='dbadmin',\ 'password'='######',\ 'driver'='org.postgresql.Driver')") # Insert data into the DLI data table sparkSession.sql("insert into dli_to_dws values(2,'John',24)") # Read data from DLI data table jdbcDF = sparkSession.sql("select * from dli_to_dws").show() # close session sparkSession.stop()
  • 通过DataFrame API访问数据源 连接参数配置 1 2 3 4 5 url = "jdbc:postgresql://to-dws-1174404951-W8W4cW8I.datasource.com:8000/postgres" dbtable = "customer" user = "dbadmin" password = "######" driver = "org.postgresql.Driver" 设置数据 1 dataList = sparkSession.sparkContext.parallelize([(1, "Katie", 19)]) 设置schema 1 2 3 schema = StructType([StructField("id", IntegerType(), False),\ StructField("name", StringType(), False),\ StructField("age", IntegerType(), False)]) 创建DataFrame 1 dataFrame = sparkSession.createDataFrame(dataList, schema) 保存数据到DWS 1 2 3 4 5 6 7 8 9 dataFrame.write \ .format("jdbc") \ .option("url", url) \ .option("dbtable", dbtable) \ .option("user", user) \ .option("password", password) \ .option("driver", driver) \ .mode("Overwrite") \ .save() mode 有四种保存类型: ErrorIfExis:如果已经存在数据,则抛出异常。 Overwrite:如果已经存在数据,则覆盖原数据。 Append:如果已经存在数据,则追加保存。 Ignore:如果已经存在数据,则不做操作。这类似于SQL中的“如果不存在则创建表”。 读取DWS上的数据 1 2 3 4 5 6 7 8 9 jdbcDF = sparkSession.read \ .format("jdbc") \ .option("url", url) \ .option("dbtable", dbtable) \ .option("user", user) \ .option("password", password) \ .option("driver", driver) \ .load() jdbcDF.show() 操作结果
  • 通过SQL API 访问数据源 创建DLI跨源访问 dws 的关联表。 1 2 3 4 5 6 7 sparkSession.sql( "CREATE TABLE IF NOT EXISTS dli_to_dws USING JDBC OPTIONS ( 'url'='jdbc:postgresql://to-dws-1174404951-W8W4cW8I.datasource.com:8000/postgres',\ 'dbtable'='customer',\ 'user'='dbadmin',\ 'password'='######',\ 'driver'='org.postgresql.Driver')") 建表参数详情可参考表1。 插入数据 1 sparkSession.sql("insert into dli_to_dws values(2,'John',24)") 查询数据 1 jdbcDF = sparkSession.sql("select * from dli_to_dws").show() 操作结果
  • 操作前准备 import相关依赖包 1 2 3 from __future__ import print_function from pyspark.sql.types import StructType, StructField, IntegerType, StringType from pyspark.sql import SparkSession 创建会话 1 sparkSession = SparkSession.builder.appName("datasource-dws").getOrCreate()
  • 完整示例代码 通过SQL API访问 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import org.apache.spark.sql.SparkSession; public class java_rds { public static void main(String[] args) { SparkSession sparkSession = SparkSession.builder().appName("datasource-rds").getOrCreate(); // Create a data table for DLI-associated RDS sparkSession.sql("CREATE TABLE IF NOT EXISTS dli_to_rds USING JDBC OPTIONS ('url'='jdbc:mysql://192.168.6.150:3306','dbtable'='test.customer','user'='root','password'='**','driver'='com.mysql.jdbc.Driver')"); //*****************************SQL model*********************************** //Insert data into the DLI data table sparkSession.sql("insert into dli_to_rds values(3,'Liu',21),(4,'Joey',34)"); //Read data from DLI data table sparkSession.sql("select * from dli_to_rds"); //drop table sparkSession.sql("drop table dli_to_rds"); sparkSession.close(); } }
  • 完整示例代码 直接复制如下样例代码到py文件中后,需要注意文件内容中的“\”后面可能会有unexpected character的问题。需要将“\”后面的缩进或是空格全部删除。 通过DataFrame API访问 # _*_ coding: utf-8 _*_ from __future__ import print_function from pyspark.sql.types import StructType, StructField, IntegerType, StringType from pyspark.sql import SparkSession if __name__ == "__main__": # Create a SparkSession session. sparkSession = SparkSession.builder.appName("datasource-rds").getOrCreate() # Set cross-source connection parameters. url = "jdbc:mysql://to-rds-1174404952-ZgPo1nNC.datasource.com:3306" dbtable = "test.customer" user = "root" password = "######" driver = "com.mysql.jdbc.Driver" # Create a DataFrame and initialize the DataFrame data. dataList = sparkSession.sparkContext.parallelize([(123, "Katie", 19)]) # Setting schema schema = StructType([StructField("id", IntegerType(), False),\ StructField("name", StringType(), False),\ StructField("age", IntegerType(), False)]) # Create a DataFrame from RDD and schema dataFrame = sparkSession.createDataFrame(dataList, schema) # Write data to the RDS. dataFrame.write \ .format("jdbc") \ .option("url", url) \ .option("dbtable", dbtable) \ .option("user", user) \ .option("password", password) \ .option("driver", driver) \ .mode("Append") \ .save() # Read data jdbcDF = sparkSession.read \ .format("jdbc") \ .option("url", url) \ .option("dbtable", dbtable) \ .option("user", user) \ .option("password", password) \ .option("driver", driver) \ .load() jdbcDF.show() # close session sparkSession.stop() 通过SQL API访问 # _*_ coding: utf-8 _*_ from __future__ import print_function from pyspark.sql import SparkSession if __name__ == "__main__": # Create a SparkSession session. sparkSession = SparkSession.builder.appName("datasource-rds").getOrCreate() # Createa data table for DLI - associated RDS sparkSession.sql( "CREATE TABLE IF NOT EXISTS dli_to_rds USING JDBC OPTIONS (\ 'url'='jdbc:mysql://to-rds-1174404952-ZgPo1nNC.datasource.com:3306',\ 'dbtable'='test.customer',\ 'user'='root',\ 'password'='######',\ 'driver'='com.mysql.jdbc.Driver')") # Insert data into the DLI data table sparkSession.sql("insert into dli_to_rds values(3,'John',24)") # Read data from DLI data table jdbcDF = sparkSession.sql("select * from dli_to_rds") jdbcDF.show() # close session sparkSession.stop()
  • 完整示例代码 通过SQL API访问MRS的OpenTSDB # _*_ coding: utf-8 _*_ from __future__ import print_function from pyspark.sql.types import StructType, StructField, StringType, LongType, DoubleType from pyspark.sql import SparkSession if __name__ == "__main__": # Create a SparkSession session. sparkSession = SparkSession.builder.appName("datasource-opentsdb").getOrCreate() # Create a DLI cross-source association opentsdb data table sparkSession.sql(\ "create table opentsdb_test using opentsdb options(\ 'Host'='10.0.0.171:4242',\ 'metric'='cts_opentsdb',\ 'tags'='city,location')") sparkSession.sql("insert into opentsdb_test values('aaa', 'abc', '2021-06-30 18:00:00', 30.0)") result = sparkSession.sql("SELECT * FROM opentsdb_test") result.show() # close session sparkSession.stop() 通过DataFrame API访问OpenTSDB # _*_ coding: utf-8 _*_ from __future__ import print_function from pyspark.sql.types import StructType, StructField, StringType, LongType, DoubleType from pyspark.sql import SparkSession if __name__ == "__main__": # Create a SparkSession session. sparkSession = SparkSession.builder.appName("datasource-opentsdb").getOrCreate() # Create a DLI cross-source association opentsdb data table sparkSession.sql( "create table opentsdb_test using opentsdb options(\ 'Host'='opentsdb-3xcl8dir15m58z3.cloudtable.com:4242',\ 'metric'='ct_opentsdb',\ 'tags'='city,location')") # Create a DataFrame and initialize the DataFrame data. dataList = sparkSession.sparkContext.parallelize([("aaa", "abc", 123456L, 30.0)]) # Setting schema schema = StructType([StructField("location", StringType()),\ StructField("name", StringType()),\ StructField("timestamp", LongType()),\ StructField("value", DoubleType())]) # Create a DataFrame from RDD and schema dataFrame = sparkSession.createDataFrame(dataList, schema) # Set cross-source connection parameters metric = "ctopentsdb" tags = "city,location" Host = "opentsdb-3xcl8dir15m58z3.cloudtable.com:4242" # Write data to the cloudtable-opentsdb dataFrame.write.insertInto("opentsdb_test") # ******* Opentsdb does not currently implement the ctas method to save data, so the save() method cannot be used.******* # dataFrame.write.format("opentsdb").option("Host", Host).option("metric", metric).option("tags", tags).mode("Overwrite").save() # Read data on CloudTable-OpenTSDB jdbdDF = sparkSession.read\ .format("opentsdb")\ .option("Host",Host)\ .option("metric",metric)\ .option("tags",tags)\ .load() jdbdDF.show() # close session sparkSession.stop()
  • 完整示例代码 通过SQL API访问MRS HBase 未开启kerberos认证样例代码 # _*_ coding: utf-8 _*_ from __future__ import print_function from pyspark.sql.types import StructType, StructField, IntegerType, StringType, BooleanType, ShortType, LongType, FloatType, DoubleType from pyspark.sql import SparkSession if __name__ == "__main__": # Create a SparkSession session. sparkSession = SparkSession.builder.appName("datasource-hbase").getOrCreate() sparkSession.sql( "CREATE TABLE testhbase(id STRING, location STRING, city STRING) using hbase OPTIONS (\ 'ZKHost' = '192.168.0.189:2181',\ 'TableName' = 'hbtest',\ 'RowKey' = 'id:5',\ 'Cols' = 'location:info.location,city:detail.city')") sparkSession.sql("insert into testhbase values('95274','abc','Jinan')") sparkSession.sql("select * from testhbase").show() # close session sparkSession.stop() 开启kerberos认证样例代码 # _*_ coding: utf-8 _*_ from __future__ import print_function from pyspark import SparkFiles from pyspark.sql import SparkSession import shutil import time import os if __name__ == "__main__": # Create a SparkSession session. sparkSession = SparkSession.builder.appName("Test_HBase_SparkSql_Kerberos").getOrCreate() sc = sparkSession.sparkContext time.sleep(10) krb5_startfile = SparkFiles.get("krb5.conf") keytab_startfile = SparkFiles.get("user.keytab") path_user = os.getcwd() krb5_endfile = path_user + "/" + "krb5.conf" keytab_endfile = path_user + "/" + "user.keytab" shutil.copy(krb5_startfile, krb5_endfile) shutil.copy(keytab_startfile, keytab_endfile) time.sleep(20) sparkSession.sql( "CREATE TABLE testhbase(id string,booleanf boolean,shortf short,intf int,longf long,floatf float,doublef double) " + "using hbase OPTIONS(" + "'ZKHost'='10.0.0.146:2181'," + "'TableName'='hbtest'," + "'RowKey'='id:100'," + "'Cols'='booleanf:CF1.booleanf,shortf:CF1.shortf,intf:CF1.intf,longf:CF2.longf,floatf:CF1.floatf,doublef:CF2.doublef'," + "'krb5conf'='" + path_user + "/krb5.conf'," + "'keytab'='" + path_user+ "/user.keytab'," + "'principal'='krbtest') ") sparkSession.sql("insert into testhbase values('95274','abc','Jinan')") sparkSession.sql("select * from testhbase").show() # close session sparkSession.stop() 通过DataFrame API访问HBase # _*_ coding: utf-8 _*_ from __future__ import print_function from pyspark.sql.types import StructType, StructField, IntegerType, StringType, BooleanType, ShortType, LongType, FloatType, DoubleType from pyspark.sql import SparkSession if __name__ == "__main__": # Create a SparkSession session. sparkSession = SparkSession.builder.appName("datasource-hbase").getOrCreate() # Createa data table for DLI-associated ct sparkSession.sql(\ "CREATE TABLE test_hbase(id STRING, location STRING, city STRING, booleanf BOOLEAN, shortf SHORT, intf INT, longf LONG,floatf FLOAT,doublef DOUBLE) using hbase OPTIONS ( \ 'ZKHost' = 'cloudtable-cf82-zk3-pa6HnHpf.cloudtable.com:2181,\ cloudtable-cf82-zk2-weBkIrjI.cloudtable.com:2181,\ cloudtable-cf82-zk1-WY09px9l.cloudtable.com:2181',\ 'TableName' = 'table_DupRowkey1',\ 'RowKey' = 'id:5,location:6,city:7',\ 'Cols' = 'booleanf:CF1.booleanf,shortf:CF1.shortf,intf:CF1.intf,longf:CF1.longf,floatf:CF1.floatf,doublef:CF1.doublef')") # Create a DataFrame and initialize the DataFrame data. dataList = sparkSession.sparkContext.parallelize([("11111", "aaa", "aaa", False, 4, 3, 23, 2.3, 2.34)]) # Setting schema schema = StructType([StructField("id", StringType()), StructField("location", StringType()), StructField("city", StringType()), StructField("booleanf", BooleanType()), StructField("shortf", ShortType()), StructField("intf", IntegerType()), StructField("longf", LongType()), StructField("floatf", FloatType()), StructField("doublef", DoubleType())]) # Create a DataFrame from RDD and schema dataFrame = sparkSession.createDataFrame(dataList, schema) # Write data to the cloudtable-hbase dataFrame.write.insertInto("test_hbase") # Set cross-source connection parameters TableName = "table_DupRowkey1" RowKey = "id:5,location:6,city:7" Cols = "booleanf:CF1.booleanf,shortf:CF1.shortf,intf:CF1.intf,longf:CF1.longf,floatf:CF1.floatf,doublef:CF1.doublef" ZKHost = "cloudtable-cf82-zk3-pa6HnHpf.cloudtable.com:2181,cloudtable-cf82-zk2-weBkIrjI.cloudtable.com:2181, cloudtable-cf82-zk1-WY09px9l.cloudtable.com:2181" # Read data on CloudTable-HBase jdbcDF = sparkSession.read.schema(schema)\ .format("hbase")\ .option("ZKHost", ZKHost)\ .option("TableName",TableName)\ .option("RowKey", RowKey)\ .option("Cols", Cols)\ .load() jdbcDF.filter("id = '12333' or id='11111'").show() # close session sparkSession.stop()
  • 通过DataFrame API访问数据源 连接配置。 1 2 3 4 val url = "jdbc:postgresql://to-dws-1174405057-EA1Kgo8H.datasource.com:8000/postgres" val username = "dbadmin" val password = "######" val dbtable = "customer" 创建DataFrame,添加数据,并重命名字段。 1 2 3 4 var dataFrame_1 = sparkSession.createDataFrame(List((8, "Jack_1", 18))) val df = dataFrame_1.withColumnRenamed("_1", "id") .withColumnRenamed("_2", "name") .withColumnRenamed("_3", "age") 导入数据到DWS。 1 2 3 4 5 6 7 df.write.format("jdbc") .option("url", url) .option("dbtable", dbtable) .option("user", username) .option("password", password) .mode(SaveMode.Append) .save() SaveMode 有四种保存类型: ErrorIfExis:如果已经存在数据,则抛出异常。 Overwrite:如果已经存在数据,则覆盖原数据。 Append:如果已经存在数据,则追加保存。 Ignore:如果已经存在数据,则不做操作。这类似于SQL中的“如果不存在则创建表”。 读取DWS上的数据。 方式一:read.format()方法 1 2 3 4 5 6 val jdbcDF = sparkSession.read.format("jdbc") .option("url", url) .option("dbtable", dbtable) .option("user", username) .option("password", password) .load() 方式二:read.jdbc()方法 1 2 3 4 val properties = new Properties() properties.put("user", username) properties.put("password", password) val jdbcDF2 = sparkSession.read.jdbc(url, dbtable, properties) 插入数据前: 插入数据后: 使用上述read.format()或者read.jdbc()方法读取到的dateFrame注册为临时表,就可使用sql语句进行数据查询了。 1 2 jdbcDF.registerTempTable("customer_test") sparkSession.sql("select * from customer_test where id = 1").show() 查询结果:
  • 完整示例代码 通过DataFrame API 访问 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 # _*_ coding: utf-8 _*_ from __future__ import print_function from pyspark.sql.types import StructType, StructField, IntegerType, StringType from pyspark.sql import SparkSession if __name__ == "__main__": # Create a SparkSession session. sparkSession = SparkSession.builder.appName("datasource-redis").getOrCreate() # Set cross-source connection parameters. host = "192.168.4.199" port = "6379" table = "person" auth = "######" # Create a DataFrame and initialize the DataFrame data. # ******* method noe ********* dataList = sparkSession.sparkContext.parallelize([(1, "Katie", 19),(2,"Tom",20)]) schema = StructType([StructField("id", IntegerType(), False),StructField("name", StringType(), False),StructField("age", IntegerType(), False)]) dataFrame_one = sparkSession.createDataFrame(dataList, schema) # ****** method two ****** # jdbcDF = sparkSession.createDataFrame([(3,"Jack", 23)]) # dataFrame = jdbcDF.withColumnRenamed("_1", "id").withColumnRenamed("_2", "name").withColumnRenamed("_3", "age") # Write data to the redis table dataFrame.write.format("redis").option("host", host).option("port", port).option("table", table).option("password", auth).mode("Overwrite").save() # Read data sparkSession.read.format("redis").option("host", host).option("port", port).option("table", table).option("password", auth).load().show() # close session sparkSession.stop() 通过SQL API 访问 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # _*_ coding: utf-8 _*_ from __future__ import print_function from pyspark.sql import SparkSession if __name__ == "__main__": # Create a SparkSession sparkSession = SparkSession.builder.appName("datasource_redis").getOrCreate() sparkSession.sql( "CREATE TEMPORARY VIEW person (name STRING, age INT) USING org.apache.spark.sql.redis OPTIONS (\ 'host' = '192.168.4.199', \ 'port' = '6379',\ 'password' = '######',\ 'table'= 'person')".stripMargin); sparkSession.sql("INSERT INTO TABLE person VALUES ('John', 30),('Peter', 45)".stripMargin) sparkSession.sql("SELECT * FROM person".stripMargin).collect().foreach(println) # close session sparkSession.stop()
  • 通过DataFrame API访问数据源 构造schema 1 2 3 4 5 6 7 8 9 10 val attrId = new StructField("id",StringType) val location = new StructField("location",StringType) val city = new StructField("city",StringType) val booleanf = new StructField("booleanf",BooleanType) val shortf = new StructField("shortf",ShortType) val intf = new StructField("intf",IntegerType) val longf = new StructField("longf",LongType) val floatf = new StructField("floatf",FloatType) val doublef = new StructField("doublef",DoubleType) val attrs = Array(attrId, location,city,booleanf,shortf,intf,longf,floatf,doublef) 根据schema的类型构造数据 1 2 val mutableRow: Seq[Any] = Seq("12345","abc","city1",false,null,3,23,2.3,2.34) val rddData: RDD[Row] = sparkSession.sparkContext.parallelize(Array(Row.fromSeq(mutableRow)), 1) 导入数据到HBase 1 sparkSession.createDataFrame(rddData, new StructType(attrs)).write.insertInto("test_hbase") 读取HBase上的数据 1 2 3 4 5 6 7 8 val map = new mutable.HashMap[String, String]() map("TableName") = "table_DupRowkey1" map("RowKey") = "id:5,location:6,city:7" map("Cols") = "booleanf:CF1.booleanf,shortf:CF1.shortf,intf:CF1.intf,longf:CF1.longf,floatf:CF1.floatf,doublef:CF1.doublef" map("ZKHost")="cloudtable-cf82-zk3-pa6HnHpf.cloudtable.com:2181, cloudtable-cf82-zk2-weBkIrjI.cloudtable.com:2181, cloudtable-cf82-zk1-WY09px9l.cloudtable.com:2181" sparkSession.read.schema(new StructType(attrs)).format("hbase").options(map.toMap).load().show() 返回结果:
  • 常见问题 Q:作业运行失败,运行日志中有如下报错信息,应该怎么解决? java.lang.NoSuchMethodError: org.apache.flink.api.java.ClosureCleaner.clean(Ljava/lang/Object;Z)V A:该问题是因为所选择的huaweicloud-dis-flink-connector_2.11版本过低导致,请选择2.0.1及以上版本。 Q:运行作业读取DIS数据时,无法读出数据且Taskmanager的运行日志中有如下报错信息,应该怎么解决? ERROR com.huaweicloud.dis.adapter.common.consumer.Coordinator [] - Failed to getCheckpointAsync, error : [400 : {"errorCode":"DIS.4332","message":"app not found. "}], request : [{"stream_name":"xx","partition_id":"shardId-0000000000","checkpoint_type":"LAST_READ","app_name":"xx"}] A: 该问题是因为读取DIS数据所使用的group.id在DIS的Apps中并没有提前创建。
  • 环境准备 已在DLI控制台购买了通用队列。 已购买了DIS通道。开通DIS通道。 用户在使用Flink 1.12版本,则依赖的Dis connector版本需要不低于2.0.1,详细代码参考DISFlinkConnector相关依赖,如何配置connector,详细参考自定义Flink Streaming作业。 若读取DIS,且配置groupId,则需要提前在DIS的“App管理”中创建所需的App名称。 请勿将disToDis.properties放在生成的jar包中,在代码里有关于disToDis.properties的路径,如果放在jar包中,代码会找不到disToDis.properties路径。
  • 通过SQL API 访问数据源 创建DLI跨源访问DWS的关联表,填写连接参数。 1 sparkSession.sql("CREATE TABLE IF NOT EXISTS dli_to_dws USING JDBC OPTIONS ('url'='jdbc:postgresql://10.0.0.233:8000/postgres','dbtable'='test','user'='dbadmin','password'='**')"); 插入数据 1 sparkSession.sql("insert into dli_to_dws values(3,'Liu'),(4,'Xie')"); 查询数据 1 sparkSession.sql("select * from dli_to_dws").show(); 插入数据后:
  • 完整示例代码 通过SQL API 访问DWS表 import org.apache.spark.sql.SparkSession; public class java_dws { public static void main(String[] args) { SparkSession sparkSession = SparkSession.builder().appName("datasource-dws").getOrCreate(); sparkSession.sql("CREATE TABLE IF NOT EXISTS dli_to_dws USING JDBC OPTIONS ('url'='jdbc:postgresql://10.0.0.233:8000/postgres','dbtable'='test','user'='dbadmin','password'='**')"); //*****************************SQL model*********************************** //Insert data into the DLI data table sparkSession.sql("insert into dli_to_dws values(3,'Liu'),(4,'Xie')"); //Read data from DLI data table sparkSession.sql("select * from dli_to_dws").show(); //drop table sparkSession.sql("drop table dli_to_dws"); sparkSession.close(); } }
  • 完整示例代码 通过DataFrame API 访问 from __future__ import print_function from pyspark.sql.types import StructType, StructField, IntegerType, StringType from pyspark.sql import SparkSession if __name__ == "__main__": # Create a SparkSession session. sparkSession = SparkSession.builder.appName("datasource-mongo").getOrCreate() # Create a DataFrame and initialize the DataFrame data. dataList = sparkSession.sparkContext.parallelize([("1", "Katie", 19),("2","Tom",20)]) # Setting schema schema = StructType([StructField("id", IntegerType(), False),StructField("name", StringType(), False), StructField("age", IntegerType(), False)]) # Create a DataFrame from RDD and schema dataFrame = sparkSession.createDataFrame(dataList, schema) # Setting connection parameters url = "192.168.4.62:8635,192.168.5.134:8635/test?authSource=admin" uri = "mongodb://username:pwd@host:8635/db" user = "rwuser" database = "test" collection = "test" password = "######" # Write data to the mongodb table dataFrame.write.format("mongo") .option("url", url)\ .option("uri", uri)\ .option("user",user)\ .option("password",password)\ .option("database",database)\ .option("collection",collection) .mode("Overwrite").save() # Read data jdbcDF = sparkSession.read.format("mongo") .option("url", url)\ .option("uri", uri)\ .option("user",user)\ .option("password",password)\ .option("database",database)\ .option("collection",collection)\ .load() jdbcDF.show() # close session sparkSession.stop() 通过SQL API 访问 from __future__ import print_function from pyspark.sql import SparkSession if __name__ == "__main__": # Create a SparkSession session. sparkSession = SparkSession.builder.appName("datasource-mongo").getOrCreate() # Createa data table for DLI - associated mongo sparkSession.sql( "create table test_dds(id string, name string, age int) using mongo options(\ 'url' = '192.168.4.62:8635,192.168.5.134:8635/test?authSource=admin',\ 'uri' = 'mongodb://username:pwd@host:8635/db',\ 'database' = 'test',\ 'collection' = 'test', \ 'user' = 'rwuser', \ 'password' = '######')") # Insert data into the DLI-table sparkSession.sql("insert into test_dds values('3', 'Ann',23)") # Read data from DLI-table sparkSession.sql("select * from test_dds").show() # close session sparkSession.stop()
  • 修订记录 发布日期 修订记录 2024-05-30 云审计服务支持的DLI操作列表说明新增Flink Jar作业和Flink模板相关审计事件。 2024-05-23 新增建立DLI与共享VPC中资源的网络连接。 2024-05-22 云审计服务支持的DLI操作列表说明新增Flink Opensource sql相关审计事件。 2024-05-10 弹性资源池概述,新增弹性资源池扩缩容约束限制。 队列弹性扩缩容,新增队列扩缩容约束限制。 2024-04-17 修改导出作业SQL作业结果,介绍导出作业结果到指定作业桶的方法。 2024-04-03 新增SQL防御,介绍SQL防御规则配置方法。 2024-03-30 新增 DLI委托权限设置,介绍DLI委托权限设置操作指导。 创建Spark作业,补充说明Spark3.3.x及以上版本仅支持选择OBS路径下的程序包。 2024-03-15 新增 标签管理、队列标签管理、弹性资源池标签管理、库表管理标签管理等标签配置相关内容,新增标签策略使用约束限制。 2024-03-08 新增 添加路由,补充关于路由IP的网段说明。 队列属性设置、弹性资源池添加队列补充关于队列的最小CUs小于16CUs时,队列属性相关约束限制说明。 2024-01-30 新增 SQL作业管理,补充说明DLI仅支持从作业桶读取查询结果。 2024-01-17 新增 内置依赖包,新增3.1.1版本依赖包信息。 2024-01-09 修改 数据湖探索监控指标说明及查看指导,新增弹性资源池相关监控指标。 2023-12-11 修改 全局变量,删除敏感变量相关信息,DLI不再支持新建敏感变量。 2023-12-07 修改 内置依赖包,删除AI镜像安装依赖包信息。 2023-11-14 优化 SQL作业管理、Spark作业管理概述删除导出日志功能的相关描述,SQL作业和Spark作业不再支持导出日志功能。 2023-11-07 优化 跨源认证概述,修改跨源认证的简介,推荐用户使用跨源认证。 增强型跨源连接概述,补充说明跨源场景推荐使用跨源认证存储跨源凭证。 经典型跨源连接(废弃,不推荐使用),补充说明不推荐使用经典型跨源连接。 2023-11-02 优化 创建Spark作业,补充关于资源规格的说明,解释说明driver对队列资源的占用。 2023-08-28 新增 分配队列至项目。 队列属性设置。 弹性资源池添加队列、弹性资源池关联队列补充说明弹性资源池支持仅添加同一企业项目的队列资源。 下线“创建Flink SQL边缘作业”、“边缘鉴权码管理”。 2023-08-14 新增 SQL作业管理,SQL作业详情支持查看“CPU累计使用量”和“输出字节”。 2023-08-02 新增 全局配置,修改全局变量中关于敏感变量的说明。 新增全局变量权限管理。 修改 SQL编辑器,修改SQL作业编辑窗口说明内容。 SQL作业管理,修改作业管理参数表的内容。 使用场景一:创建弹性资源池并运行作业,修改SQL队列类型的相关说明。 弹性资源池添加队列,修改弹性资源池添加队列基础配置关于执行引擎的说明。 2023-07-31 新增 下载基础镜像,新增Flink 1.12镜像下载地址。 2023-07-25 修改 队列弹性扩缩容新增约束限制:16CUs队列不支持扩容。 2023-06-30 优化 增强型跨源连接(推荐)。 跨源认证。 2023-06-16 新增 下载基础镜像,新增Spark 3.1.1镜像下载地址。 2023-05-05 新增 开启Flink作业动态扩缩容。 设置作业优先级。 2023-04-17 修改 队列标签管理,修改其中的标签值和键的说明内容。 2023-03-03 新增Spark参数(--conf)配置跨源作业的依赖模块说明表。 2023-03-02 新增库表管理标签管理章节。 2023-02-28 优化弹性资源池队列管理章节。 2023-02-23 修改 下线调试Flink作业相关内容。 操作Flink作业,修改运行时配置中的“异常自动重启”参数描述,Flink SQL作业和Flink OpenSource SQL作业不支持配置从Checkpoint恢复。 2023-01-10 手册结构调整,新增配额管理。 2022-11-04 弹性资源池CU设置,补充CU设置的常见问题。 2022-09-20 使用自定义镜像,修改自定义镜像使用约束,当前仅支持Spark自定义镜像。 2022-08-22 数据库权限管理,补充“显示所有表”、“显示数据库”的权限说明。 Flink作业权限管理,补充查看作业详情的说明。 2022-08-19 云审计服务支持的DLI操作列表说明,修改DLI审计事件名称。 2022-08-12 内置依赖包,删除Python 3.7.5 依赖包相关内容。 2022-07-19 新增弹性资源池关联队列。 新增(推荐)创建Flink OpenSource SQL作业。 使用场景二:配置弹性资源池队列扩缩容策略,补充弹性资源池扩缩容约束限制。 弹性资源池CU设置,补充弹性资源池调整CU的约束限制。
共100000条