You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@flink.apache.org by Sumeet Malhotra <su...@gmail.com> on 2021/04/28 08:17:21 UTC
Best practice for packaging and deploying Flink jobs on K8S
Hi,
I have a PyFlink job that consists of:
- Multiple Python files.
- Multiple 3rdparty Python dependencies, specified in a
`requirements.txt` file.
- A few Java dependencies, mainly for external connectors.
- An overall job config YAML file.
Here's a simplified structure of the code layout.
flink/
├── deps
│ ├── jar
│ │ ├── flink-connector-kafka_2.11-1.12.2.jar
│ │ └── kafka-clients-2.4.1.jar
│ └── pip
│ └── requirements.txt
├── conf
│ └── job.yaml
└── job
├── some_file_x.py
├── some_file_y.py
└── main.py
I'm able to execute this job running it locally i.e. invoking something
like:
python main.py --config <path_to_job_yaml>
I'm loading the jars inside the Python code, using env.add_jars(...).
Now, the next step is to submit this job to a Flink cluster running on K8S.
I'm looking for any best practices in packaging and specifying dependencies
that people tend to follow. As per the documentation here [1], various
Python files, including the conf YAML, can be specified using the --pyFiles
option and Java dependencies can be specified using --jarfile option.
So, how can I specify 3rdparty Python package dependencies? According to
another piece of documentation here [2], I should be able to specify the
requirements.txt directly inside the code and submit it via the --pyFiles
option. Is that right?
Are there any other best practices folks use to package/submit jobs?
Thanks,
Sumeet
[1]
https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/cli.html#submitting-pyflink-jobs
[2]
https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/dependency_management.html#python-dependency-in-python-program
Re: Best practice for packaging and deploying Flink jobs on K8S
Posted by Till Rohrmann <tr...@apache.org>.
Alright. Then let's see what Dian recommends to do.
Cheers,
Till
On Thu, Apr 29, 2021 at 9:25 AM Sumeet Malhotra <su...@gmail.com>
wrote:
> Hi Till,
>
> There’s no problem with the documented approach. I was looking if there
> were any standardized ways of organizing, packaging and deploying Python
> code on a Flink cluster.
>
> Thanks,
> Sumeet
>
>
>
> On Thu, Apr 29, 2021 at 12:37 PM Till Rohrmann <tr...@apache.org>
> wrote:
>
>> Hi Sumeet,
>>
>> Is there a problem with the documented approaches on how to submit the
>> Python program (not working) or are you asking in general? Given the
>> documentation, I would assume that you can configure the requirements.txt
>> via `set_python_requirements`.
>>
>> I am also pulling in Dian who might be able to tell you more about the
>> Python deployment options.
>>
>> If you are not running on a session cluster, then you can also create a
>> K8s image which contains your user code. That way you ship your job when
>> deploying the cluster.
>>
>> Cheers,
>> Till
>>
>> On Wed, Apr 28, 2021 at 10:17 AM Sumeet Malhotra <
>> sumeet.malhotra@gmail.com> wrote:
>>
>>> Hi,
>>>
>>> I have a PyFlink job that consists of:
>>>
>>> - Multiple Python files.
>>> - Multiple 3rdparty Python dependencies, specified in a
>>> `requirements.txt` file.
>>> - A few Java dependencies, mainly for external connectors.
>>> - An overall job config YAML file.
>>>
>>> Here's a simplified structure of the code layout.
>>>
>>> flink/
>>> ├── deps
>>> │ ├── jar
>>> │ │ ├── flink-connector-kafka_2.11-1.12.2.jar
>>> │ │ └── kafka-clients-2.4.1.jar
>>> │ └── pip
>>> │ └── requirements.txt
>>> ├── conf
>>> │ └── job.yaml
>>> └── job
>>> ├── some_file_x.py
>>> ├── some_file_y.py
>>> └── main.py
>>>
>>> I'm able to execute this job running it locally i.e. invoking something
>>> like:
>>>
>>> python main.py --config <path_to_job_yaml>
>>>
>>> I'm loading the jars inside the Python code, using env.add_jars(...).
>>>
>>> Now, the next step is to submit this job to a Flink cluster running on
>>> K8S. I'm looking for any best practices in packaging and specifying
>>> dependencies that people tend to follow. As per the documentation here [1],
>>> various Python files, including the conf YAML, can be specified using the
>>> --pyFiles option and Java dependencies can be specified using --jarfile
>>> option.
>>>
>>> So, how can I specify 3rdparty Python package dependencies? According to
>>> another piece of documentation here [2], I should be able to specify the
>>> requirements.txt directly inside the code and submit it via the --pyFiles
>>> option. Is that right?
>>>
>>> Are there any other best practices folks use to package/submit jobs?
>>>
>>> Thanks,
>>> Sumeet
>>>
>>> [1]
>>> https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/cli.html#submitting-pyflink-jobs
>>> [2]
>>> https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/dependency_management.html#python-dependency-in-python-program
>>>
>>
Re: Best practice for packaging and deploying Flink jobs on K8S
Posted by Sumeet Malhotra <su...@gmail.com>.
Thanks for updating the documentation Dian. Appreciate it.
..Sumeet
On Sun, May 2, 2021 at 10:53 AM Dian Fu <di...@gmail.com> wrote:
> Hi Sumeet,
>
> FYI: the documentation about the CLI options of PyFlink has already been
> updated [1].
>
> [1]
> https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/cli.html#submitting-pyflink-jobs
>
> Regards,
> Dian
>
>
> On Thu, Apr 29, 2021 at 4:46 PM Dian Fu <di...@gmail.com> wrote:
>
>> Hi Sumeet,
>>
>> For the Python dependencies, multiple ways have been provided to specify
>> them and you could take either way of them.
>>
>> Regarding to requirements.txt, there are 3 ways provided and you could
>> specify it via either of them:
>> - API inside the code: set_python_requirements
>> - command line option: -pyreq [1]
>> - configuration: python.requirements
>>
>> So you don’t need to specify them both inside the code and the command
>> line options.
>>
>> PS: It seems that -pyreq is missing from the latest CLI documentation,
>> however, actually it’s there and you could refer to the 1.11 documentation
>> for now. I’ll try to add it back ASAP.
>>
>> [1]
>> https://ci.apache.org/projects/flink/flink-docs-release-1.11/ops/cli.html
>>
>> Regards,
>> Dian
>>
>> 2021年4月29日 下午3:24,Sumeet Malhotra <su...@gmail.com> 写道:
>>
>> Hi Till,
>>
>> There’s no problem with the documented approach. I was looking if there
>> were any standardized ways of organizing, packaging and deploying Python
>> code on a Flink cluster.
>>
>> Thanks,
>> Sumeet
>>
>>
>>
>> On Thu, Apr 29, 2021 at 12:37 PM Till Rohrmann <tr...@apache.org>
>> wrote:
>>
>>> Hi Sumeet,
>>>
>>> Is there a problem with the documented approaches on how to submit the
>>> Python program (not working) or are you asking in general? Given the
>>> documentation, I would assume that you can configure the requirements.txt
>>> via `set_python_requirements`.
>>>
>>> I am also pulling in Dian who might be able to tell you more about the
>>> Python deployment options.
>>>
>>> If you are not running on a session cluster, then you can also create a
>>> K8s image which contains your user code. That way you ship your job when
>>> deploying the cluster.
>>>
>>> Cheers,
>>> Till
>>>
>>> On Wed, Apr 28, 2021 at 10:17 AM Sumeet Malhotra <
>>> sumeet.malhotra@gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> I have a PyFlink job that consists of:
>>>>
>>>> - Multiple Python files.
>>>> - Multiple 3rdparty Python dependencies, specified in a
>>>> `requirements.txt` file.
>>>> - A few Java dependencies, mainly for external connectors.
>>>> - An overall job config YAML file.
>>>>
>>>> Here's a simplified structure of the code layout.
>>>>
>>>> flink/
>>>> ├── deps
>>>> │ ├── jar
>>>> │ │ ├── flink-connector-kafka_2.11-1.12.2.jar
>>>> │ │ └── kafka-clients-2.4.1.jar
>>>> │ └── pip
>>>> │ └── requirements.txt
>>>> ├── conf
>>>> │ └── job.yaml
>>>> └── job
>>>> ├── some_file_x.py
>>>> ├── some_file_y.py
>>>> └── main.py
>>>>
>>>> I'm able to execute this job running it locally i.e. invoking something
>>>> like:
>>>>
>>>> python main.py --config <path_to_job_yaml>
>>>>
>>>> I'm loading the jars inside the Python code, using env.add_jars(...).
>>>>
>>>> Now, the next step is to submit this job to a Flink cluster running on
>>>> K8S. I'm looking for any best practices in packaging and specifying
>>>> dependencies that people tend to follow. As per the documentation here [1],
>>>> various Python files, including the conf YAML, can be specified using the
>>>> --pyFiles option and Java dependencies can be specified using --jarfile
>>>> option.
>>>>
>>>> So, how can I specify 3rdparty Python package dependencies? According
>>>> to another piece of documentation here [2], I should be able to specify the
>>>> requirements.txt directly inside the code and submit it via the --pyFiles
>>>> option. Is that right?
>>>>
>>>> Are there any other best practices folks use to package/submit jobs?
>>>>
>>>> Thanks,
>>>> Sumeet
>>>>
>>>> [1]
>>>> https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/cli.html#submitting-pyflink-jobs
>>>> [2]
>>>> https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/dependency_management.html#python-dependency-in-python-program
>>>>
>>>
>>
Re: Best practice for packaging and deploying Flink jobs on K8S
Posted by Dian Fu <di...@gmail.com>.
Hi Sumeet,
FYI: the documentation about the CLI options of PyFlink has already been
updated [1].
[1]
https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/cli.html#submitting-pyflink-jobs
Regards,
Dian
On Thu, Apr 29, 2021 at 4:46 PM Dian Fu <di...@gmail.com> wrote:
> Hi Sumeet,
>
> For the Python dependencies, multiple ways have been provided to specify
> them and you could take either way of them.
>
> Regarding to requirements.txt, there are 3 ways provided and you could
> specify it via either of them:
> - API inside the code: set_python_requirements
> - command line option: -pyreq [1]
> - configuration: python.requirements
>
> So you don’t need to specify them both inside the code and the command
> line options.
>
> PS: It seems that -pyreq is missing from the latest CLI documentation,
> however, actually it’s there and you could refer to the 1.11 documentation
> for now. I’ll try to add it back ASAP.
>
> [1]
> https://ci.apache.org/projects/flink/flink-docs-release-1.11/ops/cli.html
>
> Regards,
> Dian
>
> 2021年4月29日 下午3:24,Sumeet Malhotra <su...@gmail.com> 写道:
>
> Hi Till,
>
> There’s no problem with the documented approach. I was looking if there
> were any standardized ways of organizing, packaging and deploying Python
> code on a Flink cluster.
>
> Thanks,
> Sumeet
>
>
>
> On Thu, Apr 29, 2021 at 12:37 PM Till Rohrmann <tr...@apache.org>
> wrote:
>
>> Hi Sumeet,
>>
>> Is there a problem with the documented approaches on how to submit the
>> Python program (not working) or are you asking in general? Given the
>> documentation, I would assume that you can configure the requirements.txt
>> via `set_python_requirements`.
>>
>> I am also pulling in Dian who might be able to tell you more about the
>> Python deployment options.
>>
>> If you are not running on a session cluster, then you can also create a
>> K8s image which contains your user code. That way you ship your job when
>> deploying the cluster.
>>
>> Cheers,
>> Till
>>
>> On Wed, Apr 28, 2021 at 10:17 AM Sumeet Malhotra <
>> sumeet.malhotra@gmail.com> wrote:
>>
>>> Hi,
>>>
>>> I have a PyFlink job that consists of:
>>>
>>> - Multiple Python files.
>>> - Multiple 3rdparty Python dependencies, specified in a
>>> `requirements.txt` file.
>>> - A few Java dependencies, mainly for external connectors.
>>> - An overall job config YAML file.
>>>
>>> Here's a simplified structure of the code layout.
>>>
>>> flink/
>>> ├── deps
>>> │ ├── jar
>>> │ │ ├── flink-connector-kafka_2.11-1.12.2.jar
>>> │ │ └── kafka-clients-2.4.1.jar
>>> │ └── pip
>>> │ └── requirements.txt
>>> ├── conf
>>> │ └── job.yaml
>>> └── job
>>> ├── some_file_x.py
>>> ├── some_file_y.py
>>> └── main.py
>>>
>>> I'm able to execute this job running it locally i.e. invoking something
>>> like:
>>>
>>> python main.py --config <path_to_job_yaml>
>>>
>>> I'm loading the jars inside the Python code, using env.add_jars(...).
>>>
>>> Now, the next step is to submit this job to a Flink cluster running on
>>> K8S. I'm looking for any best practices in packaging and specifying
>>> dependencies that people tend to follow. As per the documentation here [1],
>>> various Python files, including the conf YAML, can be specified using the
>>> --pyFiles option and Java dependencies can be specified using --jarfile
>>> option.
>>>
>>> So, how can I specify 3rdparty Python package dependencies? According to
>>> another piece of documentation here [2], I should be able to specify the
>>> requirements.txt directly inside the code and submit it via the --pyFiles
>>> option. Is that right?
>>>
>>> Are there any other best practices folks use to package/submit jobs?
>>>
>>> Thanks,
>>> Sumeet
>>>
>>> [1]
>>> https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/cli.html#submitting-pyflink-jobs
>>> [2]
>>> https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/dependency_management.html#python-dependency-in-python-program
>>>
>>
>
Re: Best practice for packaging and deploying Flink jobs on K8S
Posted by Dian Fu <di...@gmail.com>.
Hi Sumeet,
For the Python dependencies, multiple ways have been provided to specify them and you could take either way of them.
Regarding to requirements.txt, there are 3 ways provided and you could specify it via either of them:
- API inside the code: set_python_requirements
- command line option: -pyreq [1]
- configuration: python.requirements
So you don’t need to specify them both inside the code and the command line options.
PS: It seems that -pyreq is missing from the latest CLI documentation, however, actually it’s there and you could refer to the 1.11 documentation for now. I’ll try to add it back ASAP.
[1] https://ci.apache.org/projects/flink/flink-docs-release-1.11/ops/cli.html <https://ci.apache.org/projects/flink/flink-docs-release-1.11/ops/cli.html>
Regards,
Dian
> 2021年4月29日 下午3:24,Sumeet Malhotra <sumeet.malhotra@gmail.com <ma...@gmail.com>> 写道:
>
> Hi Till,
>
> There’s no problem with the documented approach. I was looking if there were any standardized ways of organizing, packaging and deploying Python code on a Flink cluster.
>
> Thanks,
> Sumeet
>
>
>
> On Thu, Apr 29, 2021 at 12:37 PM Till Rohrmann <trohrmann@apache.org <ma...@apache.org>> wrote:
> Hi Sumeet,
>
> Is there a problem with the documented approaches on how to submit the Python program (not working) or are you asking in general? Given the documentation, I would assume that you can configure the requirements.txt via `set_python_requirements`.
>
> I am also pulling in Dian who might be able to tell you more about the Python deployment options.
>
> If you are not running on a session cluster, then you can also create a K8s image which contains your user code. That way you ship your job when deploying the cluster.
>
> Cheers,
> Till
>
> On Wed, Apr 28, 2021 at 10:17 AM Sumeet Malhotra <sumeet.malhotra@gmail.com <ma...@gmail.com>> wrote:
> Hi,
>
> I have a PyFlink job that consists of:
> Multiple Python files.
> Multiple 3rdparty Python dependencies, specified in a `requirements.txt` file.
> A few Java dependencies, mainly for external connectors.
> An overall job config YAML file.
> Here's a simplified structure of the code layout.
>
> flink/
> ├── deps
> │ ├── jar
> │ │ ├── flink-connector-kafka_2.11-1.12.2.jar
> │ │ └── kafka-clients-2.4.1.jar
> │ └── pip
> │ └── requirements.txt
> ├── conf
> │ └── job.yaml
> └── job
> ├── some_file_x.py
> ├── some_file_y.py
> └── main.py
>
> I'm able to execute this job running it locally i.e. invoking something like:
>
> python main.py --config <path_to_job_yaml>
>
> I'm loading the jars inside the Python code, using env.add_jars(...).
>
> Now, the next step is to submit this job to a Flink cluster running on K8S. I'm looking for any best practices in packaging and specifying dependencies that people tend to follow. As per the documentation here [1], various Python files, including the conf YAML, can be specified using the --pyFiles option and Java dependencies can be specified using --jarfile option.
>
> So, how can I specify 3rdparty Python package dependencies? According to another piece of documentation here [2], I should be able to specify the requirements.txt directly inside the code and submit it via the --pyFiles option. Is that right?
>
> Are there any other best practices folks use to package/submit jobs?
>
> Thanks,
> Sumeet
>
> [1] https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/cli.html#submitting-pyflink-jobs <https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/cli.html#submitting-pyflink-jobs>
> [2] https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/dependency_management.html#python-dependency-in-python-program <https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/dependency_management.html#python-dependency-in-python-program>
Re: Best practice for packaging and deploying Flink jobs on K8S
Posted by Sumeet Malhotra <su...@gmail.com>.
Hi Till,
There’s no problem with the documented approach. I was looking if there
were any standardized ways of organizing, packaging and deploying Python
code on a Flink cluster.
Thanks,
Sumeet
On Thu, Apr 29, 2021 at 12:37 PM Till Rohrmann <tr...@apache.org> wrote:
> Hi Sumeet,
>
> Is there a problem with the documented approaches on how to submit the
> Python program (not working) or are you asking in general? Given the
> documentation, I would assume that you can configure the requirements.txt
> via `set_python_requirements`.
>
> I am also pulling in Dian who might be able to tell you more about the
> Python deployment options.
>
> If you are not running on a session cluster, then you can also create a
> K8s image which contains your user code. That way you ship your job when
> deploying the cluster.
>
> Cheers,
> Till
>
> On Wed, Apr 28, 2021 at 10:17 AM Sumeet Malhotra <
> sumeet.malhotra@gmail.com> wrote:
>
>> Hi,
>>
>> I have a PyFlink job that consists of:
>>
>> - Multiple Python files.
>> - Multiple 3rdparty Python dependencies, specified in a
>> `requirements.txt` file.
>> - A few Java dependencies, mainly for external connectors.
>> - An overall job config YAML file.
>>
>> Here's a simplified structure of the code layout.
>>
>> flink/
>> ├── deps
>> │ ├── jar
>> │ │ ├── flink-connector-kafka_2.11-1.12.2.jar
>> │ │ └── kafka-clients-2.4.1.jar
>> │ └── pip
>> │ └── requirements.txt
>> ├── conf
>> │ └── job.yaml
>> └── job
>> ├── some_file_x.py
>> ├── some_file_y.py
>> └── main.py
>>
>> I'm able to execute this job running it locally i.e. invoking something
>> like:
>>
>> python main.py --config <path_to_job_yaml>
>>
>> I'm loading the jars inside the Python code, using env.add_jars(...).
>>
>> Now, the next step is to submit this job to a Flink cluster running on
>> K8S. I'm looking for any best practices in packaging and specifying
>> dependencies that people tend to follow. As per the documentation here [1],
>> various Python files, including the conf YAML, can be specified using the
>> --pyFiles option and Java dependencies can be specified using --jarfile
>> option.
>>
>> So, how can I specify 3rdparty Python package dependencies? According to
>> another piece of documentation here [2], I should be able to specify the
>> requirements.txt directly inside the code and submit it via the --pyFiles
>> option. Is that right?
>>
>> Are there any other best practices folks use to package/submit jobs?
>>
>> Thanks,
>> Sumeet
>>
>> [1]
>> https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/cli.html#submitting-pyflink-jobs
>> [2]
>> https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/dependency_management.html#python-dependency-in-python-program
>>
>
Re: Best practice for packaging and deploying Flink jobs on K8S
Posted by Till Rohrmann <tr...@apache.org>.
Hi Sumeet,
Is there a problem with the documented approaches on how to submit the
Python program (not working) or are you asking in general? Given the
documentation, I would assume that you can configure the requirements.txt
via `set_python_requirements`.
I am also pulling in Dian who might be able to tell you more about the
Python deployment options.
If you are not running on a session cluster, then you can also create a K8s
image which contains your user code. That way you ship your job when
deploying the cluster.
Cheers,
Till
On Wed, Apr 28, 2021 at 10:17 AM Sumeet Malhotra <su...@gmail.com>
wrote:
> Hi,
>
> I have a PyFlink job that consists of:
>
> - Multiple Python files.
> - Multiple 3rdparty Python dependencies, specified in a
> `requirements.txt` file.
> - A few Java dependencies, mainly for external connectors.
> - An overall job config YAML file.
>
> Here's a simplified structure of the code layout.
>
> flink/
> ├── deps
> │ ├── jar
> │ │ ├── flink-connector-kafka_2.11-1.12.2.jar
> │ │ └── kafka-clients-2.4.1.jar
> │ └── pip
> │ └── requirements.txt
> ├── conf
> │ └── job.yaml
> └── job
> ├── some_file_x.py
> ├── some_file_y.py
> └── main.py
>
> I'm able to execute this job running it locally i.e. invoking something
> like:
>
> python main.py --config <path_to_job_yaml>
>
> I'm loading the jars inside the Python code, using env.add_jars(...).
>
> Now, the next step is to submit this job to a Flink cluster running on
> K8S. I'm looking for any best practices in packaging and specifying
> dependencies that people tend to follow. As per the documentation here [1],
> various Python files, including the conf YAML, can be specified using the
> --pyFiles option and Java dependencies can be specified using --jarfile
> option.
>
> So, how can I specify 3rdparty Python package dependencies? According to
> another piece of documentation here [2], I should be able to specify the
> requirements.txt directly inside the code and submit it via the --pyFiles
> option. Is that right?
>
> Are there any other best practices folks use to package/submit jobs?
>
> Thanks,
> Sumeet
>
> [1]
> https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/cli.html#submitting-pyflink-jobs
> [2]
> https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/dependency_management.html#python-dependency-in-python-program
>