Flink系列之:Flink SQL Gateway
一、Flink SQL Gateway
SQL 网关是一项允许多个客户端从远程并发执行 SQL 的服务。它提供了一种简单的方法来提交 Flink 作业、查找元数据并在线分析数据。
SQL 网关由可插入端点和 SqlGatewayService 组成。 SqlGatewayService 是一个由端点重用来处理请求的处理器。端点是允许用户连接的入口点。根据端点的类型,用户可以使用不同的实用程序进行连接。
二、部署
本节介绍如何从命令行设置和运行您的第一个 Flink SQL 程序。
SQL Gateway 捆绑在常规 Flink 发行版中,因此可以开箱即用。它只需要一个正在运行的Flink集群,可以在其中执行表程序。如果您只是想尝试 SQL 客户端,您还可以使用以下命令启动一个由一名工作人员组成的本地集群:
$ ./bin/start-cluster.sh
三、启动SQL Gateway
SQL Gateway 脚本也位于 Flink 的二进制目录中。用户可以通过调用以下方式开始:
$ ./bin/sql-gateway.sh start-Dsql-gateway.endpoint.rest.address=localhost
该命令启动带有 REST 端点的 SQL 网关,该端点侦听地址 localhost:8083。您可以使用curl命令检查REST端点是否可用。
$ curl http://localhost:8083/v1/info
{"productName":"Apache Flink","version":"1.20-SNAPSHOT"}
四、运行 SQL 查询
要验证您的设置和集群连接,您可以执行以下步骤。
第 1 步:打开会话
$ curl--request POST http://localhost:8083/v1/sessions
{"sessionHandle":"..."}
SQL Gateway 使用返回结果中的 sessionHandle 来唯一标识每个活动用户。
第 2 步:执行查询
$ curl--request POST http://localhost:8083/v1/sessions/${sessionHandle}/statements/ --data'{"statement": "SELECT 1"}'{"operationHandle":"..."}
返回结果中的operationHandle用于SQL Gateway唯一标识提交的SQL。
第 3 步:获取结果
有了上面的sessionHandle和operationHandle,就可以取到相应的结果了。
$ curl--request GET http://localhost:8083/v1/sessions/${sessionHandle}/operations/${operationHandle}/result/0
{"results":{"columns":[{"name":"EXPR$0",
"logicalType":{"type":"INTEGER",
"nullable":false}}],
"data":[{"kind":"INSERT",
"fields":[1]}]},
"resultType":"PAYLOAD",
"nextResultUri":"..."}
结果中的nextResultUri如果不为null,则用于获取下一批结果。
$ curl--request GET ${nextResultUri}
五、SQL 网关启动选项
$ ./bin/sql-gateway.sh --help
Usage: sql-gateway.sh [start|start-foreground|stop|stop-all][args]
commands:
start - Run a SQL Gateway as a daemon
start-foreground - Run a SQL Gateway as a console application
stop - Stop the SQL Gateway daemon
stop-all - Stop all the SQL Gateway daemons
-h|--help - Show this help message
对于“start”或“start-foreground”命令,您可以在 CLI 中配置 SQL 网关。
$ ./bin/sql-gateway.sh start --help
Start the Flink SQL Gateway as a daemon to submit Flink SQL.
Syntax: start [OPTIONS]-D<property=value> Use value for given property
-h,--help Show the help message with descriptions of all
options.
六、SQL网关配置
您可以在下面启动 SQL Gateway 时配置 SQL Gateway,或者任何有效的 Flink 配置条目:
$ ./sql-gateway -Dkey=value
keyDefaultTypeDescriptionsql-gateway.session.check-interval1 minDuration空闲会话超时的检查间隔,可以通过设置为零来禁用。sql-gateway.session.idle-timeout10 minDuration当会话在该时间间隔内没有被访问时关闭会话的超时时间。如果设置为零,会话将不会关闭。sql-gateway.session.max-num1000000IntegerSQL Gateway 服务的最大活动会话数。sql-gateway.session.plan-cache.enabledfalseBoolean如果为 true,sql gateway 将缓存并重用每个会话的查询计划。sql-gateway.session.plan-cache.size100Integer计划缓存大小,当
table.optimizer.plan-cache.enabled
为true时生效。sql-gateway.session.plan-cache.ttl1 hourDurationplan缓存的TTL,它控制缓存写入后多久过期,当
table.optimizer.plan-cache.enabled
为true时生效。sql-gateway.worker.keepalive-time5 minDuration空闲工作线程的保持活动时间。当工作线程数超过最小工作线程数时,在此时间间隔后多余的线程将被杀死。sql-gateway.worker.threads.max500Integersql gateway 服务的最大工作线程数。sql-gateway.worker.threads.min5Integersql gateway 服务的最小工作线程数。
七、支持的端点
Flink 原生支持 REST Endpoint 和 HiveServer2 Endpoint。默认情况下,SQL 网关与 REST 端点捆绑在一起。凭借灵活的架构,用户可以通过调用来启动具有指定端点的SQL Gateway
$ ./bin/sql-gateway.sh start -Dsql-gateway.endpoint.type=hiveserver2
或者在Flink配置文件中添加以下配置:
sql-gateway.endpoint.type: hiveserver2
注意:如果 Flink 配置文件中还包含 sql-gateway.endpoint.type 选项,则 CLI 命令具有更高的优先级。
版权归原作者 最笨的羊羊 所有, 如有侵权,请联系我们删除。