Hi Jark, Thanks a lot for your input!
> If we decide to submit ExecNodeGraph instead of SQL file, is it still > necessary to support SQL Driver? I think so. Apart from usage in SQL Gateway, SQL Driver could simplify Flink SQL execution with Flink CLI. As the FLIP said, it’s good to have a default main class for Flink SQLs, which allows users to submit Flink SQLs in the same way as DataStream jobs, or else users need to write their own main class. > SQL Driver needs to serialize SessionState which is very challenging > but not detailed covered in the FLIP. With the help of ExecNodeGraph, do we still need the serialized SessionState? If not, we could make SQL Driver accepts two serialized formats: - SQL files for user-facing public usage - ExecNodeGraph for internal usage It’s kind of similar to the relationship between job jars and jobgraphs. > Regarding "K8S doesn't support shipping multiple jars", is that true? Is it > possible to support it? Yes, K8s doesn’t distribute any files. It’s the users’ responsibility to make sure the resources are accessible in the containers. The common solutions I know is to use distributed file systems or use init containers to localize the resources. Now I lean toward introducing a fs to do the distribution job. WDYT? Best, Paul Lam > 2023年6月1日 20:33,Jark Wu <imj...@gmail.com> 写道: > > Hi Paul, > > Thanks for starting this discussion. I like the proposal! This is a > frequently requested feature! > > I agree with Shengkai that ExecNodeGraph as the submission object is a > better idea than SQL file. To be more specific, it should be JsonPlanGraph > or CompiledPlan which is the serializable representation. CompiledPlan is a > clear separation between compiling/optimization/validation and execution. > This can keep the validation and metadata accessing still on the SQLGateway > side. This allows SQLGateway to leverage some metadata caching and UDF JAR > caching for better compiling performance. > > If we decide to submit ExecNodeGraph instead of SQL file, is it still > necessary to support SQL Driver? Regarding non-interactive SQL jobs, users > can use the Table API program for application mode. SQL Driver needs to > serialize SessionState which is very challenging but not detailed covered > in the FLIP. > > Regarding "K8S doesn't support shipping multiple jars", is that true? Is it > possible to support it? > > Best, > Jark > > > > On Thu, 1 Jun 2023 at 16:58, Paul Lam <paullin3...@gmail.com> wrote: > >> Hi Weihua, >> >> You’re right. Distributing the SQLs to the TMs is one of the challenging >> parts of this FLIP. >> >> Web submission is not enabled in application mode currently as you said, >> but it could be changed if we have good reasons. >> >> What do you think about introducing a distributed storage for SQL Gateway? >> >> We could make use of Flink file systems [1] to distribute the SQL Gateway >> generated resources, that should solve the problem at its root cause. >> >> Users could specify Flink-supported file systems to ship files. It’s only >> required when using SQL Gateway with K8s application mode. >> >> [1] >> https://nightlies.apache.org/flink/flink-docs-stable/docs/deployment/filesystems/overview/ >> >> Best, >> Paul Lam >> >>> 2023年6月1日 13:55,Weihua Hu <huweihua....@gmail.com> 写道: >>> >>> Thanks Paul for your reply. >>> >>> SQLDriver looks good to me. >>> >>> 2. Do you mean a pass the SQL string a configuration or a program >> argument? >>> >>> >>> I brought this up because we were unable to pass the SQL file to Flink >>> using Kubernetes mode. >>> For DataStream/Python users, they need to prepare their images for the >> jars >>> and dependencies. >>> But for SQL users, they can use a common image to run different SQL >> queries >>> if there are no other udf requirements. >>> It would be great if the SQL query and image were not bound. >>> >>> Using strings is a way to decouple these, but just as you mentioned, it's >>> not easy to pass complex SQL. >>> >>>> use web submission >>> AFAIK, we can not use web submission in the Application mode. Please >>> correct me if I'm wrong. >>> >>> >>> Best, >>> Weihua >>> >>> >>> On Wed, May 31, 2023 at 9:37 PM Paul Lam <paullin3...@gmail.com> wrote: >>> >>>> Hi Biao, >>>> >>>> Thanks for your comments! >>>> >>>>> 1. Scope: is this FLIP only targeted for non-interactive Flink SQL jobs >>>> in >>>>> Application mode? More specifically, if we use SQL client/gateway to >>>>> execute some interactive SQLs like a SELECT query, can we ask flink to >>>> use >>>>> Application mode to execute those queries after this FLIP? >>>> >>>> Thanks for pointing it out. I think only DMLs would be executed via SQL >>>> Driver. >>>> I'll add the scope to the FLIP. >>>> >>>>> 2. Deployment: I believe in YARN mode, the implementation is trivial as >>>> we >>>>> can ship files via YARN's tool easily but for K8s, things can be more >>>>> complicated as Shengkai said. >>>> >>>> >>>> Your input is very informative. I’m thinking about using web submission, >>>> but it requires exposing the JobManager port which could also be a >> problem >>>> on K8s. >>>> >>>> Another approach is to explicitly require a distributed storage to ship >>>> files, >>>> but we may need a new deployment executor for that. >>>> >>>> What do you think of these two approaches? >>>> >>>>> 3. Serialization of SessionState: in SessionState, there are some >>>>> unserializable fields >>>>> like org.apache.flink.table.resource.ResourceManager#userClassLoader. >> It >>>>> may be worthwhile to add more details about the serialization part. >>>> >>>> I agree. That’s a missing part. But if we use ExecNodeGraph as Shengkai >>>> mentioned, do we eliminate the need for serialization of SessionState? >>>> >>>> Best, >>>> Paul Lam >>>> >>>>> 2023年5月31日 13:07,Biao Geng <biaoge...@gmail.com> 写道: >>>>> >>>>> Thanks Paul for the proposal!I believe it would be very useful for >> flink >>>>> users. >>>>> After reading the FLIP, I have some questions: >>>>> 1. Scope: is this FLIP only targeted for non-interactive Flink SQL jobs >>>> in >>>>> Application mode? More specifically, if we use SQL client/gateway to >>>>> execute some interactive SQLs like a SELECT query, can we ask flink to >>>> use >>>>> Application mode to execute those queries after this FLIP? >>>>> 2. Deployment: I believe in YARN mode, the implementation is trivial as >>>> we >>>>> can ship files via YARN's tool easily but for K8s, things can be more >>>>> complicated as Shengkai said. I have implemented a simple POC >>>>> < >>>> >> https://github.com/bgeng777/flink/commit/5b4338fe52ec343326927f0fc12f015dd22b1133 >>>>> >>>>> based on SQL client before(i.e. consider the SQL client which supports >>>>> executing a SQL file as the SQL driver in this FLIP). One problem I >> have >>>>> met is how do we ship SQL files ( or Job Graph) to the k8s side. >> Without >>>>> such support, users have to modify the initContainer or rebuild a new >> K8s >>>>> image every time to fetch the SQL file. Like the flink k8s operator, >> one >>>>> workaround is to utilize the flink config(transforming the SQL file to >> a >>>>> escaped string like Weihua mentioned) which will be converted to a >>>>> ConfigMap but K8s has size limit of ConfigMaps(no larger than 1MB >>>>> <https://kubernetes.io/docs/concepts/configuration/configmap/>). Not >>>> sure >>>>> if we have better solutions. >>>>> 3. Serialization of SessionState: in SessionState, there are some >>>>> unserializable fields >>>>> like org.apache.flink.table.resource.ResourceManager#userClassLoader. >> It >>>>> may be worthwhile to add more details about the serialization part. >>>>> >>>>> Best, >>>>> Biao Geng >>>>> >>>>> Paul Lam <paullin3...@gmail.com> 于2023年5月31日周三 11:49写道: >>>>> >>>>>> Hi Weihua, >>>>>> >>>>>> Thanks a lot for your input! Please see my comments inline. >>>>>> >>>>>>> - Is SQLRunner the better name? We use this to run a SQL Job. (Not >>>>>> strong, >>>>>>> the SQLDriver is fine for me) >>>>>> >>>>>> I’ve thought about SQL Runner but picked SQL Driver for the following >>>>>> reasons FYI: >>>>>> >>>>>> 1. I have a PythonDriver doing the same job for PyFlink [1] >>>>>> 2. Flink program's main class is sort of like Driver in JDBC which >>>>>> translates SQLs into >>>>>> databases specific languages. >>>>>> >>>>>> In general, I’m +1 for SQL Driver and +0 for SQL Runner. >>>>>> >>>>>>> - 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. >>>>>> >>>>>> Do you mean a pass the SQL string a configuration or a program >> argument? >>>>>> >>>>>> I thought it might be convenient for testing propose, but not >>>> recommended >>>>>> for production, >>>>>> cause Flink SQLs could be complicated and involves lots of characters >>>> that >>>>>> need to escape. >>>>>> >>>>>> WDYT? >>>>>> >>>>>>> - 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? >>>>>> >>>>>> Yes! It’s like running a PyFlink job with the following command: >>>>>> >>>>>> ``` >>>>>> ./bin/flink run \ >>>>>> --pyModule table.word_count \ >>>>>> --pyFiles examples/python/table >>>>>> ``` >>>>>> >>>>>> The CLI determines if it’s a SQL job, if yes apply the SQL Driver >>>>>> automatically. >>>>>> >>>>>> >>>>>> [1] >>>>>> >>>> >> https://github.com/apache/flink/blob/master/flink-python/src/main/java/org/apache/flink/client/python/PythonDriver.java >>>>>> >>>>>> Best, >>>>>> Paul Lam >>>>>> >>>>>>> 2023年5月30日 21:56,Weihua Hu <huweihua....@gmail.com> 写道: >>>>>>> >>>>>>> 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 >>>>>> >>>>>> >>>> >>>> >> >>