华为云用户手册

  • 示例流程 命名空间是对一组资源和对象的抽象整合。在同一个集群内可创建不同的命名空间,不同命名空间中的数据彼此隔离,使得它们既可以共享同一个集群的服务,也能够互不干扰。命名空间的一个重要的作用是充当一个虚拟的集群,用于多种工作用途,满足多用户的使用需求。 本章节将沿用创建用户并授权使用CCI中创建的IAM用户“James”和用户组“开发人员组”进行说明,为IAM用户“James”和用户组“开发人员组”添加命名空间权限,可以参考如下操作: 步骤一:为IAM用户/用户组添加命名空间权限 步骤二:用户登录并验证权限
  • 概述 公网访问是指使用外部网络访问负载,您可以给负载绑定共享型ELB实例(ELB必须与负载在同一个VPC内),通过ELB实例访问负载,当前外部访问支持四层和七层负载公网访问。 四层公网访问支持TCP和UDP两种协议,设置完成后可以通过“elb公网ip:elb端口”访问负载。 七层公网访问支持HTTP和HTTPS两种协议访问,设置完成后,可以通过“http://公网域名(或elb 公网ip):elb端口/映射路径”访问负载。 Service是基于四层TCP和UDP协议转发的,Ingress可以基于七层的HTTP和HTTPS协议转发,可以通过域名和路径做到更细粒度的划分,如下图所示。 图1 Ingress-Service 下图是一个通过HTTP协议访问负载的示例。 图2 公网访问
  • 如何处理公网无法访问 公网能正常访问的前提是负载已处于运行中状态,如果您的负载处于未就绪或异常状态,公网访问将无法正常使用。 从负载开始创建到公网可以正常访问可需要1分钟到3分钟的时间,在此时间内网络路由尚未完成配置,请稍作等待。 负载创建3分钟以后仍然无法访问。单击创建的负载进入详情页,在详情页单击访问配置下面的“事件”标签,查看访问事件,查看是否有告警事件。如下两种常见的事件。 Listener port is repeated:ELB监听器端口重复,是由于之前发布公网访问的负载,删除之后立刻创建使用相同ELB端口的公网访问负载,ELB实际删除端口需要一定的时间,因此首次创建失败,可以选择删除负载重新创建,也可以等待5-10分钟,公网访问可正常使用。 Create listener failed:创建ELB监听器失败,创建监听器失败的原因一般是超过配额限度,请选择其他配额充足的ELB实例。 负载创建3分钟以后仍然无法访问,且无告警事件,可能原因是用户配置的容器端口实际上没有相应进程在监听,目前云容器实例服务无法检测出该类使用异常,需要您排查镜像是否有监听该容器端口。如果容器端口监听正确,此时无法访问的原因可能为ELB实例本身有问题,请排查ELB实例状态。
  • 配置公网访问-创建工作负载时设置 在云容器实例中,您只需要在创建负载时选择“公网访问”,然后配置如下参数。 服务名称:服务名称即Service的名称,Service是用于管理Pod访问的对象。Service的详细信息请参见https://support.huaweicloud.com/devg-cci/cci_05_0007.html。 安装coredns:coredns插件为您的其他负载提供内部域名解析服务,如果不安装coredns则无法通过“服务名称:负载访问端口”访问负载。 ELB实例:选择ELB实例,如没有ELB实例可以单击“创建共享型ELB实例”去创建。 此处创建的ELB需要与负载所在命名空间在同一个VPC内。 CCI暂时不支持独享型负载均衡,建议您创建共享型ELB实例。 ELB协议:即公网访问使用的通信协议,支持HTTP、HTTPS、TCP和UDP协议。 Ingress名称:Ingress是用于管理七层协议访问的对象。此处如果不配置,云容器实例会默认负载名称作为Ingress名称。Ingress的详细信息请参见https://support.huaweicloud.com/devg-cci/cci_05_0008.html。 公网域名(选择HTTP/HTTPS协议时可配置):通过域名访问负载,公网域名需要您自行购买,并将域名解析指向所选的ELB实例弹性公网IP。 证书(选择HTTPS协议时必填):SSL证书的导入方法请参见SSL证书。 ELB端口:选择使用的ELB访问的具体协议和端口。 负载端口协议:访问负载的通信协议,可选择TCP或UDP,如果ELB协议选择为HTTP/HTTPS,则负载端口协议为TCP。 负载端口配置: 负载访问端口:负载提供的访问端口。 容器端口:容器监听的端口,负载访问端口映射到容器端口。 HTTP路由配置 映射路径:URL访问的路径,必须以“/”开头,如“/api/web”,也可以是根路径“/”。 负载访问端口:前面设置的负载访问端口。 如下图所示,假如ELB实例的IP地址为“10.10.10.10”,则通过“http://10.10.10.10:6071/”就可以从公网访问到负载。 图3 配置公网访问参数
  • EIP随Pod创建 创建Pod时,填写pod-with-eip的annotation后,EIP会随Pod自动创建并绑定至该Pod。 以下示例创建一个名为nginx的无状态负载,EIP将随Pod自动创建并绑定至Pod。具体字段含义见表1。 创建独占带宽类型的Deployment,无需指定带宽ID,示例如下: apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "14" description: "" name: nginx namespace: eip spec: ... template: metadata: annotations: yangtse.io/pod-with-eip: "true" yangtse.io/eip-bandwidth-size: "5" yangtse.io/eip-network-type: 5_g-vm yangtse.io/eip-charge-mode: bandwidth yangtse.io/eip-bandwidth-name: "xxx" 创建共享带宽类型的Deployment,必须指定带宽ID且只需填写该字段,示例如下: apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "14" description: "" name: nginx namespace: eip spec: ... template: metadata: annotations: yangtse.io/pod-with-eip: "true" yangtse.io/eip-bandwidth-id: "xxx" 表1 参数说明 参数 参数含义 必选/可选 约束 yangtse.io/pod-with-eip EIP随Pod创建 必选 字段填写值为"true"时,才会开启该功能。 yangtse.io/eip-bandwidth-size 指定EIP带宽 可选 默认值为5。 yangtse.io/eip-network-type 指定带宽类型 可选 默认值为5_bgp,若region不支持5_bgp,同时该字段未填写时,pod会报event。 yangtse.io/eip-charge-mode 指定收费类型 可选 默认值bandwidth,可选值traffic。 yangtse.io/eip-bandwidth-id 指定共享带宽id 必选(共享型带宽) 填写该字段时,无需填写其他值。 yangtse.io/eip-bandwidth-name 指定带宽名 可选 默认值同该EIP的名称。
  • Pod的EIP准备就绪 Pod业务容器的启动时间可能早于EIP分配结果返回成功时间,在Pod启动过程中EIP可能会绑定失败。 通过在init container中可检查EIP是否已经分配成功。容器网络控制器会在Pod IP分配后,为Pod绑定EIP并返回分配结果至Pod的Annotation(yangtse.io/allocated-ipv4-eip),通过Pod配置init container并使用downwardAPI,把yangtse.io/allocated-ipv4-eip annotation通过volume挂载到init container里,可检查EIP是否已经分配成功。具体您可以参考以下示例配置init container: CCI当前提供Pod自动绑定EIP的能力,实际的EIP分配发生在Pod调度完成之后,因此当前不支持通过ENV将EIP的Annotation注入至Pod中。 apiVersion: v1 kind: Pod metadata: name: example namespace: demo annotations: yangtse.io/pod-with-eip: "true" yangtse.io/eip-bandwidth-size: "5" yangtse.io/eip-network-type: 5_g-vm yangtse.io/eip-charge-mode: bandwidth yangtse.io/eip-bandwidth-name: "xxx" spec: initContainers: - name: init image: busybox:latest command: ['timeout', '60', 'sh', '-c', "until grep -E '[0-9]+' /etc/eipinfo/allocated-ipv4-eip; do echo waiting for allocated-ipv4-eip; sleep 2; done"] volumeMounts: - name: eipinfo mountPath: /etc/eipinfo volumes: - name: eipinfo downwardAPI: items: - path: "allocated-ipv4-eip" fieldRef: fieldPath: metadata.annotations['yangtse.io/allocated-ipv4-eip']
  • 为Pod指定EIP的ID 创建Pod时,填写yangtse.io/eip-id的annotation后,EIP会随Pod自动完成绑定。 以下示例创建一个名为nginx的实例数为1的无状态负载,EIP将随Pod自动绑定至Pod。具体字段含义见表1。 apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "14" description: "" name: nginx namespace: eip spec: ... replicas: 1 template: metadata: annotations: yangtse.io/eip-id: 65eb3679-7a8d-4b24-b681-0b661axxxxcb 表1 参数说明 参数 参数含义 必选/可选 约束 yangtse.io/eip-id 弹性公网ID 必选 必须是弹性公网IP页面能查到的ID信息。
  • Pod的EIP准备就绪 Pod业务容器的启动时间可能早于EIP分配结果返回成功时间,在Pod启动过程中EIP可能会绑定失败。 通过在init container中可检查EIP是否已经分配成功。容器网络控制器会在Pod IP分配后,为Pod绑定EIP并返回分配结果至Pod的Annotation(yangtse.io/allocated-ipv4-eip),通过Pod配置init container并使用downwardAPI,把yangtse.io/allocated-ipv4-eip annotation通过volume挂载到init container里,可检查EIP是否已经分配成功。具体您可以参考以下示例配置init container: apiVersion: v1 kind: Pod metadata: name: example namespace: demo annotations: yangtse.io/eip-id: 65eb3679-7a8d-4b24-b681-0b661axxxxcb spec: initContainers: - name: init image: busybox:latest command: ['timeout', '60', 'sh', '-c', "until grep -E '[0-9]+' /etc/eipinfo/allocated-ipv4-eip; do echo waiting for allocated-ipv4-eip; sleep 2; done"] volumeMounts: - name: eipinfo mountPath: /etc/eipinfo volumes: - name: eipinfo downwardAPI: items: - path: "allocated-ipv4-eip" fieldRef: fieldPath: metadata.annotations['yangtse.io/allocated-ipv4-eip']
  • cci_admin_trust委托说明 cci_admin_trust委托具有Tenant Administrator权限。Tenant Administrator拥有除IAM管理外的全部云服务管理员权限,用于对CCI所依赖的其他云服务资源进行调用,且该授权仅在当前区域生效。 由于CCI对其他云服务有许多依赖,如果没有Tenant Administrator权限,可能会因为某个服务权限不足而影响CCI功能的正常使用。因此在使用CCI服务期间,请不要自行删除或者修改cci_admin_trust委托。
  • 汇总表 表1 网站搭建汇总表 网站搭建方案 搭建方式 操作系统 镜像及所含资源 说明 镜像部署Windows 环境 镜像部署 Windows 由所选镜像决定 已经购买了弹性云服务器,但想切换成其它类型操作系统,或者想使用镜像重新部署已经预装了其它软件的环境。 镜像部署WordPress(Linux) 镜像部署 Linux Wordpress官方正式版 软件版本:Wordpress5.3.2 环境软件:Php7.3.14、MySQL5.6、Apache2.4.6、CentOS7.6 WordPress简称WP,最初是一款博客系统,后逐步演化成一款免费的CMS(内容管理系统/建站系统)。 镜像部署PHPWind 论坛系统 镜像部署 Linux PHPWind论坛社区系统(LAMP) 软件版本:PHPWind先进版9.0.2 环境软件:LAMP、php5.6.31、mysql5.6.3、apache2.4.8、9Panel PHPWind(简称:PW)是一个基于PHP和MySQL的开源社区程序,是国内较受欢迎的论坛之一。轻架构,高效易开发,使用户可快速搭建并轻松管理。 镜像部署LNMP 环境 镜像部署 Linux LNMP平台(CentOS7.4 Nginx PHP7.2) Nginx 1.12.2 MySQL 5.7.21 PHP 7.2.4、7.1.16、7.0.29、5.6.35、5.5.38、5.4.45、5.3.29 Redis 4.0.9 Memcached 1.5.7 Jemalloc 5.0.1 Pure-FTPd 1.0.47 phpMyAdmin 4.4.15.10 LNMP代表Linux系统下Nginx+MySQL+PHP这种网站服务器架构,Nginx是一个小巧而高效的Linux下的Web服务器软件。 镜像部署Magento 电子商务网站(Linux) 镜像部署 Linux Magento2.2.4英文社区版_简单数据版 Magento是一款开源电子商务系统,设计灵活,具有模块化架构体系和丰富的功能,可为大中型站点提供解决方案。 镜像部署Moodle 课程管理系统(Linux) 镜像部署 Linux Moodle LMS在线学习系统(LAMP) 软件版本:Moodle3.5.2 环境软件:php7.0、mysql5.6、apache 2.4、9panel Moodle是一个开源的课程管理系统,采用PHP+MySQL开发,可以帮助教育者建立有效的在线学习社区,以系统功能强大、界面简洁而著称。 镜像部署OpenCart 电子商务网站(Linux) 镜像部署 Linux OpenCart电子商城(LAMP) 软件版本:OpenCart 3.0.2.0 环境软件:php7.0、mysql5.6.3、apache 2.4.8、9panel OpenCart(opencart.com)是世界著名的开源电子商务系统,系统开发语言为PHP。OpenCart功能全面,包含商品管理、订单管理、促销管理、内容管理、会员管理、支付、物流、报表等功能。开源生态系统完善,有大量的模板和插件可用。 镜像部署Java Web环境 镜像部署 Linux Java环境 Tomcat是一个免费的开放源代码的Web应用,是目前比较常用的Web 应用程序。可以用来托管常用的Java Web应用程序。 镜像部署Joomla内容管理系统(Linux) 镜像部署 Linux Joomla 网站内容管理系统( LAMP) 软件版本:Joomla 3.8.5 环境版本:LAMP、php7.0、mysql5.6.3、apache 2.4.8、9Panel Joomla是一套全球知名的内容管理系统,即Joomla CMS(Content Management System)。Joomla是使用PHP语言加上Mysql数据开发的软件系统,是网站的一个基础管理平台,适合从个人网站到各种企业网站、分类信息系统、电商销售类型的各类网站。 镜像部署AMH 镜像部署 Linux PHP运行环境AMH4.2面板PHP CentOS6.8 AMH是一套通过Web控制和管理服务器的Linux服务器管理系统以及虚拟主机管理系统。 搭建Discuz 论坛网站 手动部署 自动部署 Linux 公共镜像 Discuz是通用的社区论坛软件系统,基础架构采用流行的web编程组合PHP+MySQL实现。 搭建FTP 站点(Windows) 手动部署 Windows 公共镜像 使用Windows自带的FTP服务搭建FTP站点。 快速构建FTP站点(Linux) 手动部署 自动部署 Linux 公共镜像 使用vsftpd软件搭建FTP站点。vsftpd全称是“very secure FTP daemon”,是一款在Linux发行版中使用较多的FTP服务器软件。 基于Tomcat构建Java web环境 手动部署 自动部署 Linux 公共镜像 Tomcat 8.5.31 JDK 8u171 Tomcat是一个免费的开放源代码的Web应用,是目前比较常用的Web 应用程序。可以用来托管常用的Java Web应用程序。 手工搭建Magento 电子商务网站(Linux) 手动部署 自动部署 Linux 公共镜像 MySQL 5.7 PHP 7.0 Magento 2.1 Magento是一款开源电子商务系统,设计灵活,具有模块化架构体系和丰富的功能,可为大中型站点提供解决方案。 搭建Microsoft SharePoint Server 2016 手动部署 Windows 公共镜像 Microsoft SQL Server 2014 SharePoint Server 2016 Microsoft SharePoint Server是一个门户站点,使得企业能够开发出智能的门户站点。这个站点能够无缝连接到用户、团队和知识。 手工搭建LNMP环境 手动部署 Linux 公共镜像 Nginx 1.14.0 MySQL 5.7 PHP 7.0.31 LNMP代表Linux系统下Nginx+MySQL+PHP这种网站服务器架构,Nginx是一个小巧而高效的Linux下的Web服务器软件。 基于WordPress搭建个人网站(Linux) 手动部署 自动部署 Linux 公共镜像 Nginx 1.14.0 MySQL 5.7 PHP 7.0.31 WordPress 4.9.8 使用弹性云服务器的Linux实例手工搭建LNMP平台,并部署WordPress环境。WordPress简称WP,最初是一款博客系统,后逐步演化成一款免费的CMS(内容管理系统/建站系统)。 手工部署Docker(CentOS 7.5) 手动部署 自动部署 Linux 公共镜像 使用弹性云服务器的Linux实例部署Docker,并提供了Docker常用操作及简单的镜像制作过程。 搭建微信公众号后台——收发文本消息 手动部署 自动部署 Linux 公共镜像 使用弹性云服务器搭建微信公众号处理后台,使用Python语言编写对应的微信消息处理逻辑代码,接收从微信服务端转发过来的消息,并返回处理结果给最终用户。 手工部署GitLab(CentOS7.2) 手动部署 Linux 公共镜像 使用弹性云服务器的Linux实例手工部署GitLab。GitLab是一个开源的版本管理系统,使用Git作为代码管理工具。 手工部署RabbitMQ(CentOS 7.4) 手动部署 自动部署 Linux 公共镜像 Erlang 8.3 RabbitMQ 3.6.9 使用弹性云服务器的Linux实例部署RabbitMQ。RabbitMQ是采用Erlang语言实现AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。RabbitMQ凭借其高可靠、易扩展、高可用及丰富的功能特性成为目前非常热门的一款消息中间件。 手工搭建Ghost博客(Ubuntu 20.04) 手动部署 Linux 公共镜像 Nginx 1.14.0 MySQL 5.7 Ghost是基于Node.js的开源博客平台,可以为用户提供更加便捷的写作与发布平台,本文指导用户基于华为云弹性云服务器(以Ubuntu 20.04操作系统云服务器为例)部署Ghost博客。 手工部署Node.js(CentOS 7.2) 手动部署 Linux 公共镜像 使用弹性云服务器的Linux实例部署Node.js。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,用于方便地搭建响应速度快、易于扩展的网络应用。Node.js使用事件驱动,非阻塞I/O模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。 PostgreSQL 本地Slave搭建步骤 手动部署 Linux PostgreSQL (11.2) PostgreSQL是一个开源对象关系型数据库管理系统,并侧重于可扩展性和标准的符合性。本文指导您使用华为云弹性云服务器搭建PostgreSQL。 手工安装宝塔面板(CentOS7.2) 手动部署 Linux 宝塔Linux面板6.9 宝塔面板是一款使用方便、功能强大且终身免费的服务器管理软件,支持Linux与Windows系统。一键配置LAMP、LNMP、网站、数据库、FTP、SSL,通过Web端轻松管理服务器。 基于开源wangmarketCMS快速建站 自动部署 Linux 公共镜像 该方案可帮助您在华为云弹性云服务器上快速搭建SaaS云建站系统,您可以通过私有化部署wangmarketCMS建站系统,创建上千个无技术门槛,100%自由度的网站,并根据开源代码进行定制化开发。 基于迅响快速构建响应式网站 自动部署 Linux 公共镜像 该解决方案可以帮助您在华为云弹性云服务器上基于迅响一键式构建响应式网站。 基于万户快速建站 自动部署 万户全网站管理系统 万户站群内容管理系统 该解决方案能帮助用户快速部署万户ezEIP企业网站管理系统。
  • 简介 为了方便用户搭建网站,本文汇总了华为云常用的网站搭建指导。并提供了指导文档和相关镜像的链接,您可以根据介绍选择需要搭建的网站,并通过链接获取指导文档和镜像,轻松搭建您的网站。 搭建方式分为镜像部署和手工搭建。 镜像部署使用市场镜像进行搭建,部署时间短,部署过程简单,可支持主流应用场景,且有镜像服务商的专业售后工程师团队支持。 手工搭建部署时间长,部署过程复杂,需要自行选择合适的操作系统、数据库、中间件等各类软件,再进行安装和配置。可以满足个性化的部署需求。后期的维护需要依赖自身运维人员的经验。
  • 背景 弹性云服务器的磁盘增强型、超高I/O型以及鲲鹏超高I/O型实例自带高存储带宽和IOPS的本地盘,适用于处理海量数据、需要高I/O能力,要求快速数据交换和处理的场景。 本地盘部署在弹性云服务器实例所在宿主机上,提供本地存储访问能力,具有高存储IOPS、低时延、高吞吐量和高性价比等优势。同时,由于本地盘只挂载于单台宿主机,因此其数据可靠性依赖宿主机的可靠性。如果出现宿主机异常、本地盘故障或实例重部署等情况,则本地盘数据会丢失。因此,请勿在本地盘上存储需要长期保存的业务数据。对于数据可靠性要求比较高的场景,建议您选择支持三副本技术的云硬盘。
  • 注意事项 使用文件系统输出流的Flink作业必须开启checkpoint,保证作业的一致性。 为了避免数据丢失或者数据被覆盖,开启作业异常自动重启或者手动重启,需要配置为“从checkpoint恢复”。 checkpoint间隔设置需在输出文件实时性、文件大小和恢复时长之间进行权衡,比如10分钟。 checkpoint支持如下两种模式: AtLeastOnce:事件至少被处理一次。 ExactlyOnce:事件仅被处理一次。 使用文件系统输出流写入数据到OBS时,应避免多个作业写同一个目录的情况。 OBS对象存储桶的默认行为为覆盖写,可能导致数据丢失。 OBS并行文件系统桶的默认行为追加写,可能导致数据混淆。 因为以上OBS桶类型行为的区别,为避免作业异常重启可能导致的数据异常问题,请根据您的业务需求选择OBS桶类型。
  • 示例 示例一: 该示例将car_info数据,以buyday字段为分区字段,parquet为编码格式,转储数据到OBS。 1 2 3 4 5 6 7 8 9 10 11 12 13 create sink stream car_infos ( 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中的存储目录结构为:obs://obs-sink/car_infos/buyday=xx/part-x-x。 数据生成后,可通过如下SQL语句建立OBS分区表,用于后续批处理: 创建OBS分区表。 1 2 3 4 5 6 7 8 create table car_infos ( carId string, carOwner string, average_speed double ) partitioned by (buyday string) stored as parquet location 'obs://obs-sink/car_infos'; 从关联OBS路径中恢复分区信息。 1 alter table car_infos recover partitions; 示例二 该示例将car_info数据,以buyday字段为分区字段,csv为编码格式,转储数据到HDFS。 1 2 3 4 5 6 7 8 9 10 11 12 create sink stream car_infos ( carId string, carOwner string, average_speed double, buyday string ) partitioned by (buyday) with ( type = "filesystem", file.path = "hdfs://node-master1sYAx:9820/user/car_infos", encode = "csv", field_delimiter = "," ); 数据最终在HDFS中的存储目录结构为:/user/car_infos/buyday=xx/part-x-x。
  • HDFS代理用户配置 登录MRS管理页面。 选择MRS的HDFS Namenode配置,在“自定义”中添加配置参数。 图1 HDFS服务配置 其中,core-site值名称“hadoop.proxyuser.myname.hosts”和“hadoop.proxyuser.myname.groups”中的“myname”为传入的krb认证用户名称。 需要保证写入HDFS数据路径权限为777。 配置完成后,单击“保存配置”进行保存。
  • 关键字 表1 关键字说明 参数 是否必选 说明 type 是 输出流类型。“type”为“filesystem”,表示输出数据到文件系统。 file.path 是 输出目录,格式为: schema://file.path。 当前schame只支持obs和hdfs。 当schema为obs时,表示输出到对象存储服务OBS。 当schema为hdfs时,表示输出到HDFS。HDFS需要配置代理用户,具体请参考HDFS代理用户配置。 示例:hdfs://node-master1sYAx:9820/user/car_infos,其中node-master1sYAx:9820为MRS集群NameNode所在节点信息。 encode 是 输出数据编码格式,当前支持“parquet”格式和“csv”格式。 当schema为obs时,输出数据编码格式仅支持“parquet”格式。 当schema为hdfs时,输出数据编码格式支持“parquet”格式和“csv”格式。 ak 否 输出到OBS时该参数必填。用于访问OBS认证的accessKey,可使用全局变量,屏蔽敏感信息。 关于全局变量在控制台上的使用方法,请参考《数据湖探索用户指南》。 sk 否 输出到OBS时该参数必填。用于访问OBS认证的secretKey,可使用全局变量,屏蔽敏感信息。 关于全局变量在控制台上的使用方法,请参考《数据湖探索用户指南》。 krb_auth 否 创建跨源认证的认证名。开启kerberos认证时,需配置该参数。如果创建的MRS集群未开启kerb认证的集群,请确保在DLI队列host文件中添加MRS集群master节点的“/etc/hosts”信息。 field_delimiter 否 属性分隔符。 当编码格式为“csv”时,需要设置属性分隔符,用户可以自定义,如:“,”。
  • 功能描述 创建sink流将数据输出到分布式文件系统(HDFS)或者对象存储服务(OBS)等文件系统。数据生成后,可直接对生成的目录创建非DLI表,通过DLI SQL进行下一步处理分析,并且输出数据目录支持分区表结构。适用于数据转储、大数据分析、备份或活跃归档、深度或冷归档等场景。 对象存储服务(Object Storage Service,简称OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。 OBS的更多信息,请参见《对象存储服务控制台指南》。
  • 语法格式 1 2 3 4 5 6 7 8 9 CREATE SINK STREAM stream_id (attr_name attr_type (',' attr_name attr_type)* ) [PARTITIONED BY (attr_name (',' attr_name)*] WITH ( type = "filesystem", file.path = "obs://bucket/xx", encode = "parquet", ak = "", sk = "" );
  • 示例代码 为便于理解函数的使用方法,本文为您提供源数据,基于源数据提供函数相关示例。创建表logs,并添加数据,命令示例如下: CREATE TABLE logs ( cookieid string, createtime string, pv INT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' stored as textfile; 添加数据如下: cookie1 2015-04-10 1 cookie1 2015-04-11 5 cookie1 2015-04-12 7 cookie1 2015-04-13 3 cookie1 2015-04-14 2 cookie1 2015-04-15 4 cookie1 2015-04-16 4 cookie2 2015-04-10 2 cookie2 2015-04-11 3 cookie2 2015-04-12 5 cookie2 2015-04-13 6 cookie2 2015-04-14 3 cookie2 2015-04-15 9 cookie2 2015-04-16 7 示例:将所有记录根据cookieid分组,并按pv降序排列,返回组内每行的序号。命令示例如下: select cookieid, createtime, pv, row_number() over (partition by cookieid order by pv desc) as index from logs; -- 返回结果: cookie1 2015-04-12 7 1 cookie1 2015-04-11 5 2 cookie1 2015-04-16 4 3 cookie1 2015-04-15 4 4 cookie1 2015-04-13 3 5 cookie1 2015-04-14 2 6 cookie1 2015-04-10 1 7 cookie2 2015-04-15 9 1 cookie2 2015-04-16 7 2 cookie2 2015-04-13 6 3 cookie2 2015-04-12 5 4 cookie2 2015-04-11 3 5 cookie2 2015-04-14 3 6 cookie2 2015-04-10 2 7
  • 参数说明 表1 参数说明 参数 描述 db_name 数据库名称,由字母、数字和下划线(_)组成。不能是纯数字,且不能以数字和下划线开头。 table_name 表名称。 obs桶多版本回收站目录 当前OBS表所在桶下的一个目录,您可以根据需要调整目录路径。比如当前OBS表所在路径为“obs://bucketName/filePath”,OBS表目录下已创建Trash目录,则该回收站目录可以指定为“obs://bucketName/filePath/Trash”。
  • 功能描述 在DLI数据多版本功能开启后,过期的备份数据后续在执行insert overwrite或者truncate语句时会被系统直接清理。OBS并行文件系统可以通过配置回收站加速删除操作过期的备份数据。通过在表属性添加配置“dli.multi.version.trash.dir”即可开启回收站功能。开启和关闭多版本语法请参考开启或关闭数据多版本。 DLI数据多版本功能当前仅支持通过Hive语法创建的OBS表,具体建表SQL语法可以参考使用Hive语法创建OBS表。
  • 说明 语法 描述 where_condition where逻辑判断条件。 and 逻辑运算符:与。 or 逻辑运算符:或。 not 逻辑运算符:非。 ( 子逻辑判断条件开始。 ) 子逻辑判断条件结束。 condition 逻辑判断条件。 exists 关键字,用于判断是否存在一个不为空的集合,若exists后面跟的为子查询,子查询中须包含逻辑判断条件。 in 关键字,用于判断属性是否在一个集合中。 attrs_value_set_expr 属性值集合。 attr_expr 属性表达式。
  • 注意事项 暂不支持通过python写UDF、UDTF、UDAF自定义函数。 如果使用IntelliJ IDEA工具对创建的自定义函数进行调试,则需要在IDEA上勾选:include dependencies with "Provided" scope,否则本地调试运行时会加载不到pom文件中的依赖包。 具体操作以IntelliJ IDEA版本2020.2为例,参考如下: 在IntelliJ IDEA界面,选择调试的配置文件,单击“Edit Configurations”。 在“Run/Debug Configurations”界面,勾选:include dependencies with "Provided" scope。 单击“OK”完成应用配置。
  • 参数说明 表1 参数说明 参数 是否必选 默认值 数据类型 说明 connector 是 无 String connector类型,需配置为'redis'。 host 是 无 String redis连接地址。 port 否 6379 Integer redis连接端口。 password 否 无 String redis认证密码。 namespace 否 无 String redis key的namespace。 例如设置该值为"person",假设key为"jack"则redis中会是"person:jack"。 delimiter 否 : String redis的key和namespace之间的分隔符。 data-type 否 hash String redis的数据类型,有下列选项,与redis的数据类型相对应: hash list set sorted-set string data-type取值约束详见data-type取值约束说明。 schema-syntax 否 fields String redis的schema语义,包含以下值: fields:适用于所有数据类型。fields类型是指可以设置多个字段,写入时会取每个字段的值。 fields-scores:适用于sorted set数据类型,表示对每个字段都设置一个字段作为其独立的score。 array:适用于list、set、sorted set数据类型 array-scores:适用于sorted set数据类型 map:适用于hash、sorted set数据类型。 schema-syntax取值约束详见schema-syntax取值约束说明。 deploy-mode 否 standalone String redis集群的部署模式,支持standalone、master-replica、cluster,默认standalone。 该值可参考redis集群的实例类型介绍。 retry-count 否 5 Integer 连接redis集群的尝试次数。 connection-timeout-millis 否 10000 Integer 尝试连接redis集群时的最大超时时间。 commands-timeout-millis 否 2000 Integer 等待操作完成响应的最大时间。 rebalancing-timeout-millis 否 15000 Integer redis集群失败时的休眠时间。 default-score 否 0 Double 当data-type设置为“sorted-set”数据类型的默认score。 ignore-retraction 否 false Boolean 是否忽略retract消息。 skip-null-values 否 true Boolean 是否跳过null。若为false,则设置为字符串"null"。 pwd_auth_name 否 无 String DLI侧创建的Password类型的跨源认证名称。 使用跨源认证则无需在作业中配置账号和密码。 key-ttl-mode 否 no-ttl String key-ttl-mode是开启Redis sink TTL的功能参数,key-ttl-mode的限制为:no-ttl、expire-msec、expire-at-date、expire-at-timestamp。 no-ttl:不设置过期时间。 expire-msec:设置key多久过期,参数为long类型字符串,单位为毫秒。 expire-at-date:设置key到某个时间点过期,参数为UTC时间。 expire-at-timestamp:设置key到某个时间点过期,参数为时间戳。 key-ttl 否 无 String key-ttl是key-ttl-mode的补充参数,有以下几种参数值: 当key-ttl-mode取值为no-ttl时,不需要配置此参数。 当key-ttl-mode取值为expire-msec时,需要配置为可以解析成Long型的字符串。例如5000,表示5000ms后key过期。 当key-ttl-mode取值为expire-at-date时,需要配置为Date类型字符串,例如2011-12-03T10:15:30,表示到期时间为北京时间2011-12-03 18:15:30。 当key-ttl-mode取值为expire-at-timestamp时,需要配置为timestamp类型字符串,单位为毫秒。例如1679385600000,表示到期时间为2023-03-21 16:00:00。
  • 说明 语法 描述 join_condition join逻辑判断条件。 and 逻辑运算符:与。 or 逻辑运算符:或。 not 逻辑运算符:非。 ( 子逻辑判断条件开始。 ) 子逻辑判断条件结束。 condition 逻辑判断条件。 const_set 常量集合,元素间逗号分隔。 in 关键字,用于判断属性是否在一个集合中。 atrrs_value_set_expr 属性值集合。 attr_expr 属性表达式。 Equality and inequality 等式与不等式,详情请参见关系运算符。 pattern_string 模式匹配字符串,支持通配符匹配。WHERE LIKE条件过滤时,支持SQL通配符中“%”与“_”,“%”代表一个或多个字符,“_”仅代表一个字符。
  • 参数说明 表1 参数说明 参数 是否必选 说明 expr 是 待计算返回结果的表达式。 ignore_nulls 否 BOOLEAN类型,表示是否忽略NULL值。默认值为False。 当参数的值为True时,返回窗口中第一条非NULL的值。 partition_clause 否 指定分区。分区列的值相同的行被视为在同一个窗口内。 orderby_clause 否 指定数据在一个窗口内如何排序。 frame_clause 否 用于确定数据边界。
  • 示例代码 为便于理解函数的使用方法,本文为您提供源数据,基于源数据提供函数相关示例。创建表logs,并添加数据,命令示例如下: create table logs( cookieid string, createtime string, url string ) STORED AS parquet; 添加数据如下: cookie1 2015-04-10 10:00:02 url2 cookie1 2015-04-10 10:00:00 url1 cookie1 2015-04-10 10:03:04 url3 cookie1 2015-04-10 10:50:05 url6 cookie1 2015-04-10 11:00:00 url7 cookie1 2015-04-10 10:10:00 url4 cookie1 2015-04-10 10:50:01 url5 cookie2 2015-04-10 10:00:02 url22 cookie2 2015-04-10 10:00:00 url11 cookie2 2015-04-10 10:03:04 url33 cookie2 2015-04-10 10:50:05 url66 cookie2 2015-04-10 11:00:00 url77 cookie2 2015-04-10 10:10:00 url44 cookie2 2015-04-10 10:50:01 url55 示例:将所有记录根据cookieid分组,并按createtime升序排列,返回每组中的最后一行数据。命令示例如下 SELECT cookieid, createtime, url, LAST_VALUE(url) OVER(PARTITION BY cookieid ORDER BY createtime) AS last FROM logs; -- 返回结果: cookieid createtime url last cookie1 2015-04-10 10:00:00 url1 url1 cookie1 2015-04-10 10:00:02 url2 url2 cookie1 2015-04-10 10:03:04 url3 url3 cookie1 2015-04-10 10:10:00 url4 url4 cookie1 2015-04-10 10:50:01 url5 url5 cookie1 2015-04-10 10:50:05 url6 url6 cookie1 2015-04-10 11:00:00 url7 url7 cookie2 2015-04-10 10:00:00 url11 url11 cookie2 2015-04-10 10:00:02 url22 url22 cookie2 2015-04-10 10:03:04 url33 url33 cookie2 2015-04-10 10:10:00 url44 url44 cookie2 2015-04-10 10:50:01 url55 url55 cookie2 2015-04-10 10:50:05 url66 url66 cookie2 2015-04-10 11:00:00 url77 url77 截止到当前行的最后一个值,其实就是它本身。
  • 示例2:创建OBS分区表 示例说明:创建一个名为student的分区表,该分区表使用院系编号(facultyNo)和班级编号(classNo)进行分区。该student表会同时按照不同的院系编号(facultyNo)和不同的班级编号(classNo)分区。 在实际的使用过程中,您可以选择合适的分区字段并将其添加到PARTITIONED BY关键字后的括号内。 1 2 3 4 5 6 7 CREATE TABLE IF NOT EXISTS student ( Name STRING, facultyNo INT, classNo INT) USING csv OPTIONS (path 'obs://bucketName/filePath') PARTITIONED BY (facultyNo, classNo);
  • 示例1:创建OBS非分区表 示例说明:创建名为table1的OBS非分区表,使用USING关键字指定该表的存储格式为orc格式。 在您的实际使用中,可以将obs表存储为parquet、json、avro等类型。 1 2 3 4 5 CREATE TABLE IF NOT EXISTS table1 ( col_1 STRING, col_2 INT) USING orc OPTIONS (path 'obs://bucketName/filePath');
  • 示例6:创建OBS非分区表,自定义表的OPTIONS参数 示例说明:CSV表是一种以逗号分隔的纯文本文件格式,用于存储和交换数据。它通常用于简单的数据交换,但是它没有结构化数据的概念,因此不适合存储复杂数据类型。于是当file_format为csv时,支持配置更多的OPTIONS参数(参考表3)。 本例创建一个名为table4且存储格式为csv非分区表并使用了额外的OPTIONS参数对数据加以约束。 delimiter:数据分隔符,表示使用逗号(,)作为数据之间的分隔符; quote:引用字符,表示使用双引号(”)来表示数据中的引用信息; escape:转义字符,表示使用反斜杠(\)作为数据存储时的转义字符; multiLine:设置需要存储的列数据中不包含回车符或者换行符; dataFormat:表示该csv文件中data字段的指定日期格式为yyyy-MM-dd; timestamoFormat:表示该csv文件中会将时间戳格式指定为yyyy-MM-dd HH:mm:ss; header:表示该csv表中包含表头信息; nullValue:表示设置null来表示csv表中的null值; comment:表示该csv表使用斜杠(/)表示注释的开头; compression:表示该csv表被压缩,此处csv表支持gzip、bzip2和deflate的压缩格式,若不需要压缩,也可以设置为none; encoding:表示该表使用utf-8的数据编码格式,在实际使用中,可以根据您的需求选择utf-8、gb2312和gbk中任一种编码格式,其中默认编码格式为utf-8。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CREATE TABLE IF NOT EXISTS table4 ( col_1 STRING, col_2 INT ) USING csv OPTIONS ( path 'obs://bucketName/filePath', delimiter = ',', quote = '#', escape = '|', multiline = false, dateFormat = 'yyyy-MM-dd', timestampFormat = 'yyyy-MM-dd HH:mm:ss', mode = 'failfast', header = true, nullValue = 'null', comment = '*', compression = 'deflate', encoding = 'utf - 8' );
共100000条