From 838b79f5b9cc1a4cf253b2c17009f337bf569ecc Mon Sep 17 00:00:00 2001 From: huangxingbo Date: Mon, 16 Jan 2023 17:57:56 +0800 Subject: [PATCH] [FLINK-29421][python] Support python 3.10 This closes #21699. --- NOTICE | 2 +- docs/content.zh/docs/deployment/cli.md | 6 +- .../resource-providers/standalone/docker.md | 17 ---- .../docs/dev/python/datastream_tutorial.md | 2 +- .../docs/dev/python/installation.md | 4 +- .../docs/dev/python/table/udfs/python_udfs.md | 2 +- .../table/udfs/vectorized_python_udfs.md | 2 +- .../docs/dev/python/table_api_tutorial.md | 2 +- docs/content.zh/docs/dev/table/sqlClient.md | 4 +- docs/content.zh/docs/flinkDev/building.md | 4 +- docs/content/docs/deployment/cli.md | 6 +- .../resource-providers/standalone/docker.md | 17 ---- .../docs/dev/python/datastream_tutorial.md | 2 +- docs/content/docs/dev/python/installation.md | 4 +- .../docs/dev/python/table/udfs/python_udfs.md | 2 +- .../table/udfs/vectorized_python_udfs.md | 2 +- .../docs/dev/python/table_api_tutorial.md | 2 +- docs/content/docs/dev/table/sqlClient.md | 4 +- docs/content/docs/flinkDev/building.md | 4 +- .../generated/python_configuration.html | 2 +- .../flink/client/cli/CliFrontendParser.java | 2 +- flink-python/README.md | 2 +- flink-python/dev/build-wheels.sh | 2 +- flink-python/dev/dev-requirements.txt | 15 ++-- flink-python/dev/lint-python.sh | 10 +-- flink-python/lib/cloudpickle-2.1.0-src.zip | Bin 24648 -> 0 bytes flink-python/lib/cloudpickle-2.2.0-src.zip | Bin 0 -> 21387 bytes flink-python/pom.xml | 2 +- .../datastream/formats/tests/test_csv.py | 4 - .../stream_execution_environment.py | 4 +- .../datastream/tests/test_data_stream.py | 5 -- .../test_stream_execution_environment.py | 2 +- .../pyflink/datastream/tests/test_window.py | 4 - .../pyflink/fn_execution/beam/beam_boot.py | 21 +++-- .../beam/beam_worker_pool_service.py | 6 +- .../pyflink/fn_execution/state_impl.py | 21 ++--- .../tests/test_process_mode_boot.py | 8 +- flink-python/pyflink/table/table_config.py | 4 +- .../pyflink/table/tests/test_dependency.py | 5 +- flink-python/pyflink/table/tests/test_udf.py | 3 - flink-python/pyflink/table/tests/test_udtf.py | 4 - flink-python/pyproject.toml | 6 +- flink-python/setup.py | 29 +++---- .../fnexecution/state/GrpcStateService.java | 4 +- .../beam/sdk/fn/server/ServerFactory.java | 20 ++--- .../grpc/internal/SharedResourceHolder.java | 4 +- .../apache/flink/python/PythonOptions.java | 4 +- .../EmbeddedPythonEnvironmentManager.java | 8 -- .../apache/flink/python/util/ProtoUtils.java | 2 +- .../BeamDataStreamPythonFunctionRunner.java | 4 +- .../python/beam/BeamPythonFunctionRunner.java | 8 +- .../beam/state/BeamBagStateHandler.java | 2 +- .../beam/state/BeamMapStateHandler.java | 2 +- .../beam/state/BeamStateRequestHandler.java | 4 +- .../beam/BeamTablePythonFunctionRunner.java | 2 +- .../src/main/resources/META-INF/NOTICE | 79 +++++++++--------- ...sThroughPythonAggregateFunctionRunner.java | 2 +- ...PassThroughPythonScalarFunctionRunner.java | 2 +- .../PassThroughPythonTableFunctionRunner.java | 2 +- ...ghStreamAggregatePythonFunctionRunner.java | 2 +- ...upWindowAggregatePythonFunctionRunner.java | 2 +- ...eamTableAggregatePythonFunctionRunner.java | 2 +- flink-python/tox.ini | 2 +- pom.xml | 2 +- tools/releasing/NOTICE-binary_PREAMBLE.txt | 2 +- tools/releasing/create_binary_release.sh | 4 +- 66 files changed, 172 insertions(+), 242 deletions(-) delete mode 100644 flink-python/lib/cloudpickle-2.1.0-src.zip create mode 100644 flink-python/lib/cloudpickle-2.2.0-src.zip rename flink-python/src/main/java/org/apache/beam/vendor/grpc/{v1p43p2 => v1p48p1}/io/grpc/internal/SharedResourceHolder.java (98%) diff --git a/NOTICE b/NOTICE index ac7fec6af6d38..207340bd15fc9 100644 --- a/NOTICE +++ b/NOTICE @@ -17,7 +17,7 @@ See bundled license files for details. This project bundles the following dependencies under the BSD license. See bundled license files for details. -- cloudpickle:2.1.0 +- cloudpickle:2.2.0 - net.sf.py4j:py4j:0.10.9.7 This project bundles the following dependencies under SIL OFL 1.1 license (https://opensource.org/licenses/OFL-1.1). diff --git a/docs/content.zh/docs/deployment/cli.md b/docs/content.zh/docs/deployment/cli.md index f819e2a8bad70..6a11a060ea42e 100644 --- a/docs/content.zh/docs/deployment/cli.md +++ b/docs/content.zh/docs/deployment/cli.md @@ -367,11 +367,11 @@ Currently, users are able to submit a PyFlink job via the CLI. It does not requi JAR file path or the entry main class, which is different from the Java job submission. {{< hint info >}} -When submitting Python job via `flink run`, Flink will run the command "python". Please run the following command to confirm that the python executable in current environment points to a supported Python version of 3.6+. +When submitting Python job via `flink run`, Flink will run the command "python". Please run the following command to confirm that the python executable in current environment points to a supported Python version of 3.7+. {{< /hint >}} ```bash $ python --version -# the version printed here must be 3.6+ +# the version printed here must be 3.7+ ``` The following commands show different PyFlink job submission use-cases: @@ -520,7 +520,7 @@ related options. Here's an overview of all the Python related options for the ac Specify the path of the python interpreter used to execute the python UDF worker (e.g.: --pyExecutable /usr/local/bin/python3). - The python UDF worker depends on Python 3.6+, Apache Beam (version == 2.38.0), + The python UDF worker depends on Python 3.7+, Apache Beam (version == 2.43.0), Pip (version >= 20.3) and SetupTools (version >= 37.0.0). Please ensure that the specified environment meets the above requirements. diff --git a/docs/content.zh/docs/deployment/resource-providers/standalone/docker.md b/docs/content.zh/docs/deployment/resource-providers/standalone/docker.md index ea33896c05f0b..81f2055d4b158 100644 --- a/docs/content.zh/docs/deployment/resource-providers/standalone/docker.md +++ b/docs/content.zh/docs/deployment/resource-providers/standalone/docker.md @@ -428,23 +428,6 @@ FROM flink:{{< version >}} FROM flink:latest {{< /unstable >}} -# install python3: it has updated Python to 3.9 in Debian 11 and so install Python 3.7 from source -# it currently only supports Python 3.6, 3.7 and 3.8 in PyFlink officially. - -RUN apt-get update -y && \ -apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev libffi-dev liblzma-dev && \ -wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz && \ -tar -xvf Python-3.7.9.tgz && \ -cd Python-3.7.9 && \ -./configure --without-tests --enable-shared && \ -make -j6 && \ -make install && \ -ldconfig /usr/local/lib && \ -cd .. && rm -f Python-3.7.9.tgz && rm -rf Python-3.7.9 && \ -ln -s /usr/local/bin/python3 /usr/local/bin/python && \ -apt-get clean && \ -rm -rf /var/lib/apt/lists/* - # install PyFlink {{< stable >}} RUN pip3 install apache-flink=={{< version >}} diff --git a/docs/content.zh/docs/dev/python/datastream_tutorial.md b/docs/content.zh/docs/dev/python/datastream_tutorial.md index 51bd05b54a556..c96f9fa3f1051 100644 --- a/docs/content.zh/docs/dev/python/datastream_tutorial.md +++ b/docs/content.zh/docs/dev/python/datastream_tutorial.md @@ -48,7 +48,7 @@ Apache Flink 提供了 DataStream API,用于构建健壮的、有状态的流 首先,你需要在你的电脑上准备以下环境: * Java 11 -* Python 3.6, 3.7, 3.8 or 3.9 +* Python 3.7, 3.8, 3.9 or 3.10 使用 Python DataStream API 需要安装 PyFlink,PyFlink 发布在 [PyPI](https://pypi.org/project/apache-flink/)上,可以通过 `pip` 快速安装。 diff --git a/docs/content.zh/docs/dev/python/installation.md b/docs/content.zh/docs/dev/python/installation.md index 8f29c4f7339a2..5a2189c3ce7b6 100644 --- a/docs/content.zh/docs/dev/python/installation.md +++ b/docs/content.zh/docs/dev/python/installation.md @@ -29,11 +29,11 @@ under the License. ## 环境要求 -注意 PyFlink 需要 Python 3.6 以上版本(3.6, 3.7 或 3.8)。请运行以下命令,以确保 Python 版本满足要求。 +注意 PyFlink 需要 Python 3.7 以上版本(3.7, 3.8, 3.9 或 3.10)。请运行以下命令,以确保 Python 版本满足要求。 ```bash $ python --version -# the version printed here must be 3.6, 3.7, 3.8 or 3.9 +# the version printed here must be 3.7, 3.8, 3.9 or 3.10 ``` ## 环境设置 diff --git a/docs/content.zh/docs/dev/python/table/udfs/python_udfs.md b/docs/content.zh/docs/dev/python/table/udfs/python_udfs.md index b56b6db7f2a5c..674b6cbce31e6 100644 --- a/docs/content.zh/docs/dev/python/table/udfs/python_udfs.md +++ b/docs/content.zh/docs/dev/python/table/udfs/python_udfs.md @@ -28,7 +28,7 @@ under the License. 用户自定义函数是重要的功能,因为它们极大地扩展了 Python Table API 程序的表达能力。 -**注意:** 要执行 Python 用户自定义函数,客户端和集群端都需要安装 Python 3.6 以上版本(3.6、3.7 或 3.8),并安装 PyFlink。 +**注意:** 要执行 Python 用户自定义函数,客户端和集群端都需要安装 Python 3.7 以上版本(3.7、3.8、3.9 或 3.10),并安装 PyFlink。 diff --git a/docs/content.zh/docs/dev/python/table/udfs/vectorized_python_udfs.md b/docs/content.zh/docs/dev/python/table/udfs/vectorized_python_udfs.md index 48e94645b89a3..e116947c0aa75 100644 --- a/docs/content.zh/docs/dev/python/table/udfs/vectorized_python_udfs.md +++ b/docs/content.zh/docs/dev/python/table/udfs/vectorized_python_udfs.md @@ -34,7 +34,7 @@ under the License. 向量化用户自定义函数的定义,与[非向量化用户自定义函数]({{< ref "docs/dev/python/table/udfs/python_udfs" >}})具有相似的方式, 用户只需要在调用 `udf` 或者 `udaf` 装饰器时添加一个额外的参数 `func_type="pandas"`,将其标记为一个向量化用户自定义函数即可。 -**注意:** 要执行 Python 向量化自定义函数,客户端和集群端都需要安装 Python 3.6 以上版本(3.6、3.7 或 3.8),并安装 PyFlink。 +**注意:** 要执行 Python 向量化自定义函数,客户端和集群端都需要安装 Python 3.7 以上版本(3.7、3.8、3.9 或 3.10),并安装 PyFlink。 ## 向量化标量函数 diff --git a/docs/content.zh/docs/dev/python/table_api_tutorial.md b/docs/content.zh/docs/dev/python/table_api_tutorial.md index 0b28b6cb07b90..348d59e5f5937 100644 --- a/docs/content.zh/docs/dev/python/table_api_tutorial.md +++ b/docs/content.zh/docs/dev/python/table_api_tutorial.md @@ -50,7 +50,7 @@ Apache Flink 提供 Table API 关系型 API 来统一处理流和批,即查询 如果要继续我们的旅程,你需要一台具有以下功能的计算机: * Java 11 -* Python 3.6, 3.7, 3.8 or 3.9 +* Python 3.7, 3.8, 3.9 or 3.10 使用 Python Table API 需要安装 PyFlink,它已经被发布到 [PyPi](https://pypi.org/project/apache-flink/),你可以通过如下方式安装 PyFlink: diff --git a/docs/content.zh/docs/dev/table/sqlClient.md b/docs/content.zh/docs/dev/table/sqlClient.md index 3d40f4131bf38..d5e93cc585a03 100644 --- a/docs/content.zh/docs/dev/table/sqlClient.md +++ b/docs/content.zh/docs/dev/table/sqlClient.md @@ -265,8 +265,8 @@ Mode "embedded" (default) submits Flink jobs from the local machine. python UDF worker (e.g.: --pyExecutable /usr/local/bin/python3). The python - UDF worker depends on Python 3.6+, - Apache Beam (version == 2.38.0), Pip + UDF worker depends on Python 3.7+, + Apache Beam (version == 2.43.0), Pip (version >= 20.3) and SetupTools (version >= 37.0.0). Please ensure that the specified environment meets diff --git a/docs/content.zh/docs/flinkDev/building.md b/docs/content.zh/docs/flinkDev/building.md index 206bfc2098e88..0e7880b24b7c4 100644 --- a/docs/content.zh/docs/flinkDev/building.md +++ b/docs/content.zh/docs/flinkDev/building.md @@ -75,11 +75,11 @@ mvn clean install -DskipTests -Dfast -Pskip-webui-build -T 1C 如果想构建一个可用于 pip 安装的 PyFlink 包,需要先构建 Flink 工程,如 [构建 Flink](#build-flink) 中所述。 -2. Python 的版本为 3.6, 3.7 或者 3.8. +2. Python 的版本为 3.7, 3.8, 3.9 或者 3.10. ```shell $ python --version - # the version printed here must be 3.6, 3.7, 3.8 or 3.9 + # the version printed here must be 3.7, 3.8, 3.9 or 3.10 ``` 3. 构建 PyFlink 的 Cython 扩展模块(可选的) diff --git a/docs/content/docs/deployment/cli.md b/docs/content/docs/deployment/cli.md index cbf62b23e77de..8d7cb39a9a59d 100644 --- a/docs/content/docs/deployment/cli.md +++ b/docs/content/docs/deployment/cli.md @@ -365,11 +365,11 @@ Currently, users are able to submit a PyFlink job via the CLI. It does not requi JAR file path or the entry main class, which is different from the Java job submission. {{< hint info >}} -When submitting Python job via `flink run`, Flink will run the command "python". Please run the following command to confirm that the python executable in current environment points to a supported Python version of 3.6+. +When submitting Python job via `flink run`, Flink will run the command "python". Please run the following command to confirm that the python executable in current environment points to a supported Python version of 3.7+. {{< /hint >}} ```bash $ python --version -# the version printed here must be 3.6+ +# the version printed here must be 3.7+ ``` The following commands show different PyFlink job submission use-cases: @@ -518,7 +518,7 @@ related options. Here's an overview of all the Python related options for the ac Specify the path of the python interpreter used to execute the python UDF worker (e.g.: --pyExecutable /usr/local/bin/python3). - The python UDF worker depends on Python 3.6+, Apache Beam (version == 2.38.0), + The python UDF worker depends on Python 3.7+, Apache Beam (version == 2.43.0), Pip (version >= 20.3) and SetupTools (version >= 37.0.0). Please ensure that the specified environment meets the above requirements. diff --git a/docs/content/docs/deployment/resource-providers/standalone/docker.md b/docs/content/docs/deployment/resource-providers/standalone/docker.md index 92b1e104974cb..270bd74108975 100644 --- a/docs/content/docs/deployment/resource-providers/standalone/docker.md +++ b/docs/content/docs/deployment/resource-providers/standalone/docker.md @@ -428,23 +428,6 @@ FROM flink:{{< version >}} FROM flink:latest {{< /unstable >}} -# install python3: it has updated Python to 3.9 in Debian 11 and so install Python 3.7 from source -# it currently only supports Python 3.6, 3.7 and 3.8 in PyFlink officially. - -RUN apt-get update -y && \ -apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev libffi-dev liblzma-dev && \ -wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz && \ -tar -xvf Python-3.7.9.tgz && \ -cd Python-3.7.9 && \ -./configure --without-tests --enable-shared && \ -make -j6 && \ -make install && \ -ldconfig /usr/local/lib && \ -cd .. && rm -f Python-3.7.9.tgz && rm -rf Python-3.7.9 && \ -ln -s /usr/local/bin/python3 /usr/local/bin/python && \ -apt-get clean && \ -rm -rf /var/lib/apt/lists/* - # install PyFlink {{< stable >}} RUN pip3 install apache-flink=={{< version >}} diff --git a/docs/content/docs/dev/python/datastream_tutorial.md b/docs/content/docs/dev/python/datastream_tutorial.md index d606e83d78ee3..4160838f0c199 100644 --- a/docs/content/docs/dev/python/datastream_tutorial.md +++ b/docs/content/docs/dev/python/datastream_tutorial.md @@ -47,7 +47,7 @@ In particular, Apache Flink's [user mailing list](https://flink.apache.org/commu If you want to follow along, you will require a computer with: * Java 11 -* Python 3.6, 3.7, 3.8 or 3.9 +* Python 3.7, 3.8, 3.9 or 3.10 Using Python DataStream API requires installing PyFlink, which is available on [PyPI](https://pypi.org/project/apache-flink/) and can be easily installed using `pip`. diff --git a/docs/content/docs/dev/python/installation.md b/docs/content/docs/dev/python/installation.md index c7b722bf7c137..163613904531e 100644 --- a/docs/content/docs/dev/python/installation.md +++ b/docs/content/docs/dev/python/installation.md @@ -29,12 +29,12 @@ under the License. ## Environment Requirements {{< hint info >}} -Python version (3.6, 3.7, 3.8 or 3.9) is required for PyFlink. Please run the following command to make sure that it meets the requirements: +Python version (3.7, 3.8, 3.9 or 3.10) is required for PyFlink. Please run the following command to make sure that it meets the requirements: {{< /hint >}} ```bash $ python --version -# the version printed here must be 3.6, 3.7, 3.8 or 3.9 +# the version printed here must be 3.7, 3.8, 3.9 or 3.10 ``` ## Environment Setup diff --git a/docs/content/docs/dev/python/table/udfs/python_udfs.md b/docs/content/docs/dev/python/table/udfs/python_udfs.md index 0fd08e47f7a6f..66b510b4f6dc1 100644 --- a/docs/content/docs/dev/python/table/udfs/python_udfs.md +++ b/docs/content/docs/dev/python/table/udfs/python_udfs.md @@ -28,7 +28,7 @@ under the License. User-defined functions are important features, because they significantly extend the expressiveness of Python Table API programs. -**NOTE:** Python UDF execution requires Python version (3.6, 3.7, 3.8 or 3.9) with PyFlink installed. It's required on both the client side and the cluster side. +**NOTE:** Python UDF execution requires Python version (3.7, 3.8, 3.9 or 3.10) with PyFlink installed. It's required on both the client side and the cluster side. ## Scalar Functions diff --git a/docs/content/docs/dev/python/table/udfs/vectorized_python_udfs.md b/docs/content/docs/dev/python/table/udfs/vectorized_python_udfs.md index 15dc17c1b7e3b..68fcb40f82b1e 100644 --- a/docs/content/docs/dev/python/table/udfs/vectorized_python_udfs.md +++ b/docs/content/docs/dev/python/table/udfs/vectorized_python_udfs.md @@ -33,7 +33,7 @@ These Python libraries are highly optimized and provide high-performance data st [non-vectorized user-defined functions]({{< ref "docs/dev/python/table/udfs/python_udfs" >}}) on how to define vectorized user-defined functions. Users only need to add an extra parameter `func_type="pandas"` in the decorator `udf` or `udaf` to mark it as a vectorized user-defined function. -**NOTE:** Python UDF execution requires Python version (3.6, 3.7, 3.8 or 3.9) with PyFlink installed. It's required on both the client side and the cluster side. +**NOTE:** Python UDF execution requires Python version (3.7, 3.8, 3.9 or 3.10) with PyFlink installed. It's required on both the client side and the cluster side. ## Vectorized Scalar Functions diff --git a/docs/content/docs/dev/python/table_api_tutorial.md b/docs/content/docs/dev/python/table_api_tutorial.md index 710021c26b7a5..48a8b8edda0d9 100644 --- a/docs/content/docs/dev/python/table_api_tutorial.md +++ b/docs/content/docs/dev/python/table_api_tutorial.md @@ -51,7 +51,7 @@ In particular, Apache Flink's [user mailing list](https://flink.apache.org/commu If you want to follow along, you will require a computer with: * Java 11 -* Python 3.6, 3.7, 3.8 or 3.9 +* Python 3.7, 3.8, 3.9 or 3.10 Using Python Table API requires installing PyFlink, which is available on [PyPI](https://pypi.org/project/apache-flink/) and can be easily installed using `pip`. diff --git a/docs/content/docs/dev/table/sqlClient.md b/docs/content/docs/dev/table/sqlClient.md index b7f9626a240db..b6ff051ce8c7e 100644 --- a/docs/content/docs/dev/table/sqlClient.md +++ b/docs/content/docs/dev/table/sqlClient.md @@ -207,8 +207,8 @@ Mode "embedded" (default) submits Flink jobs from the local machine. python UDF worker (e.g.: --pyExecutable /usr/local/bin/python3). The python - UDF worker depends on Python 3.6+, - Apache Beam (version == 2.38.0), Pip + UDF worker depends on Python 3.7+, + Apache Beam (version == 2.43.0), Pip (version >= 20.3) and SetupTools (version >= 37.0.0). Please ensure that the specified environment meets diff --git a/docs/content/docs/flinkDev/building.md b/docs/content/docs/flinkDev/building.md index e19531a17ea44..9279bbdae28ef 100644 --- a/docs/content/docs/flinkDev/building.md +++ b/docs/content/docs/flinkDev/building.md @@ -74,11 +74,11 @@ The `fast` and `skip-webui-build` profiles have a significant impact on the buil If you want to build a PyFlink package that can be used for pip installation, you need to build the Flink project first, as described in [Build Flink](#build-flink). -2. Python version(3.6, 3.7, 3.8 or 3.9) is required +2. Python version(3.7, 3.8, 3.9 or 3.10) is required ```shell $ python --version - # the version printed here must be 3.6, 3.7, 3.8 or 3.9 + # the version printed here must be 3.7, 3.8, 3.9 or 3.10 ``` 3. Build PyFlink with Cython extension support (optional) diff --git a/docs/layouts/shortcodes/generated/python_configuration.html b/docs/layouts/shortcodes/generated/python_configuration.html index a7421bf6949d3..ba15a93112bdc 100644 --- a/docs/layouts/shortcodes/generated/python_configuration.html +++ b/docs/layouts/shortcodes/generated/python_configuration.html @@ -24,7 +24,7 @@
python.executable
"python" String - Specify the path of the python interpreter used to execute the python UDF worker. The python UDF worker depends on Python 3.6+, Apache Beam (version == 2.38.0), Pip (version >= 20.3) and SetupTools (version >= 37.0.0). Please ensure that the specified environment meets the above requirements. The option is equivalent to the command line option "-pyexec". + Specify the path of the python interpreter used to execute the python UDF worker. The python UDF worker depends on Python 3.7+, Apache Beam (version == 2.43.0), Pip (version >= 20.3) and SetupTools (version >= 37.0.0). Please ensure that the specified environment meets the above requirements. The option is equivalent to the command line option "-pyexec".
python.execution-mode
diff --git a/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontendParser.java b/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontendParser.java index 8e8ee1bc81593..b3bdf10c7e0df 100644 --- a/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontendParser.java +++ b/flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontendParser.java @@ -265,7 +265,7 @@ public class CliFrontendParser { true, "Specify the path of the python interpreter used to execute the python UDF worker " + "(e.g.: --pyExecutable /usr/local/bin/python3). " - + "The python UDF worker depends on Python 3.6+, Apache Beam (version == 2.38.0), " + + "The python UDF worker depends on Python 3.7+, Apache Beam (version == 2.43.0), " + "Pip (version >= 20.3) and SetupTools (version >= 37.0.0). " + "Please ensure that the specified environment meets the above requirements."); diff --git a/flink-python/README.md b/flink-python/README.md index b90726fcabf9e..171ace5708afb 100644 --- a/flink-python/README.md +++ b/flink-python/README.md @@ -26,7 +26,7 @@ The auto-generated Python docs can be found at [https://nightlies.apache.org/fli ## Python Requirements -Apache Flink Python API depends on Py4J (currently version 0.10.9.7), CloudPickle (currently version 2.1.0), python-dateutil(currently version 2.8.0), Apache Beam (currently version 2.38.0). +Apache Flink Python API depends on Py4J (currently version 0.10.9.7), CloudPickle (currently version 2.2.0), python-dateutil(currently version 2.8.0), Apache Beam (currently version 2.43.0). ## Development Notices diff --git a/flink-python/dev/build-wheels.sh b/flink-python/dev/build-wheels.sh index eb9139229dd0b..7f18a910ea94c 100755 --- a/flink-python/dev/build-wheels.sh +++ b/flink-python/dev/build-wheels.sh @@ -19,7 +19,7 @@ set -e -x dev/lint-python.sh -s py_env PY_ENV_DIR=`pwd`/dev/.conda/envs -py_env=("3.6" "3.7" "3.8" "3.9") +py_env=("3.7" "3.8" "3.9" "3.10") ## 2. install dependency for ((i=0;i<${#py_env[@]};i++)) do ${PY_ENV_DIR}/${py_env[i]}/bin/pip install -r dev/dev-requirements.txt diff --git a/flink-python/dev/dev-requirements.txt b/flink-python/dev/dev-requirements.txt index 54e480d9a73b8..d0cb404b520f3 100755 --- a/flink-python/dev/dev-requirements.txt +++ b/flink-python/dev/dev-requirements.txt @@ -15,22 +15,19 @@ pip>=20.3 setuptools>=18.0 wheel -apache-beam==2.38.0 +apache-beam==2.43.0 cython==0.29.24 py4j==0.10.9.7 python-dateutil==2.8.0 -cloudpickle==2.1.0 +cloudpickle==2.2.0 avro-python3>=1.8.1,!=1.9.2,<1.10.0 -pandas>=1.3.0,<1.4.0; python_version >= '3.7' -pandas>=1.0,<1.2.0; python_version < '3.7' -pyarrow>=5.0.0,<9.0.0; python_version >= '3.7' -pyarrow>=0.15.1,<7.0.0; python_version < '3.7' +pandas>=1.3.0,<1.4.0 +pyarrow>=5.0.0,<9.0.0 pytz>=2018.3 -numpy>=1.21.4,<1.22.0; python_version >= '3.7' -numpy>=1.14.3,<1.20; python_version < '3.7' +numpy>=1.21.4,<1.22.0 fastavro>=1.1.0,<1.4.8 grpcio>=1.29.0,<=1.46.3 grpcio-tools>=1.29.0,<=1.46.3 -pemja==0.2.6; python_version >= '3.7' and platform_system != 'Windows' +pemja==0.3.0; platform_system != 'Windows' httplib2>=0.19.0,<=0.20.4 protobuf>=3.19.0,<=3.21 diff --git a/flink-python/dev/lint-python.sh b/flink-python/dev/lint-python.sh index 4c5457379c939..1c0452b3cffb8 100755 --- a/flink-python/dev/lint-python.sh +++ b/flink-python/dev/lint-python.sh @@ -226,9 +226,9 @@ function install_miniconda() { # Install some kinds of py env. function install_py_env() { if [[ ${BUILD_REASON} = 'IndividualCI' ]]; then - py_env=("3.9") + py_env=("3.10") else - py_env=("3.6" "3.7" "3.8" "3.9") + py_env=("3.7" "3.8" "3.9" "3.10") fi for ((i=0;i<${#py_env[@]};i++)) do if [ -d "$CURRENT_DIR/.conda/envs/${py_env[i]}" ]; then @@ -403,7 +403,7 @@ function install_environment() { fi # step-3 install python environment which includes - # 3.6 3.7 3.8 3.9 + # 3.7 3.8 3.9 3.10 if [ $STEP -lt 3 ] && [ `need_install_component "py_env"` = true ]; then print_function "STEP" "installing python environment..." install_py_env @@ -584,7 +584,7 @@ function check_stage() { ######################### # Tox check function tox_check() { - LATEST_PYTHON="py39" + LATEST_PYTHON="py310" print_function "STAGE" "tox checks" # Set created py-env in $PATH for tox's creating virtual env activate @@ -789,7 +789,7 @@ usage: $0 [options] -l list all checks supported. Examples: ./lint-python -s basic => install environment with basic components. - ./lint-python -s py_env => install environment with python env(3.6,3.7,3.8,3.9). + ./lint-python -s py_env => install environment with python env(3.7,3.8,3.9,3.10). ./lint-python -s all => install environment with all components such as python env,tox,flake8,sphinx,mypy etc. ./lint-python -s tox,flake8 => install environment with tox,flake8. ./lint-python -s tox -f => reinstall environment with tox. diff --git a/flink-python/lib/cloudpickle-2.1.0-src.zip b/flink-python/lib/cloudpickle-2.1.0-src.zip deleted file mode 100644 index 57315f06a83765fc95256491728b12617b3127fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24648 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

g$o(zq18V z`StdH{o?;En1{LRX1A^WDPeQlus4h&+z_b0T!bh7`#+xm0GO{#0>`*&avRp8%K{bk!< zZ2y~W*D~f!P4il}{v8-Zn*WbLf8}FdPjUZ~eEsKwn>g3D=kLHEOu~PQ^H*K}0CTMo z-V_Y4Ma$oTL2iru5$5kq!hcww>yn#5*RJC4z#u}Re+%??eg6P;{cE~;lf2dhe+LHP z0R0i_#zy~lrNNu4bzOE7?)tv_J1~fX!QaCDQ}16wV*m1j(a;Eg9lKb+{^Roe`s}{| D5Oa5~ diff --git a/flink-python/lib/cloudpickle-2.2.0-src.zip b/flink-python/lib/cloudpickle-2.2.0-src.zip new file mode 100644 index 0000000000000000000000000000000000000000..9909ae4d67cc867b4bf654d8cc5898641dc4088d GIT binary patch literal 21387 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 V_4)dIeSVkE{{yCS#HRpA0RXm$$A|y` literal 0 HcmV?d00001 diff --git a/flink-python/pom.xml b/flink-python/pom.xml index d0e3a691daaa5..8f9536a2b242f 100644 --- a/flink-python/pom.xml +++ b/flink-python/pom.xml @@ -116,7 +116,7 @@ under the License. com.alibaba pemja - 0.2.6 + 0.3.0 diff --git a/flink-python/pyflink/datastream/formats/tests/test_csv.py b/flink-python/pyflink/datastream/formats/tests/test_csv.py index bbcefcb058af3..97d32826020c2 100644 --- a/flink-python/pyflink/datastream/formats/tests/test_csv.py +++ b/flink-python/pyflink/datastream/formats/tests/test_csv.py @@ -17,12 +17,9 @@ ################################################################################ import glob import os -import sys import tempfile from typing import Tuple, List -import pytest - from pyflink.common import WatermarkStrategy, Types from pyflink.datastream import MapFunction from pyflink.datastream.connectors.file_system import FileSource, FileSink @@ -114,7 +111,6 @@ class ProcessFileSourceCsvReaderFormatTests(FileSourceCsvReaderFormatTests, pass -@pytest.mark.skipif(sys.version_info < (3, 7), reason="requires python3.7") class EmbeddedFileSourceCsvReaderFormatTests(FileSourceCsvReaderFormatTests, PyFlinkStreamingTestCase): def setUp(self): diff --git a/flink-python/pyflink/datastream/stream_execution_environment.py b/flink-python/pyflink/datastream/stream_execution_environment.py index 2a2f09ddf3df6..9f0150cb12984 100644 --- a/flink-python/pyflink/datastream/stream_execution_environment.py +++ b/flink-python/pyflink/datastream/stream_execution_environment.py @@ -683,11 +683,11 @@ def set_python_executable(self, python_exec: str): .. note:: Please make sure the uploaded python environment matches the platform that the cluster - is running on and that the python version must be 3.6 or higher. + is running on and that the python version must be 3.7 or higher. .. note:: - The python udf worker depends on Apache Beam (version == 2.38.0). + The python udf worker depends on Apache Beam (version == 2.43.0). Please ensure that the specified environment meets the above requirements. :param python_exec: The path of python interpreter. diff --git a/flink-python/pyflink/datastream/tests/test_data_stream.py b/flink-python/pyflink/datastream/tests/test_data_stream.py index b8589f54fbf55..e136dde7d617f 100644 --- a/flink-python/pyflink/datastream/tests/test_data_stream.py +++ b/flink-python/pyflink/datastream/tests/test_data_stream.py @@ -18,13 +18,10 @@ import datetime import decimal import os -import sys import uuid from collections import defaultdict from typing import Tuple -import pytest - from pyflink.common import Row, Configuration from pyflink.common.time import Time from pyflink.common.typeinfo import Types @@ -1152,7 +1149,6 @@ def flat_map_func2(data): self.assert_equals_sorted(expected, results) -@pytest.mark.skipif(sys.version_info < (3, 7), reason="requires python3.7") class EmbeddedDataStreamStreamTests(DataStreamStreamingTests, PyFlinkStreamingTestCase): def setUp(self): super(EmbeddedDataStreamStreamTests, self).setUp() @@ -1209,7 +1205,6 @@ def map(self, value): self.assert_equals_sorted(expected, results) -@pytest.mark.skipif(sys.version_info < (3, 7), reason="requires python3.7") class EmbeddedDataStreamBatchTests(DataStreamBatchTests, PyFlinkBatchTestCase): def setUp(self): super(EmbeddedDataStreamBatchTests, self).setUp() diff --git a/flink-python/pyflink/datastream/tests/test_stream_execution_environment.py b/flink-python/pyflink/datastream/tests/test_stream_execution_environment.py index 089c6b1adec09..98aab5438a021 100644 --- a/flink-python/pyflink/datastream/tests/test_stream_execution_environment.py +++ b/flink-python/pyflink/datastream/tests/test_stream_execution_environment.py @@ -448,7 +448,7 @@ def test_set_requirements_without_cached_directory(self): import uuid requirements_txt_path = os.path.join(self.tempdir, str(uuid.uuid4())) with open(requirements_txt_path, 'w') as f: - f.write("cloudpickle==2.1.0") + f.write("cloudpickle==2.2.0") self.env.set_python_requirements(requirements_txt_path) def check_requirements(i): diff --git a/flink-python/pyflink/datastream/tests/test_window.py b/flink-python/pyflink/datastream/tests/test_window.py index 040810806532c..5d5b92e070667 100644 --- a/flink-python/pyflink/datastream/tests/test_window.py +++ b/flink-python/pyflink/datastream/tests/test_window.py @@ -15,11 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. ################################################################################ -import sys from typing import Iterable, Tuple, Dict -import pytest - from pyflink.common import Configuration from pyflink.common.time import Time from pyflink.common.typeinfo import Types @@ -600,7 +597,6 @@ def setUp(self) -> None: config.setString("python.execution-mode", "process") -@pytest.mark.skipif(sys.version_info < (3, 7), reason="requires python3.7") class EmbeddedWindowTests(WindowTests, PyFlinkStreamingTestCase): def setUp(self) -> None: super(EmbeddedWindowTests, self).setUp() diff --git a/flink-python/pyflink/fn_execution/beam/beam_boot.py b/flink-python/pyflink/fn_execution/beam/beam_boot.py index 4908944864ce6..608aea391a7a5 100644 --- a/flink-python/pyflink/fn_execution/beam/beam_boot.py +++ b/flink-python/pyflink/fn_execution/beam/beam_boot.py @@ -28,18 +28,21 @@ harness of Apache Beam. """ import argparse -import os - -import grpc import logging +import os import sys -from apache_beam.portability.api.beam_fn_api_pb2_grpc import BeamFnExternalWorkerPoolStub -from apache_beam.portability.api.beam_fn_api_pb2 import StartWorkerRequest -from apache_beam.portability.api.beam_provision_api_pb2_grpc import ProvisionServiceStub -from apache_beam.portability.api.beam_provision_api_pb2 import GetProvisionInfoRequest -from apache_beam.portability.api.endpoints_pb2 import ApiServiceDescriptor - +import grpc +from apache_beam.portability.api.org.apache.beam.model.fn_execution.v1.beam_fn_api_pb2 import \ + StartWorkerRequest +from apache_beam.portability.api.org.apache.beam.model.fn_execution.v1.beam_fn_api_pb2_grpc import ( + BeamFnExternalWorkerPoolStub) +from apache_beam.portability.api.org.apache.beam.model.fn_execution.v1.beam_provision_api_pb2 \ + import GetProvisionInfoRequest +from apache_beam.portability.api.org.apache.beam.model.fn_execution.v1.beam_provision_api_pb2_grpc \ + import ProvisionServiceStub +from apache_beam.portability.api.org.apache.beam.model.pipeline.v1.endpoints_pb2 import ( + ApiServiceDescriptor) from google.protobuf import json_format, text_format diff --git a/flink-python/pyflink/fn_execution/beam/beam_worker_pool_service.py b/flink-python/pyflink/fn_execution/beam/beam_worker_pool_service.py index b49002a49a5cd..24935383c5746 100644 --- a/flink-python/pyflink/fn_execution/beam/beam_worker_pool_service.py +++ b/flink-python/pyflink/fn_execution/beam/beam_worker_pool_service.py @@ -33,8 +33,10 @@ from apache_beam.portability.api import beam_fn_api_pb2 from apache_beam.portability.api import beam_fn_api_pb2_grpc from apache_beam.portability.api import endpoints_pb2 -from apache_beam.portability.api.beam_provision_api_pb2 import GetProvisionInfoRequest -from apache_beam.portability.api.beam_provision_api_pb2_grpc import ProvisionServiceStub +from apache_beam.portability.api.org.apache.beam.model.fn_execution.v1.beam_provision_api_pb2 \ + import GetProvisionInfoRequest +from apache_beam.portability.api.org.apache.beam.model.fn_execution.v1.beam_provision_api_pb2_grpc \ + import ProvisionServiceStub from apache_beam.runners.worker import sdk_worker_main from apache_beam.runners.worker.log_handler import FnApiLogRecordHandler from apache_beam.runners.worker.sdk_worker import SdkHarness diff --git a/flink-python/pyflink/fn_execution/state_impl.py b/flink-python/pyflink/fn_execution/state_impl.py index 64fe4b1b349c9..46a43139d4801 100644 --- a/flink-python/pyflink/fn_execution/state_impl.py +++ b/flink-python/pyflink/fn_execution/state_impl.py @@ -302,8 +302,9 @@ def __init__(self, max_entries): self._cached_keys = set() def on_evict(key, value): - self._cached_keys.remove(key) - self._all_data_cached = False + if value[0]: + self._cached_keys.remove(key) + self._all_data_cached = False self.set_on_evict(on_evict) @@ -398,13 +399,13 @@ def blocking_get(self, state_key, map_key, map_key_encoder, map_value_decoder): # lookup cache first cache_state_key = self._convert_to_cache_key(state_key) - cached_map_state = self._state_cache.get(cache_state_key, cache_token) + cached_map_state = self._state_cache.peek((cache_state_key, cache_token)) if cached_map_state is None: # request from remote exists, value = self._get_raw(state_key, map_key, map_key_encoder, map_value_decoder) cached_map_state = CachedMapState(self._max_cached_map_key_entries) cached_map_state.put(map_key, (exists, value)) - self._state_cache.put(cache_state_key, cache_token, cached_map_state) + self._state_cache.put((cache_state_key, cache_token), cached_map_state) return exists, value else: cached_value = cached_map_state.get(map_key) @@ -426,7 +427,7 @@ def lazy_iterator(self, state_key, iterate_type, map_key_decoder, map_value_deco if cache_token: # check if the data in the read cache can be used cache_state_key = self._convert_to_cache_key(state_key) - cached_map_state = self._state_cache.get(cache_state_key, cache_token) + cached_map_state = self._state_cache.peek((cache_state_key, cache_token)) if cached_map_state and cached_map_state.is_all_data_cached(): return create_cache_iterator( cached_map_state._cache, iterate_type, iterated_keys) @@ -450,7 +451,7 @@ def lazy_iterator(self, state_key, iterate_type, map_key_decoder, map_value_deco for key, value in current_batch.items(): cached_map_state.put(key, (True, value)) cached_map_state.set_all_data_cached() - self._state_cache.put(cache_state_key, cache_token, cached_map_state) + self._state_cache.put((cache_state_key, cache_token), cached_map_state) return self._lazy_remote_iterator( state_key, @@ -521,10 +522,10 @@ def extend(self, state_key, items: List[Tuple[int, Any, Any]], if cache_token: # Cache lookup cache_state_key = self._convert_to_cache_key(state_key) - cached_map_state = self._state_cache.get(cache_state_key, cache_token) + cached_map_state = self._state_cache.peek((cache_state_key, cache_token)) if cached_map_state is None: cached_map_state = CachedMapState(self._max_cached_map_key_entries) - self._state_cache.put(cache_state_key, cache_token, cached_map_state) + self._state_cache.put((cache_state_key, cache_token), cached_map_state) for request_flag, map_key, map_value in items: if request_flag == self.DELETE: cached_map_state.put(map_key, (False, None)) @@ -545,7 +546,7 @@ def check_empty(self, state_key): if cache_token: # Cache lookup cache_state_key = self._convert_to_cache_key(state_key) - cached_map_state = self._state_cache.get(cache_state_key, cache_token) + cached_map_state = self._state_cache.peek((cache_state_key, cache_token)) if cached_map_state is not None: if cached_map_state.is_all_data_cached() and \ len(cached_map_state.get_cached_keys()) == 0: @@ -562,7 +563,7 @@ def clear_read_cache(self, state_key): cache_token = self._get_cache_token() if cache_token: cache_key = self._convert_to_cache_key(state_key) - self._state_cache.evict(cache_key, cache_token) + self._state_cache.invalidate((cache_key, cache_token)) def get_cached_iterators_num(self): return self._cached_iterator_num diff --git a/flink-python/pyflink/fn_execution/tests/test_process_mode_boot.py b/flink-python/pyflink/fn_execution/tests/test_process_mode_boot.py index c98a0b8b35af8..bc5742fb8c1ec 100644 --- a/flink-python/pyflink/fn_execution/tests/test_process_mode_boot.py +++ b/flink-python/pyflink/fn_execution/tests/test_process_mode_boot.py @@ -25,11 +25,11 @@ import unittest import grpc -from apache_beam.portability.api.beam_provision_api_pb2 import (ProvisionInfo, - GetProvisionInfoResponse) -from apache_beam.portability.api.beam_provision_api_pb2_grpc import ( - ProvisionServiceServicer, add_ProvisionServiceServicer_to_server) from concurrent import futures +from apache_beam.portability.api.org.apache.beam.model.fn_execution.v1.beam_provision_api_pb2 \ + import ProvisionInfo, GetProvisionInfoResponse +from apache_beam.portability.api.org.apache.beam.model.fn_execution.v1.beam_provision_api_pb2_grpc \ + import ProvisionServiceServicer, add_ProvisionServiceServicer_to_server from google.protobuf import json_format from pyflink.java_gateway import get_gateway diff --git a/flink-python/pyflink/table/table_config.py b/flink-python/pyflink/table/table_config.py index d4d402b4141dd..8204dbbb7bee2 100644 --- a/flink-python/pyflink/table/table_config.py +++ b/flink-python/pyflink/table/table_config.py @@ -321,11 +321,11 @@ def set_python_executable(self, python_exec: str): .. note:: Please make sure the uploaded python environment matches the platform that the cluster - is running on and that the python version must be 3.6 or higher. + is running on and that the python version must be 3.7 or higher. .. note:: - The python udf worker depends on Apache Beam (version == 2.38.0). + The python udf worker depends on Apache Beam (version == 2.43.0). Please ensure that the specified environment meets the above requirements. :param python_exec: The path of python interpreter. diff --git a/flink-python/pyflink/table/tests/test_dependency.py b/flink-python/pyflink/table/tests/test_dependency.py index 4ca2e685eb2e7..f352277a23b29 100644 --- a/flink-python/pyflink/table/tests/test_dependency.py +++ b/flink-python/pyflink/table/tests/test_dependency.py @@ -21,8 +21,6 @@ import unittest import uuid -import pytest - from pyflink.table import DataTypes, TableEnvironment, EnvironmentSettings from pyflink.table import expressions as expr from pyflink.table.udf import udf @@ -95,7 +93,6 @@ def add_from_file(i): self.assert_equals(actual, ["+I[3, 1]", "+I[4, 2]", "+I[5, 3]"]) -@pytest.mark.skipif(sys.version_info < (3, 7), reason="requires python3.7") class EmbeddedThreadDependencyTests(DependencyTests, PyFlinkTestCase): def setUp(self): super(EmbeddedThreadDependencyTests, self).setUp() @@ -131,7 +128,7 @@ def setUp(self): def test_set_requirements_without_cached_directory(self): requirements_txt_path = os.path.join(self.tempdir, str(uuid.uuid4())) with open(requirements_txt_path, 'w') as f: - f.write("cloudpickle==2.1.0") + f.write("cloudpickle==2.2.0") self.t_env.set_python_requirements(requirements_txt_path) def check_requirements(i): diff --git a/flink-python/pyflink/table/tests/test_udf.py b/flink-python/pyflink/table/tests/test_udf.py index d974c2402bf3b..08b139a3f6fa9 100644 --- a/flink-python/pyflink/table/tests/test_udf.py +++ b/flink-python/pyflink/table/tests/test_udf.py @@ -17,11 +17,9 @@ ################################################################################ import datetime import os -import sys import unittest import uuid -import pytest import pytz from pyflink.common import Row @@ -909,7 +907,6 @@ class PyFlinkBatchUserDefinedFunctionTests(UserDefinedFunctionTests, pass -@pytest.mark.skipif(sys.version_info < (3, 7), reason="requires python3.7") class PyFlinkEmbeddedThreadTests(UserDefinedFunctionTests, PyFlinkBatchTableTestCase): def setUp(self): super(PyFlinkEmbeddedThreadTests, self).setUp() diff --git a/flink-python/pyflink/table/tests/test_udtf.py b/flink-python/pyflink/table/tests/test_udtf.py index 1053fdef5f42c..3055a9edacf62 100644 --- a/flink-python/pyflink/table/tests/test_udtf.py +++ b/flink-python/pyflink/table/tests/test_udtf.py @@ -15,11 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. ################################################################################ -import sys import unittest -import pytest - from pyflink.table import DataTypes from pyflink.table.udf import TableFunction, udtf, ScalarFunction, udf from pyflink.table.expressions import col @@ -134,7 +131,6 @@ class PyFlinkBatchUserDefinedFunctionTests(UserDefinedTableFunctionTests, pass -@pytest.mark.skipif(sys.version_info < (3, 7), reason="requires python3.7") class PyFlinkEmbeddedThreadTests(UserDefinedTableFunctionTests, PyFlinkStreamTableTestCase): def setUp(self): super(PyFlinkEmbeddedThreadTests, self).setUp() diff --git a/flink-python/pyproject.toml b/flink-python/pyproject.toml index 0b92959fedaae..cc48df40c8036 100644 --- a/flink-python/pyproject.toml +++ b/flink-python/pyproject.toml @@ -21,12 +21,12 @@ requires = [ "packaging==20.5; platform_machine=='arm64'", # macos M1 "setuptools>=18.0", "wheel", - "apache-beam==2.38.0", + "apache-beam==2.43.0", "cython==0.29.24" ] [tool.cibuildwheel] -build = ["cp36-*", "cp37-*", "cp38-*", "cp39-*"] +build = ["cp37-*", "cp38-*", "cp39-*", "cp310-*"] [tool.cibuildwheel.macos] -archs = ["x86_64", "arm64"] \ No newline at end of file +archs = ["x86_64", "arm64"] diff --git a/flink-python/setup.py b/flink-python/setup.py index dca4e1961ea02..f72fddd5a3285 100644 --- a/flink-python/setup.py +++ b/flink-python/setup.py @@ -21,18 +21,15 @@ import os import platform import sys -import warnings from distutils.command.build_ext import build_ext from shutil import copytree, copy, rmtree from setuptools import setup, Extension -if sys.version_info < (3, 6): - print("Python versions prior to 3.6 are not supported for PyFlink.", +if sys.version_info < (3, 7): + print("Python versions prior to 3.7 are not supported for PyFlink.", file=sys.stderr) sys.exit(-1) -elif sys.version_info.minor == 6: - warnings.warn("Python version 3.6 won't be supported for PyFlink after 1.16.") def remove_if_exists(file_path): @@ -308,18 +305,14 @@ def extracted_output_files(base_dir, file_path, output_directory): 'pyflink.examples': ['*.py', '*/*.py'], 'pyflink.bin': ['*']} - install_requires = ['py4j==0.10.9.7', 'python-dateutil==2.8.0', 'apache-beam==2.38.0', - 'cloudpickle==2.1.0', 'avro-python3>=1.8.1,!=1.9.2,<1.10.0', + install_requires = ['py4j==0.10.9.7', 'python-dateutil==2.8.0', 'apache-beam==2.43.0', + 'cloudpickle==2.2.0', 'avro-python3>=1.8.1,!=1.9.2,<1.10.0', 'pytz>=2018.3', 'fastavro>=1.1.0,<1.4.8', 'requests>=2.26.0', 'protobuf>=3.19.0,<=3.21', - 'numpy>=1.14.3,<1.20; python_full_version < "3.7"', - 'numpy>=1.21.4,<1.22.0; python_full_version >= "3.7"', - 'pandas>=1.0,<1.2.0; python_full_version < "3.7"', - 'pandas>=1.3.0,<1.4.0; python_full_version >= "3.7"', - 'pyarrow>=0.15.1,<7.0.0; python_full_version < "3.7"', - 'pyarrow>=5.0.0,<9.0.0; python_full_version >= "3.7"', - 'pemja==0.2.6;' - 'python_full_version >= "3.7" and platform_system != "Windows"', + 'numpy>=1.21.4,<1.22.0', + 'pandas>=1.3.0,<1.4.0', + 'pyarrow>=5.0.0,<9.0.0', + 'pemja==0.3.0;platform_system != "Windows"', 'httplib2>=0.19.0,<=0.20.4', apache_flink_libraries_dependency] setup( @@ -334,7 +327,7 @@ def extracted_output_files(base_dir, file_path, output_directory): license='https://www.apache.org/licenses/LICENSE-2.0', author='Apache Software Foundation', author_email='dev@flink.apache.org', - python_requires='>=3.6', + python_requires='>=3.7', install_requires=install_requires, cmdclass={'build_ext': build_ext}, tests_require=['pytest==4.4.1'], @@ -345,10 +338,10 @@ def extracted_output_files(base_dir, file_path, output_directory): classifiers=[ 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', - 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9'], + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10'], ext_modules=extensions ) finally: diff --git a/flink-python/src/main/java/org/apache/beam/runners/fnexecution/state/GrpcStateService.java b/flink-python/src/main/java/org/apache/beam/runners/fnexecution/state/GrpcStateService.java index c2270d83be408..1eb1d472e3bc1 100644 --- a/flink-python/src/main/java/org/apache/beam/runners/fnexecution/state/GrpcStateService.java +++ b/flink-python/src/main/java/org/apache/beam/runners/fnexecution/state/GrpcStateService.java @@ -21,8 +21,8 @@ import org.apache.beam.model.fnexecution.v1.BeamFnApi.StateResponse; import org.apache.beam.model.fnexecution.v1.BeamFnStateGrpc; import org.apache.beam.sdk.fn.server.FnService; -import org.apache.beam.vendor.grpc.v1p43p2.io.grpc.stub.ServerCallStreamObserver; -import org.apache.beam.vendor.grpc.v1p43p2.io.grpc.stub.StreamObserver; +import org.apache.beam.vendor.grpc.v1p48p1.io.grpc.stub.ServerCallStreamObserver; +import org.apache.beam.vendor.grpc.v1p48p1.io.grpc.stub.StreamObserver; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; diff --git a/flink-python/src/main/java/org/apache/beam/sdk/fn/server/ServerFactory.java b/flink-python/src/main/java/org/apache/beam/sdk/fn/server/ServerFactory.java index db55b8cbcd9b1..0653cdf7f81d0 100644 --- a/flink-python/src/main/java/org/apache/beam/sdk/fn/server/ServerFactory.java +++ b/flink-python/src/main/java/org/apache/beam/sdk/fn/server/ServerFactory.java @@ -19,16 +19,16 @@ import org.apache.beam.model.pipeline.v1.Endpoints; import org.apache.beam.sdk.fn.channel.SocketAddressFactory; -import org.apache.beam.vendor.grpc.v1p43p2.io.grpc.BindableService; -import org.apache.beam.vendor.grpc.v1p43p2.io.grpc.Server; -import org.apache.beam.vendor.grpc.v1p43p2.io.grpc.ServerBuilder; -import org.apache.beam.vendor.grpc.v1p43p2.io.grpc.ServerInterceptors; -import org.apache.beam.vendor.grpc.v1p43p2.io.grpc.netty.NettyServerBuilder; -import org.apache.beam.vendor.grpc.v1p43p2.io.netty.channel.epoll.EpollEventLoopGroup; -import org.apache.beam.vendor.grpc.v1p43p2.io.netty.channel.epoll.EpollServerDomainSocketChannel; -import org.apache.beam.vendor.grpc.v1p43p2.io.netty.channel.epoll.EpollServerSocketChannel; -import org.apache.beam.vendor.grpc.v1p43p2.io.netty.channel.unix.DomainSocketAddress; -import org.apache.beam.vendor.grpc.v1p43p2.io.netty.util.internal.ThreadLocalRandom; +import org.apache.beam.vendor.grpc.v1p48p1.io.grpc.BindableService; +import org.apache.beam.vendor.grpc.v1p48p1.io.grpc.Server; +import org.apache.beam.vendor.grpc.v1p48p1.io.grpc.ServerBuilder; +import org.apache.beam.vendor.grpc.v1p48p1.io.grpc.ServerInterceptors; +import org.apache.beam.vendor.grpc.v1p48p1.io.grpc.netty.NettyServerBuilder; +import org.apache.beam.vendor.grpc.v1p48p1.io.netty.channel.epoll.EpollEventLoopGroup; +import org.apache.beam.vendor.grpc.v1p48p1.io.netty.channel.epoll.EpollServerDomainSocketChannel; +import org.apache.beam.vendor.grpc.v1p48p1.io.netty.channel.epoll.EpollServerSocketChannel; +import org.apache.beam.vendor.grpc.v1p48p1.io.netty.channel.unix.DomainSocketAddress; +import org.apache.beam.vendor.grpc.v1p48p1.io.netty.util.internal.ThreadLocalRandom; import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.net.HostAndPort; import java.io.File; diff --git a/flink-python/src/main/java/org/apache/beam/vendor/grpc/v1p43p2/io/grpc/internal/SharedResourceHolder.java b/flink-python/src/main/java/org/apache/beam/vendor/grpc/v1p48p1/io/grpc/internal/SharedResourceHolder.java similarity index 98% rename from flink-python/src/main/java/org/apache/beam/vendor/grpc/v1p43p2/io/grpc/internal/SharedResourceHolder.java rename to flink-python/src/main/java/org/apache/beam/vendor/grpc/v1p48p1/io/grpc/internal/SharedResourceHolder.java index c187bda4e2f0e..ab08ce1f850c3 100644 --- a/flink-python/src/main/java/org/apache/beam/vendor/grpc/v1p43p2/io/grpc/internal/SharedResourceHolder.java +++ b/flink-python/src/main/java/org/apache/beam/vendor/grpc/v1p48p1/io/grpc/internal/SharedResourceHolder.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package org.apache.beam.vendor.grpc.v1p43p2.io.grpc.internal; +package org.apache.beam.vendor.grpc.v1p48p1.io.grpc.internal; -import org.apache.beam.vendor.grpc.v1p43p2.com.google.common.base.Preconditions; +import org.apache.beam.vendor.grpc.v1p48p1.com.google.common.base.Preconditions; import javax.annotation.concurrent.ThreadSafe; diff --git a/flink-python/src/main/java/org/apache/flink/python/PythonOptions.java b/flink-python/src/main/java/org/apache/flink/python/PythonOptions.java index 71f3f4744f7f4..3f0b90a91afd5 100644 --- a/flink-python/src/main/java/org/apache/flink/python/PythonOptions.java +++ b/flink-python/src/main/java/org/apache/flink/python/PythonOptions.java @@ -146,8 +146,8 @@ public class PythonOptions { .defaultValue("python") .withDescription( "Specify the path of the python interpreter used to execute the python " - + "UDF worker. The python UDF worker depends on Python 3.6+, Apache Beam " - + "(version == 2.38.0), Pip (version >= 20.3) and SetupTools (version >= 37.0.0). " + + "UDF worker. The python UDF worker depends on Python 3.7+, Apache Beam " + + "(version == 2.43.0), Pip (version >= 20.3) and SetupTools (version >= 37.0.0). " + "Please ensure that the specified environment meets the above requirements. The " + "option is equivalent to the command line option \"-pyexec\"."); diff --git a/flink-python/src/main/java/org/apache/flink/python/env/embedded/EmbeddedPythonEnvironmentManager.java b/flink-python/src/main/java/org/apache/flink/python/env/embedded/EmbeddedPythonEnvironmentManager.java index 750284e2edfe4..896c3a2c4ffa6 100644 --- a/flink-python/src/main/java/org/apache/flink/python/env/embedded/EmbeddedPythonEnvironmentManager.java +++ b/flink-python/src/main/java/org/apache/flink/python/env/embedded/EmbeddedPythonEnvironmentManager.java @@ -23,7 +23,6 @@ import org.apache.flink.python.env.AbstractPythonEnvironmentManager; import org.apache.flink.python.env.PythonDependencyInfo; import org.apache.flink.python.env.PythonEnvironment; -import org.apache.flink.python.util.PythonEnvironmentManagerUtils; import pemja.core.PythonInterpreterConfig; @@ -61,13 +60,6 @@ public PythonEnvironment createEnvironment() throws Exception { String.format("Unsupported execution mode %s.", executionMode)); } - String pythonVersion = - PythonEnvironmentManagerUtils.getPythonVersion(dependencyInfo.getPythonExec()); - - if (pythonVersion.compareTo("3.7") < 0) { - throw new RuntimeException("`THREAD` execution mode only supports Python 3.7+"); - } - if (env.containsKey("FLINK_TESTING")) { String flinkHome = env.get("FLINK_HOME"); String sourceRootDir = new File(flinkHome, "../../../../").getCanonicalPath(); diff --git a/flink-python/src/main/java/org/apache/flink/python/util/ProtoUtils.java b/flink-python/src/main/java/org/apache/flink/python/util/ProtoUtils.java index 70ff78bd610e4..3996691186d1a 100644 --- a/flink-python/src/main/java/org/apache/flink/python/util/ProtoUtils.java +++ b/flink-python/src/main/java/org/apache/flink/python/util/ProtoUtils.java @@ -58,7 +58,7 @@ public static RunnerApi.Coder createCoderProto( RunnerApi.FunctionSpec.newBuilder() .setUrn(FLINK_CODER_URN) .setPayload( - org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf + org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf .ByteString.copyFrom( coderInfoDescriptor.toByteArray())) .build()) diff --git a/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/BeamDataStreamPythonFunctionRunner.java b/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/BeamDataStreamPythonFunctionRunner.java index 38644c79cb768..71bd715c47085 100644 --- a/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/BeamDataStreamPythonFunctionRunner.java +++ b/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/BeamDataStreamPythonFunctionRunner.java @@ -179,7 +179,7 @@ private RunnerApi.ParDoPayload createRevisePayload() { RunnerApi.FunctionSpec.newBuilder() .setUrn(STATELESS_FUNCTION_URN) .setPayload( - org.apache.beam.vendor.grpc.v1p43p2.com.google + org.apache.beam.vendor.grpc.v1p48p1.com.google .protobuf.ByteString.copyFrom( proto.toByteArray())) .build()); @@ -196,7 +196,7 @@ private RunnerApi.ParDoPayload createUdfPayload( RunnerApi.FunctionSpec.newBuilder() .setUrn(urn) .setPayload( - org.apache.beam.vendor.grpc.v1p43p2.com.google + org.apache.beam.vendor.grpc.v1p48p1.com.google .protobuf.ByteString.copyFrom( proto.toByteArray())) .build()); diff --git a/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/BeamPythonFunctionRunner.java b/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/BeamPythonFunctionRunner.java index 510d77723a1c7..9f1aee39f41ee 100644 --- a/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/BeamPythonFunctionRunner.java +++ b/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/BeamPythonFunctionRunner.java @@ -71,7 +71,7 @@ import org.apache.beam.sdk.transforms.windowing.BoundedWindow; import org.apache.beam.sdk.transforms.windowing.GlobalWindow; import org.apache.beam.sdk.util.WindowedValue; -import org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf.Struct; +import org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf.Struct; import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Iterables; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -547,7 +547,7 @@ private ExecutableStage createExecutableStage(RunnerApi.Environment environment) RunnerApi.ExecutableStagePayload.WireCoderSetting.newBuilder() .setUrn(getUrn(RunnerApi.StandardCoders.Enum.PARAM_WINDOWED_VALUE)) .setPayload( - org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf.ByteString + org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf.ByteString .copyFrom(baos.toByteArray())) .setInputOrOutputId(INPUT_COLLECTION_ID) .build()); @@ -555,7 +555,7 @@ private ExecutableStage createExecutableStage(RunnerApi.Environment environment) RunnerApi.ExecutableStagePayload.WireCoderSetting.newBuilder() .setUrn(getUrn(RunnerApi.StandardCoders.Enum.PARAM_WINDOWED_VALUE)) .setPayload( - org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf.ByteString + org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf.ByteString .copyFrom(baos.toByteArray())) .setInputOrOutputId(OUTPUT_COLLECTION_ID) .build()); @@ -565,7 +565,7 @@ private ExecutableStage createExecutableStage(RunnerApi.Environment environment) RunnerApi.ExecutableStagePayload.WireCoderSetting.newBuilder() .setUrn(getUrn(RunnerApi.StandardCoders.Enum.PARAM_WINDOWED_VALUE)) .setPayload( - org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf + org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf .ByteString.copyFrom(baos.toByteArray())) .setInputOrOutputId(entry.getKey()) .build()); diff --git a/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/state/BeamBagStateHandler.java b/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/state/BeamBagStateHandler.java index 2d49c7462fa5a..96c6089651a3d 100644 --- a/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/state/BeamBagStateHandler.java +++ b/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/state/BeamBagStateHandler.java @@ -26,7 +26,7 @@ import org.apache.flink.util.Preconditions; import org.apache.beam.model.fnexecution.v1.BeamFnApi; -import org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf.ByteString; +import org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf.ByteString; import javax.annotation.Nullable; diff --git a/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/state/BeamMapStateHandler.java b/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/state/BeamMapStateHandler.java index 5e7085780f639..8b62d656c26f0 100644 --- a/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/state/BeamMapStateHandler.java +++ b/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/state/BeamMapStateHandler.java @@ -28,7 +28,7 @@ import org.apache.flink.streaming.api.utils.ByteArrayWrapper; import org.apache.beam.model.fnexecution.v1.BeamFnApi; -import org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf.ByteString; +import org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf.ByteString; import java.util.HashMap; import java.util.Iterator; diff --git a/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/state/BeamStateRequestHandler.java b/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/state/BeamStateRequestHandler.java index 43fbf95b73116..edcdb921073ab 100644 --- a/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/state/BeamStateRequestHandler.java +++ b/flink-python/src/main/java/org/apache/flink/streaming/api/runners/python/beam/state/BeamStateRequestHandler.java @@ -28,8 +28,8 @@ import org.apache.beam.model.fnexecution.v1.BeamFnApi; import org.apache.beam.runners.fnexecution.state.StateRequestHandler; -import org.apache.beam.vendor.grpc.v1p43p2.com.google.common.base.Charsets; -import org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf.ByteString; +import org.apache.beam.vendor.grpc.v1p48p1.com.google.common.base.Charsets; +import org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf.ByteString; import javax.annotation.Nullable; diff --git a/flink-python/src/main/java/org/apache/flink/table/runtime/runners/python/beam/BeamTablePythonFunctionRunner.java b/flink-python/src/main/java/org/apache/flink/table/runtime/runners/python/beam/BeamTablePythonFunctionRunner.java index ac340616ce27c..60158397e6286 100644 --- a/flink-python/src/main/java/org/apache/flink/table/runtime/runners/python/beam/BeamTablePythonFunctionRunner.java +++ b/flink-python/src/main/java/org/apache/flink/table/runtime/runners/python/beam/BeamTablePythonFunctionRunner.java @@ -92,7 +92,7 @@ protected void buildTransforms(RunnerApi.Components.Builder componentsBuilder) { RunnerApi.FunctionSpec.newBuilder() .setUrn(functionUrn) .setPayload( - org.apache.beam.vendor.grpc.v1p43p2.com.google + org.apache.beam.vendor.grpc.v1p48p1.com.google .protobuf.ByteString.copyFrom( userDefinedFunctionProto.toByteArray())) .build()) diff --git a/flink-python/src/main/resources/META-INF/NOTICE b/flink-python/src/main/resources/META-INF/NOTICE index f94a4fce153d6..ee2613730676b 100644 --- a/flink-python/src/main/resources/META-INF/NOTICE +++ b/flink-python/src/main/resources/META-INF/NOTICE @@ -17,18 +17,17 @@ This project bundles the following dependencies under the Apache Software Licens - org.apache.arrow:arrow-memory-core:5.0.0 - org.apache.arrow:arrow-memory-netty:5.0.0 - org.apache.arrow:arrow-vector:5.0.0 -- org.apache.beam:beam-model-fn-execution:2.38.0 -- org.apache.beam:beam-model-job-management:2.38.0 -- org.apache.beam:beam-model-pipeline:2.38.0 -- org.apache.beam:beam-runners-core-construction-java:2.38.0 -- org.apache.beam:beam-runners-core-java:2.38.0 -- org.apache.beam:beam-runners-java-fn-execution:2.38.0 -- org.apache.beam:beam-sdks-java-core:2.38.0 -- org.apache.beam:beam-sdks-java-fn-execution:2.38.0 -- org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1 +- org.apache.beam:beam-model-fn-execution:2.43.0 +- org.apache.beam:beam-model-job-management:2.43.0 +- org.apache.beam:beam-model-pipeline:2.43.0 +- org.apache.beam:beam-runners-core-construction-java:2.43.0 +- org.apache.beam:beam-runners-core-java:2.43.0 +- org.apache.beam:beam-runners-java-fn-execution:2.43.0 +- org.apache.beam:beam-sdks-java-core:2.43.0 +- org.apache.beam:beam-sdks-java-fn-execution:2.43.0 - org.apache.beam:beam-vendor-guava-26_0-jre:0.1 -- org.apache.beam:beam-vendor-grpc-1_43_2:0.1 -- com.alibaba:pemja:0.2.6 +- org.apache.beam:beam-vendor-grpc-1_48_1:0.1 +- com.alibaba:pemja:0.3.0 This project bundles the following dependencies under the BSD license. See bundled license files for details @@ -43,36 +42,36 @@ See bundled license files for details. The bundled Apache Beam dependencies bundle the following dependencies under the Apache Software License 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt) -- com.google.api.grpc:proto-google-common-protos:2.0.1 -- com.google.code.gson:gson:2.8.9 -- com.google.guava:guava:30.1.1-jre -- io.grpc:grpc-auth:1.43.2 -- io.grpc:grpc-core:1.43.2 -- io.grpc:grpc-context:1.43.2 -- io.grpc:grpc-netty:1.43.2 -- io.grpc:grpc-protobuf:1.43.2 -- io.grpc:grpc-stub:1.43.2 -- io.grpc:grpc-testing:1.43.2 -- io.netty:netty-buffer:4.1.63.Final -- io.netty:netty-codec:4.1.63.Final -- io.netty:netty-codec-http:4.1.63.Final -- io.netty:netty-codec-http2:4.1.63.Final -- io.netty:netty-codec-socks:4.1.63.Final -- io.netty:netty-common:4.1.63.Final -- io.netty:netty-handler:4.1.63.Final -- io.netty:netty-handler-proxy:4.1.63.Final -- io.netty:netty-resolver:4.1.63.Final -- io.netty:netty-transport:4.1.63.Final -- io.netty:netty-transport-native-epoll:4.1.63.Final:linux-x86_64 -- io.netty:netty-transport-native-unix-common:4.1.63.Final -- io.netty:netty-tcnative-boringssl-static:2.0.38.Final -- io.opencensus:opencensus-api:0.28.0 -- io.opencensus:opencensus-contrib-grpc-metrics:0.28.0 -- io.perfmark:perfmark-api:0.23.0 +- com.google.api.grpc:proto-google-common-protos:2.9.0 +- com.google.code.gson:gson:2.9.0 +- com.google.guava:guava:31.1-jre +- io.grpc:grpc-auth:1.48.1 +- io.grpc:grpc-core:1.48.1 +- io.grpc:grpc-context:1.48.1 +- io.grpc:grpc-netty:1.48.1 +- io.grpc:grpc-protobuf:1.48.1 +- io.grpc:grpc-stub:1.48.1 +- io.grpc:grpc-testing:1.48.1 +- io.netty:netty-buffer:4.1.77.Final +- io.netty:netty-codec:4.1.77.Final +- io.netty:netty-codec-http:4.1.77.Final +- io.netty:netty-codec-http2:4.1.77.Final +- io.netty:netty-codec-socks:4.1.77.Final +- io.netty:netty-common:4.1.77.Final +- io.netty:netty-handler:4.1.77.Final +- io.netty:netty-handler-proxy:4.1.77.Final +- io.netty:netty-resolver:4.1.77.Final +- io.netty:netty-transport:4.1.77.Final +- io.netty:netty-transport-native-epoll:4.1.77.Final:linux-x86_64 +- io.netty:netty-transport-native-unix-common:4.1.77.Final +- io.netty:netty-tcnative-boringssl-static:2.0.53.Final +- io.opencensus:opencensus-api:0.31.0 +- io.opencensus:opencensus-contrib-grpc-metrics:0.31.0 +- io.perfmark:perfmark-api:0.25.0 The bundled Apache Beam dependencies bundle the following dependencies under the BSD license. See bundled license files for details -- com.google.auth:google-auth-library-credentials:0.22.2 -- com.google.protobuf:protobuf-java:3.19.2 -- com.google.protobuf:protobuf-java-util:3.19.2 +- com.google.auth:google-auth-library-credentials:1.4.0 +- com.google.protobuf:protobuf-java:3.21.1 +- com.google.protobuf:protobuf-java-util:3.21.1 diff --git a/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughPythonAggregateFunctionRunner.java b/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughPythonAggregateFunctionRunner.java index a2ef65b7f5f56..6eb8202a31ec5 100644 --- a/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughPythonAggregateFunctionRunner.java +++ b/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughPythonAggregateFunctionRunner.java @@ -33,7 +33,7 @@ import org.apache.flink.table.types.logical.RowType; import org.apache.beam.runners.fnexecution.control.JobBundleFactory; -import org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf.Struct; +import org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf.Struct; import java.util.ArrayList; import java.util.LinkedList; diff --git a/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughPythonScalarFunctionRunner.java b/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughPythonScalarFunctionRunner.java index 599fb9d511bbd..e84ee4d1d656b 100644 --- a/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughPythonScalarFunctionRunner.java +++ b/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughPythonScalarFunctionRunner.java @@ -26,7 +26,7 @@ import org.apache.flink.table.types.logical.RowType; import org.apache.beam.runners.fnexecution.control.JobBundleFactory; -import org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf.Struct; +import org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf.Struct; import java.util.LinkedList; import java.util.List; diff --git a/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughPythonTableFunctionRunner.java b/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughPythonTableFunctionRunner.java index 2125a1fd1b3ca..b94e765e41355 100644 --- a/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughPythonTableFunctionRunner.java +++ b/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughPythonTableFunctionRunner.java @@ -26,7 +26,7 @@ import org.apache.flink.table.types.logical.RowType; import org.apache.beam.runners.fnexecution.control.JobBundleFactory; -import org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf.Struct; +import org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf.Struct; import java.util.LinkedList; import java.util.List; diff --git a/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughStreamAggregatePythonFunctionRunner.java b/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughStreamAggregatePythonFunctionRunner.java index 7c72e623bfaa3..7d970e2a5293f 100644 --- a/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughStreamAggregatePythonFunctionRunner.java +++ b/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughStreamAggregatePythonFunctionRunner.java @@ -28,7 +28,7 @@ import org.apache.flink.table.types.logical.RowType; import org.apache.beam.runners.fnexecution.control.JobBundleFactory; -import org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf.Struct; +import org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf.Struct; import java.util.LinkedList; import java.util.List; diff --git a/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughStreamGroupWindowAggregatePythonFunctionRunner.java b/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughStreamGroupWindowAggregatePythonFunctionRunner.java index 39581f170d018..48c56cd434d22 100644 --- a/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughStreamGroupWindowAggregatePythonFunctionRunner.java +++ b/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughStreamGroupWindowAggregatePythonFunctionRunner.java @@ -28,7 +28,7 @@ import org.apache.flink.table.types.logical.RowType; import org.apache.beam.runners.fnexecution.control.JobBundleFactory; -import org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf.Struct; +import org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf.Struct; import static org.apache.flink.python.util.ProtoUtils.createFlattenRowTypeCoderInfoDescriptorProto; diff --git a/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughStreamTableAggregatePythonFunctionRunner.java b/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughStreamTableAggregatePythonFunctionRunner.java index f8b79db3a8019..d962463d6803d 100644 --- a/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughStreamTableAggregatePythonFunctionRunner.java +++ b/flink-python/src/test/java/org/apache/flink/table/runtime/utils/PassThroughStreamTableAggregatePythonFunctionRunner.java @@ -28,7 +28,7 @@ import org.apache.flink.table.types.logical.RowType; import org.apache.beam.runners.fnexecution.control.JobBundleFactory; -import org.apache.beam.vendor.grpc.v1p43p2.com.google.protobuf.Struct; +import org.apache.beam.vendor.grpc.v1p48p1.com.google.protobuf.Struct; import java.util.Arrays; import java.util.LinkedList; diff --git a/flink-python/tox.ini b/flink-python/tox.ini index e6aaaf87970ce..78f82a65cf6d4 100644 --- a/flink-python/tox.ini +++ b/flink-python/tox.ini @@ -21,7 +21,7 @@ # in multiple virtualenvs. This configuration file will run the # test suite on all supported python versions. # new environments will be excluded by default unless explicitly added to envlist. -envlist = {py37, py38, py39}-cython +envlist = {py37, py38, py39, py310}-cython [testenv] whitelist_externals= diff --git a/pom.xml b/pom.xml index d27fb92734327..de570f6f9811b 100644 --- a/pom.xml +++ b/pom.xml @@ -154,7 +154,7 @@ under the License. 1.3 3.23.1 0.10.9.7 - 2.38.0 + 2.43.0 3.21.7 3.14.9 1.17.2 diff --git a/tools/releasing/NOTICE-binary_PREAMBLE.txt b/tools/releasing/NOTICE-binary_PREAMBLE.txt index ce2ae26e68f16..62c0a9fd880a4 100644 --- a/tools/releasing/NOTICE-binary_PREAMBLE.txt +++ b/tools/releasing/NOTICE-binary_PREAMBLE.txt @@ -16,4 +16,4 @@ This project bundles the following dependencies under the Apache Software Licens This project bundles the following dependencies under the BSD license. See bundled license files for details. -- cloudpickle:2.1.0 +- cloudpickle:2.2.0 diff --git a/tools/releasing/create_binary_release.sh b/tools/releasing/create_binary_release.sh index 1965042508245..b7b14c4f9653d 100755 --- a/tools/releasing/create_binary_release.sh +++ b/tools/releasing/create_binary_release.sh @@ -129,8 +129,8 @@ make_python_release() { cp ${pyflink_actual_name} "${PYTHON_RELEASE_DIR}/${pyflink_release_name}" wheel_packages_num=0 - # py36,py37,py38,py39 for mac and linux (10 wheel packages) - EXPECTED_WHEEL_PACKAGES_NUM=10 + # py37,py38,py39,py310 for mac and linux (11 wheel packages) + EXPECTED_WHEEL_PACKAGES_NUM=11 # Need to move the downloaded wheel packages from Azure CI to the directory flink-python/dist manually. for wheel_file in *.whl; do if [[ ! ${wheel_file} =~ ^apache_flink-$PYFLINK_VERSION- ]]; then