From 8f7b2c66401034b3238dc40238f42b0afe2de31d Mon Sep 17 00:00:00 2001 From: Ada Wong Date: Sat, 12 Mar 2022 17:07:35 +0800 Subject: [PATCH] [KYUUBI #1866][DOCS] Add flink sql engine quick start ### _Why are the changes needed?_ Add quick start documents of the Flink SQL Engine. ### _How was this patch tested?_ - [ ] Add some test cases that check the changes thoroughly including negative and positive cases if possible - [ ] Add screenshots for manual tests if appropriate - [x] [Run test](https://kyuubi.apache.org/docs/latest/develop_tools/testing.html#running-tests) locally before make a pull request Closes #2106 from deadwind4/KYUUBI-1866-quickstart. Closes #1866 2533aafd [Ada Wong] remove Yarn section 6aa4db8a [Ada Wong] compress png ff6bff72 [Ada Wong] [KYUUBI #1866][DOCS] Add flink sql engine quick start Authored-by: Ada Wong Signed-off-by: Kent Yao --- docs/imgs/flink/flink_jobs_page.png | Bin 0 -> 65991 bytes docs/quick_start/quick_start.md | 159 ++++++++++++++++++++++++---- 2 files changed, 140 insertions(+), 19 deletions(-) create mode 100644 docs/imgs/flink/flink_jobs_page.png diff --git a/docs/imgs/flink/flink_jobs_page.png b/docs/imgs/flink/flink_jobs_page.png new file mode 100644 index 0000000000000000000000000000000000000000..aae22db9b8efa857073803580dc3b6ce4827b385 GIT binary patch literal 65991 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 literal 0 HcmV?d00001 diff --git a/docs/quick_start/quick_start.md b/docs/quick_start/quick_start.md index b03c03494..eeb78b36f 100644 --- a/docs/quick_start/quick_start.md +++ b/docs/quick_start/quick_start.md @@ -36,49 +36,51 @@ You can get the most recent stable release of Apache Kyuubi here: ## Requirements These are essential components required for Kyuubi to startup. -For quick start deployment, the only thing you need is `JAVA_HOME` and `SPARK_HOME` being correctly set. +For quick start deployment, the only thing you need is `JAVA_HOME` being correctly set. The Kyuubi release package you downloaded or built contains the rest prerequisites inside already. Components| Role | Optional | Version | Remarks --- | --- | --- | --- | --- Java | Java
Runtime
Environment | Required | Java 8/11 | Kyuubi is pre-built with Java 8 -Spark | Distributed
SQL
Engine | Required | 3.0.0 and above | By default Kyuubi binary release is delivered without
a Spark tarball. +Spark | Distributed
SQL
Engine | Optional | 3.0.0 and above | By default Kyuubi binary release is delivered without
a Spark tarball. +Flink | Distributed
SQL
Engine | Optional | 1.14.0 and above | By default Kyuubi binary release is delivered without
a Flink tarball. HDFS | Distributed
File
System | Optional | referenced
by
Spark | Hadoop Distributed File System is a
part of Hadoop framework, used to
store and process the datasets.
You can interact with any
Spark-compatible versions of HDFS. Hive | Metastore | Optional | referenced
by
Spark | Hive Metastore for Spark SQL to connect Zookeeper | Service
Discovery | Optional | Any
zookeeper
ensemble
compatible
with
curator(2.12.0) | By default, Kyuubi provides a
embedded Zookeeper server inside for
non-production use. -Additionally, if you want to work with other Spark compatible systems or plugins, you only need to take care of them as using them with regular Spark applications. -For example, you can run Spark SQL engines created by the Kyuubi on any cluster manager, including YARN, Kubernetes, Mesos, e.t.c... -Or, you can manipulate data from different data sources with the Spark Datasource API, e.g. Delta Lake, Apache Hudi, Apache Iceberg, Apache Kudu and e.t.c... +Additionally, if you want to work with other Spark/Flink compatible systems or plugins, you only need to take care of them as using them with regular Spark/Flink applications. +For example, you can run Spark/Flink SQL engines created by the Kyuubi on any cluster manager, including YARN, Kubernetes, Mesos, e.t.c... +Or, you can manipulate data from different data sources with the Spark Datasource/Flink Table API, e.g. Delta Lake, Apache Hudi, Apache Iceberg, Apache Kudu and e.t.c... ## Installation To install Kyuubi, you need to unpack the tarball. For example, ```bash -tar zxf apache-kyuubi-1.3.1-incubating-bin.tgz +tar zxf apache-kyuubi-1.5.0-incubating-bin.tgz ``` -This will result in the creation of a subdirectory named `apache-kyuubi-1.3.1-incubating-bin` shown below, +This will result in the creation of a subdirectory named `apache-kyuubi-1.5.0-incubating-bin` shown below, ```bash -apache-kyuubi-1.3.1-incubating-bin +apache-kyuubi-1.5.0-incubating-bin ├── DISCLAIMER ├── LICENSE ├── NOTICE ├── RELEASE +├── beeline-jars ├── bin ├── conf | ├── kyuubi-defaults.conf.template │ ├── kyuubi-env.sh.template -│ └── log4j.properties.template +│ └── log4j2.properties.template ├── docker │ ├── Dockerfile +│ ├── helm │ ├── kyuubi-configmap.yaml +│ ├── kyuubi-deployment.yaml │ ├── kyuubi-pod.yaml │ └── kyuubi-service.yaml -├── extension -│ └── kyuubi-extension-spark-3-1_2.12-1.3.1-incubating.jar ├── externals │ └── engines ├── jars @@ -97,7 +99,7 @@ From top to bottom are: - bin: the entry of the Kyuubi server with `kyuubi` as the startup script. - conf: all the defaults used by Kyuubi Server itself or creating a session with Spark applications. - externals - - engines: contains all kinds of SQL engines that we support, e.g. Apache Spark, Apache Flink(coming soon). + - engines: contains all kinds of SQL engines that we support, e.g. Apache Spark, Apache Flink, Trino(coming soon). - licenses: a bunch of licenses included. - jars: packages needed by the Kyuubi server. - logs: where the logs of the Kyuubi server locates. @@ -106,7 +108,11 @@ From top to bottom are: ## Running Kyuubi -As mentioned above, for a quick start deployment, then only you need to be sure is that your java runtime environment and `SPARK_HOME` are correct. +As mentioned above, for a quick start deployment, then only you need to be sure is that the below environments are correct: + +- Java runtime environment +- `SPARK_HOME` for the Spark engine +- `FLINK_HOME` and `kyuubi.engine.type` in `$KYUUBI_HOME/conf/kyuubi-defaults.conf` for the Flink engine. ### Setup JAVA @@ -132,7 +138,9 @@ Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.5+10-LTS, mixed mode) The recommended place to set `JAVA_HOME` is `$KYUUBI_HOME/conf/kyuubi-env.sh`, as the ways above are too flaky. The `JAVA_HOME` in `$KYUUBI_HOME/conf/kyuubi-env.sh` will take others' precedence. -### Setup Spark +### Spark Engine + +#### Setup Spark Similar to `JAVA_HOME`, you can also set `SPARK_HOME` in different ways. However, we recommend setting it in `$KYUUBI_HOME/conf/kyuubi-env.sh` too. @@ -142,6 +150,26 @@ For example, SPARK_HOME=~/Downloads/spark-3.2.0-bin-hadoop3.2 ``` +### Flink Engine + +#### Setup Flink + +Similar to `JAVA_HOME`, you can also set `FLINK_HOME` in different ways. However, we recommend setting it in `$KYUUBI_HOME/conf/kyuubi-env.sh` too. + +For example, + +```bash +FLINK_HOME=/Downloads/flink-1.14.3 +``` + +#### Setup Kyuubi Flink Configration + +To enable the Flink SQL engine, the `kyuubi.engine.type` in `$KYUUBI_HOME/conf/kyuubi-defaults.conf` need to be set as `FLINK_SQL`. + +```bash +kyuubi.engine.type FLINK_SQL +``` + ### Starting Kyuubi ```bash @@ -195,7 +223,7 @@ bin/kyuubi run ## Using Hive Beeline -Kyuubi server is compatible with Apache Hive beeline, so you can use `$SPARK_HOME/bin/beeline` for testing. +Kyuubi server is compatible with Apache Hive beeline, so you can use `$KYUUBI_HOME/bin/beeline` for testing. ### Opening a Connection @@ -213,7 +241,7 @@ Beeline version 2.3.7 by Apache Hive In this case, the session will create for the user named 'anonymous'. -Kyuubi will create a Spark SQL engine application using `kyuubi-spark-sql-engine_2.12-.jar`. +Kyuubi will create a Spark/Flink SQL engine application using `kyuubi--sql-engine_2.12-.jar`. It will cost awhile for the application to be ready before fully establishing the session. Otherwise, an existing application will be reused, and the time cost here is negligible. @@ -225,17 +253,28 @@ bin/beeline -u 'jdbc:hive2://localhost:10009/' -n kentyao The formerly created Spark application for user 'anonymous' will not be reused in this case, while a brand new application will be submitted for user 'kentyao' instead. -Then, you can see 3 processes running in your local environment, including one `KyuubiServer` instance and 2 `SparkSubmit` instances as the SQL engines. +Then, you can see two processes running in your local environment, including one `KyuubiServer` instance, one `SparkSubmit` or `FlinkSQLEngine` instances as the SQL engines. + +- Spark ``` 75730 Jps 70843 KyuubiServer 72566 SparkSubmit -75356 SparkSubmit +``` + +- Flink + +``` +43484 Jps +43194 KyuubiServer +43260 FlinkSQLEngine ``` ### Execute Statements +#### Execute Spark SQL Statements + If the beeline session is successfully connected, then you can run any query supported by Spark SQL now. For example, ```logtalk @@ -304,6 +343,88 @@ For example, you can get the Spark web UI from the log for debugging or tuning. ![](../imgs/spark_jobs_page.png) +#### Execute Flink SQL Statements + +If the beeline session is successfully connected, then you can run any query supported by Flink SQL now. For example, + +```logtalk +0: jdbc:hive2://127.0.0.1:10009/default> CREATE TABLE T ( +. . . . . . . . . . . . . . . . . . . . . . > a INT, +. . . . . . . . . . . . . . . . . . . . . . > b VARCHAR(10) +. . . . . . . . . . . . . . . . . . . . . . > ) WITH ( +. . . . . . . . . . . . . . . . . . . . . . > 'connector.type' = 'filesystem', +. . . . . . . . . . . . . . . . . . . . . . > 'connector.path' = 'file:///tmp/T.csv', +. . . . . . . . . . . . . . . . . . . . . . > 'format.type' = 'csv', +. . . . . . . . . . . . . . . . . . . . . . > 'format.derive-schema' = 'true' +. . . . . . . . . . . . . . . . . . . . . . > ); +16:28:47.164 INFO org.apache.kyuubi.operation.ExecuteStatement: Processing anonymous's query[22a73e39-d9d7-479b-a118-33f9d2a5ad3f]: INITIALIZED_STATE -> PENDING_STATE, statement: CREATE TABLE T( +a INT, +b VARCHAR(10) +) WITH ( +'connector.type' = 'filesystem', +'connector.path' = 'file:///tmp/T.csv', +'format.type' = 'csv', +'format.derive-schema' = 'true' +) +16:28:47.187 INFO org.apache.kyuubi.operation.ExecuteStatement: Processing anonymous's query[22a73e39-d9d7-479b-a118-33f9d2a5ad3f]: PENDING_STATE -> RUNNING_STATE, statement: CREATE TABLE T( +a INT, +b VARCHAR(10) +) WITH ( +'connector.type' = 'filesystem', +'connector.path' = 'file:///tmp/T.csv', +'format.type' = 'csv', +'format.derive-schema' = 'true' +) +16:28:47.320 INFO org.apache.kyuubi.operation.ExecuteStatement: Query[22a73e39-d9d7-479b-a118-33f9d2a5ad3f] in FINISHED_STATE +16:28:47.322 INFO org.apache.kyuubi.operation.ExecuteStatement: Processing anonymous's query[22a73e39-d9d7-479b-a118-33f9d2a5ad3f]: RUNNING_STATE -> FINISHED_STATE, statement: CREATE TABLE T( +a INT, +b VARCHAR(10) +) WITH ( +'connector.type' = 'filesystem', +'connector.path' = 'file:///tmp/T.csv', +'format.type' = 'csv', +'format.derive-schema' = 'true' +), time taken: 0.134 seconds ++---------+ +| result | ++---------+ +| OK | ++---------+ +1 row selected (0.341 seconds) +0: jdbc:hive2://127.0.0.1:10009/default> INSERT INTO T VALUES (1, 'Hi'), (2, 'Hello'); +16:28:52.780 INFO org.apache.kyuubi.operation.ExecuteStatement: Processing anonymous's query[d79abf78-d2ae-468f-87b2-19db1fc6e19a]: INITIALIZED_STATE -> PENDING_STATE, statement: INSERT INTO T VALUES (1, 'Hi'), (2, 'Hello') +16:28:52.786 INFO org.apache.kyuubi.operation.ExecuteStatement: Processing anonymous's query[d79abf78-d2ae-468f-87b2-19db1fc6e19a]: PENDING_STATE -> RUNNING_STATE, statement: INSERT INTO T VALUES (1, 'Hi'), (2, 'Hello') +16:28:57.827 INFO org.apache.kyuubi.operation.ExecuteStatement: Query[d79abf78-d2ae-468f-87b2-19db1fc6e19a] in RUNNING_STATE +16:28:59.836 INFO org.apache.kyuubi.operation.ExecuteStatement: Query[d79abf78-d2ae-468f-87b2-19db1fc6e19a] in FINISHED_STATE +16:28:59.837 INFO org.apache.kyuubi.operation.ExecuteStatement: Processing anonymous's query[d79abf78-d2ae-468f-87b2-19db1fc6e19a]: RUNNING_STATE -> FINISHED_STATE, statement: INSERT INTO T VALUES (1, 'Hi'), (2, 'Hello'), time taken: 7.05 seconds ++-------------------------------------+ +| default_catalog.default_database.T | ++-------------------------------------+ +| -1 | ++-------------------------------------+ +1 row selected (7.104 seconds) +0: jdbc:hive2://127.0.0.1:10009/default> +0: jdbc:hive2://127.0.0.1:10009/default> SELECT * FROM T; +16:29:08.092 INFO org.apache.kyuubi.operation.ExecuteStatement: Processing anonymous's query[af5660c0-fcc4-4f80-b3fd-c4a799faf33f]: INITIALIZED_STATE -> PENDING_STATE, statement: SELECT * FROM T +16:29:08.101 INFO org.apache.kyuubi.operation.ExecuteStatement: Processing anonymous's query[af5660c0-fcc4-4f80-b3fd-c4a799faf33f]: PENDING_STATE -> RUNNING_STATE, statement: SELECT * FROM T +16:29:12.519 INFO org.apache.kyuubi.operation.ExecuteStatement: Query[af5660c0-fcc4-4f80-b3fd-c4a799faf33f] in FINISHED_STATE +16:29:12.520 INFO org.apache.kyuubi.operation.ExecuteStatement: Processing anonymous's query[af5660c0-fcc4-4f80-b3fd-c4a799faf33f]: RUNNING_STATE -> FINISHED_STATE, statement: SELECT * FROM T, time taken: 4.419 seconds ++----+--------+ +| a | b | ++----+--------+ +| 1 | Hi | +| 2 | Hello | ++----+--------+ +2 rows selected (4.466 seconds) +``` + +As shown in the above case, you can retrieve all the operation logs, the result schema, and the result to your client-side in the beeline console. + +Additionally, some useful information about the background Flink SQL application associated with this connection is also printed in the operation log. +For example, you can get the Flink web UI from the log for debugging or tuning. + +![](../imgs/flink/flink_jobs_page.png) + ### Closing a Connection Close the session between beeline and Kyuubi server by executing `!quit`, for example, @@ -339,4 +460,4 @@ Bye! The `KyuubiServer` instance will be stopped immediately while the SQL engine's application will still be alive for a while. -If you start Kyuubi again before the SQL engine application terminates itself, it will reconnect to the newly created `KyuubiServer` instance. +If you start Kyuubi again before the SQL engine application terminates itself, it will reconnect to the newly created `KyuubiServer` instance. \ No newline at end of file