Flink SQL CLI启动
SQL客户端旨在提供一种简单的方式,无需一行Java或Scala代码,即可将表程序编写、调试和提交到Flink集群。SQL客户机CLI允许检索和可视化命令行上运行的分布式应用程序的实时结果。
SQL客户机绑定在常规Flink发行版中,因此可以开箱即用。它只需要一个正在运行的Flink集群,其中可以执行表程序。
环境准备
可以自己安装flink环境,也可以通过docker一键安装 :
github 下载sql-raining
https://github.com/ververica/sql-training
使用docker执行:
docker-compose up -d
我这里是在Linux虚拟机上安装的Docker,建议Docker内存4G左右。
使用 Docker Compose 来安装,包含了所需的各种服务的容器,包括:
- Flink SQL Client:用来提交query,以及可视化结果
- Flink JobManager 和 TaskManager:用来运行 Flink SQL 任务。
- Apache Kafka:用来生成输入流和写入结果流。
- Apache Zookeeper:Kafka 的依赖项
- ElasticSearch:用来写入结果
docker-compose 命令会启动所有所需的容器。第一次运行的时候,Docker 会自动地从 Docker Hub 下载镜像,这可能会需要一段时间(将近 2.3GB)。
运行成功的话,可以在 http://localhost:8081 访问到 Flink Web UI
运行 Flink SQL CLI 客户端
docker环境中运行方式:
docker-compose exec sql-client ./sql-client.sh
该命令会在容器中启动 Flink SQL CLI 客户端.
自己安装的环境(我这里使用自己安装的flink环境):
./bin/start-cluster.sh
./bin/sql-client.sh embedded
默认情况下,SQL客户端将读取环境文件./conf/sql-client-defaults.yaml中的配置
运行SQL查询
help
使用HELP命令列出所有可用的SQL语句
SELECT
select 'hello world';
该查询不需要表源,只生成一行结果。CLI将从集群中检索结果并将其可视化。您可以通过按Q键关闭结果视图。
CLI支持两种模式来维护和可视化结果。
表模式在内存中实现结果,并以规则的分页表表示将结果可视化。它可以通过在CLI中执行以下命令来启用:
SET execution.result-mode=table;
变更日志模式不会物化结果,而是可视化由插入(+)和撤销(-)组成的连续查询生成的结果流。
SET execution.result-mode=changelog;
使用如下代码验证,该查询执行一个有界word count示例:
SELECT name, COUNT(*) AS cnt FROM (VALUES ('Bob'), ('Alice'), ('Greg'), ('Bob')) AS NameTable(name) GROUP BY name;
表模式下结果:
变更日志模式结果:
在这两种模式中,结果都存储在SQL客户机的Java堆内存中。为了保持CLI接口的响应,变更日志模式只显示最新的1000个更改。table模式允许在较大的结果中导航,这些结果只受可用主内存和配置的最大行数(max-table-result-rows)的限制。
在批处理环境中执行的查询只能使用表结果模式检索。
配置
可以使用以下可选CLI命令启动SQL客户机。
通过help查看命令选项:
./bin/sql-client.sh embedded --help
我们可以看到,可以通过-e指定配置环境等。
环境文件
SQL查询需要一个执行它的配置环境。所谓的环境文件定义了可用的表源和接收、外部目录、用户定义的函数以及执行和部署所需的其他属性。
每个环境文件都是一个常规YAML文件。之前说了默认会选择读取环境文件./conf/sql-client-defaults.yaml中的配置。我们可以自己设置yaml文件。
文件的示例:
# Define tables here such as sources, sinks, views, or temporal tables.
tables:
- name: MyTableSource
type: source-table
update-mode: append
connector:
type: filesystem
path: "/path/to/something.csv"
format:
type