云服务器内容精选

  • ClickHouse应用开发流程介绍 开发流程中各阶段的说明如图1和表1所示。 图1 ClickHouse应用程序开发流程 表1 ClickHouse应用开发的流程说明 阶段 说明 参考文档 了解基本概念 在开始开发应用前,需要了解ClickHouse的基本概念。 基本概念 准备开发和运行环境 ClickHouse的应用程序支持多种语言开发,主要为Java语言,推荐使用IntelliJ IDEA工具,请根据指导完成开发环境配置。 准备ClickHouse应用开发和运行环境 根据场景开发工程 提供样例工程,帮助用户快速了解ClickHouse各部件的编程接口。 导入并配置ClickHouse样例工程 运行程序及查询结果 用户可以直接通过运行结果查看应用程序运行情况。 在本地Windows环境中调测ClickHouse应用( MRS 3.3.0之前版本) 在Linux环境中调测ClickHouse应用(MRS 3.3.0之前版本) 父主题: ClickHouse开发指南(安全模式)
  • HBase接口类型介绍 由于HBase本身是由java语言开发出来的,且java语言具有简洁通用易懂的特性,推荐用户使用java语言进行HBase应用程序开发。 HBase采用的接口与Apache HBase保持一致。 HBase通过接口调用,可提供的功能如表1所示。 表1 HBase接口提供的功能 功能 说明 CRUD数据读写功能 增查改删。 高级特性 过滤器、二级索引、协处理器。 管理功能 表管理、集群管理。
  • HBase介绍 HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。HBase设计目标是用来解决关系型数据库在处理海量数据时的局限性。 HBase使用场景有如下几个特点: 处理海量数据(TB或PB级别以上)。 具有高吞吐量。 在海量数据中实现高效的随机读取。 具有很好的伸缩能力。 能够同时处理结构化和非结构化的数据。 不需要完全拥有传统关系型数据库所具备的ACID特性。ACID特性指原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 HBase中的表具有如下特点: 大:一个表可以有上亿行,上百万列。 面向列:面向列(族)的存储和权限控制,列(族)独立检索。 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
  • HBase常用概念 过滤器 过滤器提供了非常强大的特性来帮助用户提高HBase处理表中数据的效率。用户不仅可以使用HBase中预定义好的过滤器,而且可以实现自定义的过滤器。 协处理器 允许用户执行region级的操作,并且可以使用与RDBMS中触发器类似的功能。 keytab文件 存放用户信息的密钥文件。在安全模式下,应用程序采用此密钥文件进行API方式认证。 Client 客户端直接面向用户,可通过Java API、HBase Shell或者Web UI访问服务端,对HBase的表进行读写操作。本文中的HBase客户端特指HBase client的安装包,可参考HBase对外接口介绍。
  • Structured Streaming常用概念 Input Source 输入数据源,数据源需要支持根据offset重放数据,不同的数据源有不同的容错性。 Sink 数据输出,Sink要支持幂等性写入操作,不同的sink有不同的容错性。 outputMode 结果输出模式,当前支持3种输出模: Complete Mode:整个更新的结果集都会写入外部存储。整张表的写入操作将由外部存储系统的连接器完成。 Append Mode:当时间间隔触发时,只有在Result Table中新增加的数据行会被写入外部存储。这种方式只适用于结果集中已经存在的内容不希望发生改变的情况下,如果已经存在的数据会被更新,不适合适用此种方式。 Update Mode:当时间间隔触发时,只有在Result Table中被更新的数据才会被写入外部存储系统。注意,和Complete Mode方式的不同之处是不更新的结果集不会写入外部存储。 Trigger 输出触发器,当前支持以下几种trigger: 默认:以微批模式执行,每个批次完成后自动执行下个批次。 固定间隔:固定时间间隔执行。 一次执行:只执行一次query,完成后退出。 连续模式:实验特性,可实现低至1ms延迟的流处理(推荐100ms)。 Structured Streaming支持微批模式和连续模式。微批模式不能保证对数据的低延迟处理,但是在相同时间下有更大的吞吐量;连续模式适合毫秒级的数据处理延迟,当前暂时还属于实验特性。 在当前版本中,若需要使用流流Join功能,则output模式只能选择append模式。 图6 微批模式运行过程简图 图7 连续模式运行过程简图
  • Spark简介 Spark是分布式批处理框架,提供分析挖掘与迭代式内存计算能力,支持多种语言(Scala/Java/Python)的应用开发。 适用以下场景: 数据处理(Data Processing):可以用来快速处理数据,兼具容错性和可扩展性。 迭代计算(Iterative Computation):支持迭代计算,有效应对多步的数据处理逻辑。 数据挖掘(Data Mining):在海量数据基础上进行复杂的挖掘分析,可支持各种数据挖掘和机器学习算法。 流式处理(Streaming Processing):支持秒级延迟的流式处理,可支持多种外部数据源。 查询分析(Query Analysis):支持标准SQL查询分析,同时提供DSL(DataFrame), 并支持多种外部输入。 本文档重点介绍Spark、Spark SQL和Spark Streaming应用开发指导。
  • Spark开发接口简介 Spark支持使用Scala、Java和Python语言进行程序开发,由于Spark本身是由Scala语言开发出来的,且Scala语言具有简洁易懂的特性,推荐用户使用Scala语言进行Spark应用程序开发。 按不同的语言分类,Spark的API接口如表1所示。 表1 Spark API接口 接口类型 说明 Scala API 提供Scala语言的API,Spark Core、SparkSQL和Spark Streaming模块的常用接口请参见Spark Scala API接口介绍。 Java API 提供Java语言的API,Spark Core、SparkSQL和Spark Streaming模块的常用接口请参见Spark Java API接口介绍。 Python API 提供Python语言的API,Spark Core、SparkSQL和Spark Streaming模块的常用接口请参见Spark Python API接口介绍。 按不同的模块分,Spark Core和Spark Streaming使用上表中的API接口进行程序开发。而SparkSQL模块,支持CLI或者JD BCS erver两种方式访问。其中JDB CS erver的连接方式也有Beeline和JDBC客户端代码两种。详情请参见Spark JDBCServer接口介绍。 spark-sql脚本、spark-shell脚本和spark-submit脚本(运行的应用中带SQL操作),不支持使用proxy user参数去提交任务。另外,由于本文档中涉及的样例程序已添加安全认证,建议不要使用proxy user参数去提交任务。
  • Spark Streaming常用概念 Dstream DStream(又称Discretized Stream)是Spark Streaming提供的抽象概念。 DStream表示一个连续的数据流,是从数据源获取或者通过输入流转换生成的数据流。从本质上说,一个DStream表示一系列连续的RDD。RDD是一个只读的、可分区的分布式数据集。 DStream中的每个RDD包含了一个区间的数据。如图4所示。 图4 DStream与RDD关系 应用到DStream上的所有算子会被转译成下层RDD的算子操作,如图5所示。这些下层的RDD转换会通过Spark引擎进行计算。DStream算子隐藏大部分的操作细节,并且提供了方便的High-level API给开发者使用。 图5 DStream算子转译
  • Spark SQL常用概念 DataSet DataSet是一个由特定域的对象组成的强类型集合,可通过功能或关系操作并行转换其中的对象。 每个Dataset还有一个非类型视图,即由多个列组成的DataSet,称为DataFrame。 DataFrame是一个由多个列组成的结构化的分布式数据集合,等同于关系数据库中的一张表,或者是R/Python中的data frame。DataFrame是Spark SQL中的最基本的概念,可以通过多种方式创建,例如结构化的数据集、Hive表、外部数据库或者是RDD。
  • 查询结果验证 切换到u1账号连接集群。 1 SET ROLE u1 PASSWORD '*********'; 查询v1视图,u1仅能查询到视图v1数据。 1 2 3 4 5 6 SELECT * FROM dbadmin.v1; id | province_id | user_info ----+-------------+----------- 1 | 1 | Alice 2 | 1 | Jack (2 rows) 若u1试图查询视图v2中的数据,则会返回如下报错: 1 2 SELECT * FROM dbadmin.v2; ERROR: SELECT permission denied to user "u1" for relation "dbadmin.v2" 结果显示用户u1仅能查看省份1(即province_id=1)的数据。 使用u2账号连接集群。 1 SET ROLE u2 PASSWORD '*********'; 查询v2视图,u2仅能查询到视图v2数据。 1 2 3 4 5 SELECT * FROM dbadmin.v2; id | province_id | user_info ----+-------------+----------- 3 | 2 | Jack (1 row) 若u2试图查询视图v1中的数据,则会返回如下报错: 1 2 SELECT * FROM dbadmin.v1; ERROR: SELECT permission denied to user "u2" for relation "dbadmin.v1" 结果显示用户u2仅能查看省份2(即province_id=2)的数据。
  • 实现方式 通过创建视图实现上述场景中的需求,具体操作步骤如下: dbadmin用户连接集群后,在dbadmin模式下为省份1和省份2分别创建视图v1和视图v2。 使用CREATE VIEW语句创建查询省份1数据的视图v1: 1 2 CREATE VIEW v1 AS SELECT * FROM customer WHERE province_id=1; 使用CREATE VIEW语句创建查询省份2数据的视图v2: 1 2 CREATE VIEW v2 AS SELECT * FROM customer WHERE province_id=2; 创建用户u1和u2。 1 2 CREATE USER u1 PASSWORD '*********'; CREATE USER u2 PASSWORD '*********'; 使用GRANT语句将对应的数据查询权限授予目标用户。 授予u1和u2对应视图schema的权限。 1 GRANT USAGE ON schema dbadmin TO u1,u2; 授予u1通过v1视图查询省份1数据的权限: 1 GRANT SELECT ON v1 TO u1; 授予u2通过v2视图查询省份2数据的权限: 1 GRANT SELECT ON v2 TO u2;
  • 场景 dbadmin用户连接集群后,创建示例表customer: 1 CREATE TABLE customer (id bigserial NOT NULL, province_id bigint NOT NULL, user_info varchar, primary key (id)) DISTRIBUTE BY HASH(id); 向示例表customer插入测试数据: 1 2 INSERT INTO customer(province_id,user_info) VALUES (1,'Alice'),(1,'Jack'),(2,'Jack'),(3,'Matu'); INSERT 0 4 查询示例表customer: 1 2 3 4 5 6 7 8 SELECT * FROM customer; id | province_id | user_info ----+-------------+----------- 3 | 2 | Jack 1 | 1 | Alice 2 | 1 | Jack 4 | 3 | Matu (4 rows)
  • 响应示例 { "security_group": { "id": "16b6e77a-08fa-42c7-aa8b-106c048884e6", "name": "qq", "description": "", "vpc_id": "3ec3b33f-ac1c-4630-ad1c-7dba1ed79d85", "enterprise_project_id": "0aad99bc-f5f6-4f78-8404-c598d76b0ed2", "security_group_rules": [ { "id": "f11a3824-ac19-4fad-b4f1-c5f4a6dd0a80", "tenant_id": "060576782980d5762f9ec014dd2f1148", "security_group_id": "69c999ad-d9ef-4d79-94fd-35e6ceb75325", "remote_group_id": "69c999ad-d9ef-4d79-94fd-35e6ceb75325", "direction": "ingress", "protocol": null, "description": "", "ethertype": "IPv6", "remote_ip_prefix": null, "remote_address_group_id": null, "port_range_max": null, "port_range_min": null }, { "id": "3d6480e8-9ea4-46dc-bb1b-8db190cd5677", "tenant_id": "060576782980d5762f9ec014dd2f1148", "security_group_id": "69c999ad-d9ef-4d79-94fd-35e6ceb75325", "remote_group_id": null, "direction": "egress", "protocol": null, "description": "", "ethertype": "IPv6", "remote_ip_prefix": null, "remote_address_group_id": null, "port_range_max": null, "port_range_min": null }, { "id": "9581f18c-1fdd-43da-ace9-7758a56ef28a", "tenant_id": "060576782980d5762f9ec014dd2f1148", "security_group_id": "69c999ad-d9ef-4d79-94fd-35e6ceb75325", "remote_group_id": null, "direction": "egress", "protocol": null, "description": "", "ethertype": "IPv4", "remote_ip_prefix": null, "remote_address_group_id": null, "port_range_max": null, "port_range_min": null }, { "id": "a3ba270e-e58b-432d-a912-aeb7eace9fb8", "tenant_id": "060576782980d5762f9ec014dd2f1148", "security_group_id": "69c999ad-d9ef-4d79-94fd-35e6ceb75325", "remote_group_id": "69c999ad-d9ef-4d79-94fd-35e6ceb75325", "direction": "ingress", "protocol": null, "description": "", "ethertype": "IPv4", "remote_ip_prefix": null, "remote_address_group_id": null, "port_range_max": null, "port_range_min": null } ] } }
  • 请求示例 创建一个安全组,命名为sg-01,所在vpc id为3ec3b33f-ac1c-4630-ad1c-7dba1ed79d85。 POST https://{Endpoint}/v1/{project_id}/security-groups { "security_group": { "name": "sg-01", "vpc_id": "3ec3b33f-ac1c-4630-ad1c-7dba1ed79d85", "enterprise_project_id": "0aad99bc-f5f6-4f78-8404-c598d76b0ed2" } }
  • 请求参数 表2 请求参数 名称 是否必选 参数类型 说明 security_group 是 security_group object 安全组对象,请参见表3。 表3 security_group字段说明 名称 是否必选 参数类型 说明 name 是 String 功能说明:安全组名称。 取值范围:1-64个字符,支持数字、字母、中文、_(下划线)、-(中划线)、.(点)。 vpc_id 否 String 安全组所在的vpc的资源标识。 说明: 当前该参数只作提示用,不约束安全组在此vpc下,不建议继续使用。 enterprise_project_id 否 String 功能说明:企业项目ID。创建安全组时,给安全组绑定企业项目ID。 取值范围:最大长度36字节,带“-”连字符的UUID格式,或者是字符串“0”。“0”表示默认企业项目。 说明: 关于企业项目ID的获取及企业项目特性的详细信息,请参见《企业管理用户指南》。