ZhangZhihui's Blog  

Flink SQL Client 是 Flink 自带的一个命令行工具,允许用户以交互的方式编写和提交 SQL 任务。

以下是进入该界面的步骤以及在面试中需要注意的细节:


1. 进入 Flink SQL Client 的步骤

要启动 SQL Client,你首先需要有一个正在运行的 Flink 集群(本地或远程)。

  1. 启动集群(以本地为例): 在 Flink 安装目录下执行:

    ./bin/start-cluster.sh
    
  2. 启动 SQL 客户端: 执行以下命令进入交互界面:

    ./bin/sql-client.sh
    

    成功进入后,你会看到一个非常经典的 ASCII 艺术风格的松鼠(Flink Logo)


2. 两种执行模式

“SQL Client 提交的任务是怎么运行的?”

两种模式:

  • 嵌入式模式 (Embedded Mode): 默认模式。SQL Client 进程本身就是一个简易的驱动程序,直接与集群通信。

  • 网关模式 (Gateway Mode): 通过 flink-sql-gateway 运行。这种模式下,SQL Client 只是一个远程客户端,适合生产环境的多用户并发访问。


3. 进入界面后的常用指令

进入界面后,你可以执行以下命令来检查环境:

指令 用途
HELP; 查看所有支持的 SQL 语法和命令
SHOW CATALOGS; 查看当前配置的元数据目录
SET 'sql-client.execution.result-mode' = 'tableau'; 将查询结果以表格形式直接打印在控制台
SET 'execution.runtime-mode' = 'streaming'; 设置为流处理模式(默认)或 batch 批处理模式

4. 另一种“界面”:Flink Web UI

如果你的意思是可视化查看 SQL 任务的运行状态,那么应该进入 Flink Web UI

  1. 默认地址通常是:http://localhost:8081

  2. 在 Web UI 中,你不能直接编写 SQL,但可以查看 SQL 任务转换后的 拓扑图 (Plan)、反压 (Backpressure) 情况和 Checkpoint 状态。


5. 进阶:如何集成 Hive 或 Kafka?

如何通过配置文件进入 SQL 界面并加载持久化元数据?

  • SQL Client 配置文件: 在新版本中,可以通过 sql-gateway-defaults.yaml 或直接在启动时指定 -i (init file) 来加载环境。

  • Catalog 配置: 只有配置了 Hive Catalog,你进入 SQL 界面后才能看到以前创建过的表,否则 SQL Client 重启后表信息会丢失。


我在 SQL Client 里执行了一个 SELECT 查询,为什么控制台一直转圈不出结果?

  1. 检查数据源: 是否有数据实时流入?

  2. 检查结果模式: 默认模式可能是 changelog,建议切换为 tableau 模式观察。

  3. 检查资源: 检查 Web UI,看 TaskManager 是否有足够的 Slot 来运行这个 Query 任务。

你想了解如何通过 Flink SQL Gateway 在 Web 端(如 Zeppelin)通过图形化界面写 SQL 吗?这在企业级开发中更常用。

 

想。

 

在企业级开发中,直接用命令行(SQL Client)的情况其实不多,更多是使用 Apache ZeppelinFlink SQL Gateway 这种图形化或服务化的方式。


1. 为什么企业更倾向于可视化 SQL 界面?

  • 多用户协作: 命令行不支持多人同时在线开发。

  • 结果持久化: 命令行关掉,查询出的结果就没了;Zeppelin 可以保存查询历史。

  • 可视化图表: Flink SQL 查出的流数据,在 Zeppelin 里可以直接转成实时的折线图或柱状图。


2. 通过 Zeppelin 连接 Flink SQL

Zeppelin 是目前 Flink 官方最推荐的可视化笔记本工具。

如何配置进入:

  1. 安装配置:zeppelin-site.xml 中配置 flink.interpreter,指向你的 Flink 安装目录。

  2. 创建 Note: 进入 Zeppelin 网页(默认 8080 端口),新建一个 Note。

  3. 编写 SQL: 使用 %flink.ssql (Streaming SQL) 或 %flink.bsql (Batch SQL) 标识。


3. 通过 Flink SQL Gateway (中台化方案)

如果你的公司在做“实时计算平台”,那么 SQL Gateway 就是核心。

  • 它的角色: 它像是一个“翻译官”。它暴露 REST API,接收来自 Web 端的 SQL 代码,然后把它提交给远端的 Flink 集群。

  • 优势: 它可以管理 Session(会话)。这意味着你在这个界面定义的视图(View)或临时表,在另一个界面也能访问到。


4. Flink SQL 执行流程

当你点击界面上的“运行”按钮时,底层发生了什么?面试时按这个顺序说:

  1. SQL 解析 (Parser): 将 SQL 文本解析为 SqlNode(抽象语法树 AST)。

  2. 校验 (Validator): 结合 Catalog(元数据)检查表名、列名、数据类型是否存在。

  3. 优化 (Optimizer): Flink 使用 Apache Calcite 将 SqlNode 转换成 RelNode,进行逻辑优化(如谓词下推、剪枝)。

  4. 物理计划生成: 将逻辑计划转换为 ExecNode

  5. 转换 (Translate): 将 ExecNode 转换成 Flink 底层的 Transformation(即 Java 代码层次的算子)。

  6. 提交: 封装成 JobGraph 发送到 JobManager。


5. Flink SQL相关问题

  • Flink SQL 如何做维表关联(Lookup Join)?

    • 通常使用 FOR SYSTEM_TIME AS OF 语法,这需要维表实现 LookupTableSource 接口(比如连接 Redis 或 HBase)。

  • Flink SQL 如何保证 Exactly-once?

    • 主要是通过开启 Checkpoint。在 SQL 界面中,你可以通过 SET 'execution.checkpointing.interval' = '10s'; 来开启。

 

(airflow-venv) frank@ZZHPC:~$ sql-client.sh

                                   ▒▓██▓██▒
                               ▓████▒▒█▓▒▓███▓▒
                            ▓███▓░░        ▒▒▒▓██▒  ▒
                          ░██▒   ▒▒▓▓█▓▓▒░      ▒████
                          ██▒         ░▒▓███▒    ▒█▒█▒
                            ░▓█            ███   ▓░▒██
                              ▓█       ▒▒▒▒▒▓██▓░▒░▓▓█
                            █░ █   ▒▒░       ███▓▓█ ▒█▒▒▒
                            ████░   ▒▓█▓      ██▒▒▒ ▓███▒
                         ░▒█▓▓██       ▓█▒    ▓█▒▓██▓ ░█░
                   ▓░▒▓████▒ ██         ▒█    █▓░▒█▒░▒█▒
                  ███▓░██▓  ▓█           █   █▓ ▒▓█▓▓█▒
                ░██▓  ░█░            █  █▒ ▒█████▓▒ ██▓░▒
               ███░ ░ █░          ▓ ░█ █████▒░░    ░█░▓  ▓░
              ██▓█ ▒▒▓▒          ▓███████▓░       ▒█▒ ▒▓ ▓██▓
           ▒██▓ ▓█ █▓█       ░▒█████▓▓▒░         ██▒▒  █ ▒  ▓█▒
           ▓█▓  ▓█ ██▓ ░▓▓▓▓▓▓▓▒              ▒██▓           ░█▒
           ▓█    █ ▓███▓▒░              ░▓▓▓███▓          ░▒░ ▓█
           ██▓    ██▒    ░▒▓▓███▓▓▓▓▓██████▓▒            ▓███  █
          ▓███▒ ███   ░▓▓▒░░   ░▓████▓░                  ░▒▓▒  █▓
          █▓▒▒▓▓██  ░▒▒░░░▒▒▒▒▓██▓░                            █▓
          ██ ▓░▒█   ▓▓▓▓▒░░  ▒█▓       ▒▓▓██▓    ▓▒          ▒▒▓
          ▓█▓ ▓▒█  █▓░  ░▒▓▓██▒            ░▓█▒   ▒▒▒░▒▒▓█████▒
           ██░ ▓█▒█▒  ▒▓▓▒  ▓█                █░      ░░░░   ░█▒
           ▓█   ▒█▓   ░     █░                ▒█              █▓
            █▓   ██         █░                 ▓▓        ▒█▓▓▓▒█░
             █▓ ░▓██░       ▓▒                  ▓█▓▒░░░▒▓█░    ▒█
              ██   ▓█▓░      ▒                    ░▒█▒██▒      ▓▓
               ▓█▒   ▒█▓▒░                         ▒▒ █▒█▓▒▒░░▒██
                ░██▒    ▒▓▓▒                     ▓██▓▒█▒ ░▓▓▓▓▒█▓
                  ░▓██▒                          ▓░  ▒█▓█  ░░▒▒▒
                      ▒▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▓▓  ▓░▒█░

    ______ _ _       _       _____  ____  _         _____ _ _            _  BETA
   |  ____| (_)     | |     / ____|/ __ \| |       / ____| (_)          | |
   | |__  | |_ _ __ | | __ | (___ | |  | | |      | |    | |_  ___ _ __ | |_
   |  __| | | | '_ \| |/ /  \___ \| |  | | |      | |    | | |/ _ \ '_ \| __|
   | |    | | | | | |   <   ____) | |__| | |____  | |____| | |  __/ | | | |_
   |_|    |_|_|_| |_|_|\_\ |_____/ \___\_\______|  \_____|_|_|\___|_| |_|\__|

        Welcome! Enter 'HELP;' to list all available commands. 'QUIT;' to exit.

Command history file path: /home/frank/.flink-sql-history

Flink SQL> SHOW CATALOGS;
+-----------------+
|    catalog name |
+-----------------+
| default_catalog |
+-----------------+
1 row in set

Flink SQL>

 

(airflow-venv) frank@ZZHPC:~$ sql-gateway.sh
Starting sql-gateway daemon on host ZZHPC.

 

posted on 2025-12-22 18:32  ZhangZhihuiAAA  阅读(1)  评论(0)    收藏  举报