Hi Shengkai,

Thanks a lot for your comments! Please see my comments inline.
 
> 1. The FLIP does not specify the kind of SQL that will be submitted with
> the application mode. I believe only a portion of the SQL will be delegated
> to the SqlRunner.

You’re right. For SQL Gateway, only DMLs need to be delegated to the SQL
Driver. I would think about the details and update the FLIP. Do you have some
ideas already?

> 2. Will the SQL Client/Gateway perform any validation before submitting the
> SQL to the SqlRunner? If the user's SQL is invalid, it could take a long

> time to fetch error messages before execution.

Yes, I think so. We could introduce a SQL Gateway option like 
`sql-gateway.application.validate-sql`, which determines if the Gateway
should do the SQL validation by compiling the plan.

> 3. ExecNodeGraph VS SQL File

ExecNodeGraph looks good to me. It’s not efficient to rebuild the 
same TableEnvironment from scratch with SQL files at JobManager.
ExecNodeGraph avoids that.

Then I think SQL Driver should accept SQL files and ExecNodeGraph,
while the former is for public usage and the latter is for internal usage.

> 4. SqlRunner VS ApplicationRunner


ApplicationRunner looks good for SQL Driver at first glance, but 
I’m afraid it has two limitations:

1) IIUC, ApplicationRunner should only be used in application mode, but
SQL Driver actually could be used in other deployment modes as well.
2) As FLIP-85 said, ApplicationRunner doesn’t work well with YARN.

What do you think?

> 5. K8S Application mode

WRT K8s application mode, I think it’s more of the users’ responsibility to
prepare the basic resources by customizing the image.

For non-SQL-gateway scenarios, the image should contain everything 
needed for the SQLs.

For SQL-gateway scenarios, that’s actually a missing part that we need to
discuss. The gateway-generated resources (e.g. ExecNodeGraph) can’t be
accessed at JobManager, unless:

1) use web submission to deploy and run jars
2) mount a distributed storage to both SQL gateway and all nodes that 
    Flink runs on

I lean toward the web submission way but didn’t think through the details yet.

BTW, it seems that we don’t need `pipeline.jars` on K8s, we could put the 
jars into the classpath directly.

> 6. Could you add more details about your modification in the gateway side,
> including error handling, execution workflow, and the impact on job
> statements?

Sure. I’ll let you know when I finish the details.

Paul Lam

> 2023年5月31日 10:56,Shengkai Fang <fskm...@gmail.com> 写道:
> 
> Thanks for the proposal. The Application mode is very important to Flink
> SQL. But I have some questions about the FLIP:
> 
> 1. The FLIP does not specify the kind of SQL that will be submitted with
> the application mode. I believe only a portion of the SQL will be delegated
> to the SqlRunner.
> 2. Will the SQL Client/Gateway perform any validation before submitting the
> SQL to the SqlRunner? If the user's SQL is invalid, it could take a long
> time to fetch error messages before execution.
> 3. ExecNodeGraph VS SQL File
> 
> Initially, we planned to use ExecNodeGraph as the essential information to
> be submitted. By enabling 'table.plan.compile.catalog-objects' = 'all', the
> ExecNodeGraph provides necessary information about the session state.
> ExecNodeGraph contains the basic structure of tables and the class name of
> catalog functions used, which enables us to avoid serializing the catalog
> to the remote. Therefore, we prefer to use ExecGraph as the content
> submitted. Furthermore, our internal implementation can extend ExecGraph
> beyond state compatibility.
> 
> 4. SqlRunner VS ApplicationRunner
> 
> In the FLIP-85, it mentions to support Library mode. Compared to adding a
> new module, I think it's better to extend the origin design? WDYT?
> 
> ApplicationRunner.run((StreamExecutionEnvironment env) -> {
> 
>          … // a consumer of the env
> 
> })
> 
> 5. K8S Application mode
> 
> As far as I know, K8S doesn't support shipping multiple jars to the remote.
> It seems the current design also doesn't support K8S Application mode?
> 
> https://github.com/apache/flink/blob/master/flink-kubernetes/src/main/java/org/apache/flink/kubernetes/KubernetesClusterDescriptor.java#L217
> 
> 6. Could you add more details about your modification in the gateway side,
> including error handling, execution workflow, and the impact on job
> statements?
> 
> Best,
> Shengkai
> 
> Shammon FY <zjur...@gmail.com> 于2023年5月31日周三 10:40写道:
> 
>> Thanks Paul for driving this proposal.
>> 
>> I found the sql driver has no config related options. If I understand
>> correctly, the sql driver can be used to submit sql jobs in a 'job
>> submission service' such as sql-gateway. In general, in addition to the
>> default config for Flink cluster which includes k8s, ha and .etc, users may
>> also specify configurations for SQL jobs, including parallelism, number of
>> Task Managers, etc.
>> 
>> For example, in sql-gateway users can `set` dynamic parameters before
>> submitting a sql statement, and for sql files users may put their
>> configurations in a `yaml` file. Should sql driver support dynamic
>> parameters and specify config file?
>> 
>> Best,
>> Shammon FY
>> 
>> On Tue, May 30, 2023 at 9:57 PM Weihua Hu <huweihua....@gmail.com> wrote:
>> 
>>> Thanks Paul for the proposal.
>>> 
>>> +1 for this. It is valuable in improving ease of use.
>>> 
>>> I have a few questions.
>>> - Is SQLRunner the better name? We use this to run a SQL Job. (Not
>> strong,
>>> the SQLDriver is fine for me)
>>> - Could we run SQL jobs using SQL in strings? Otherwise, we need to
>> prepare
>>> a SQL file in an image for Kubernetes application mode, which may be a
>> bit
>>> cumbersome.
>>> - I noticed that we don't specify the SQLDriver jar in the
>>> "run-application"
>>> command. Does that mean we need to perform automatic detection in Flink?
>>> 
>>> 
>>> Best,
>>> Weihua
>>> 
>>> 
>>> On Mon, May 29, 2023 at 7:24 PM Paul Lam <paullin3...@gmail.com> wrote:
>>> 
>>>> Hi team,
>>>> 
>>>> I’d like to start a discussion about FLIP-316 [1], which introduces a
>> SQL
>>>> driver as the
>>>> default main class for Flink SQL jobs.
>>>> 
>>>> Currently, Flink SQL could be executed out of the box either via SQL
>>>> Client/Gateway
>>>> or embedded in a Flink Java/Python program.
>>>> 
>>>> However, each one has its drawback:
>>>> 
>>>> - SQL Client/Gateway doesn’t support the application deployment mode
>> [2]
>>>> - Flink Java/Python program requires extra work to write a non-SQL
>>> program
>>>> 
>>>> Therefore, I propose adding a SQL driver to act as the default main
>> class
>>>> for SQL jobs.
>>>> Please see the FLIP docs for details and feel free to comment. Thanks!
>>>> 
>>>> [1]
>>>> 
>>> 
>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-316%3A+Introduce+SQL+Driver
>>>> <
>>>> 
>>> 
>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-316:+Introduce+SQL+Driver
>>>>> 
>>>> [2] https://issues.apache.org/jira/browse/FLINK-26541 <
>>>> https://issues.apache.org/jira/browse/FLINK-26541>
>>>> 
>>>> Best,
>>>> Paul Lam
>>> 
>> 

Reply via email to