Thanks. I would think this should rather be done up stream in the source image, for that matter I would have expected for this package to have been installed already as you can't really do allot onthe flink nodes with python without this package.
G On Wed, May 14, 2025 at 3:33 PM Nikola Milutinovic <n.milutino...@levi9.com> wrote: > Hmm, lemme see… > > > > Oh, yes, we also had to link Python bin: > > > > ldconfig /usr/lib > > ln -s /usr/bin/python3 /usr/bin/python > > > > Classic trickery. > > > > Nix, > > > > *From: *George <george...@gmail.com> > *Date: *Wednesday, May 14, 2025 at 1:09 PM > *To: *Nikola Milutinovic <n.milutino...@levi9.com>, user@flink.apache.org > <user@flink.apache.org> > *Subject: *Re: Python based User defined function on Flink 1.19.1 > > Hi there > > > > Got it build :) > > > > I installed python3-pip in addition to the java - headless version, then > installed the package globally and then did the clean up. > > > > I am however getting the below now. > > it seems to be looking for python from the flink side and not python3 > > > > ``` > > flink@jobmanager:/sql/prompush$ /opt/flink/bin/flink run \ > > -py /sql/prompush/main.py \ > > -m jobmanager:8083 > WARNING: Unknown module: jdk.compiler specified to --add-exports > WARNING: Unknown module: jdk.compiler specified to --add-exports > WARNING: Unknown module: jdk.compiler specified to --add-exports > WARNING: Unknown module: jdk.compiler specified to --add-exports > WARNING: Unknown module: jdk.compiler specified to --add-exports > org.apache.flink.client.program.ProgramAbortException: > java.io.IOException: Cannot run program "python": error=2, No such file or > directory > at org.apache.flink.client.python.PythonDriver.main(PythonDriver.java:134) > at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown > Source) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown > Source) > at java.base/java.lang.reflect.Method.invoke(Unknown Source) > at > org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:356) > at > org.apache.flink.client.program.PackagedProgram.invokeInteractiveModeForExecution(PackagedProgram.java:223) > at org.apache.flink.client.ClientUtils.executeProgram(ClientUtils.java:113) > at > org.apache.flink.client.cli.CliFrontend.executeProgram(CliFrontend.java:1026) > at org.apache.flink.client.cli.CliFrontend.run(CliFrontend.java:247) > at > org.apache.flink.client.cli.CliFrontend.parseAndRun(CliFrontend.java:1270) > at > org.apache.flink.client.cli.CliFrontend.lambda$mainInternal$10(CliFrontend.java:1367) > at java.base/java.security.AccessController.doPrivileged(Unknown Source) > at java.base/javax.security.auth.Subject.doAs(Unknown Source) > at > org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1836) > at > org.apache.flink.runtime.security.contexts.HadoopSecurityContext.runSecured(HadoopSecurityContext.java:41) > at > org.apache.flink.client.cli.CliFrontend.mainInternal(CliFrontend.java:1367) > at org.apache.flink.client.cli.CliFrontend.main(CliFrontend.java:1335) > Caused by: java.io.IOException: Cannot run program "python": error=2, No > such file or directory > at java.base/java.lang.ProcessBuilder.start(Unknown Source) > at java.base/java.lang.ProcessBuilder.start(Unknown Source) > at > org.apache.flink.client.python.PythonEnvUtils.startPythonProcess(PythonEnvUtils.java:378) > at > org.apache.flink.client.python.PythonEnvUtils.launchPy4jPythonClient(PythonEnvUtils.java:492) > at org.apache.flink.client.python.PythonDriver.main(PythonDriver.java:92) > ... 17 more > Caused by: java.io.IOException: error=2, No such file or directory > at java.base/java.lang.ProcessImpl.forkAndExec(Native Method) > at java.base/java.lang.ProcessImpl.<init>(Unknown Source) > at java.base/java.lang.ProcessImpl.start(Unknown Source) > ... 22 more > > ``` > > > > On Wed, May 14, 2025 at 11:50 AM George <george...@gmail.com> wrote: > > Hi there > > > > Wonder if you can assist. > > > > First thinking of installing apache-flink into a dedicated environment, > see my docker file attached... this does result in the attached err.txt > stack though. > > Wonder if it does not simply make more sense to install apache-flink > globally, then everyone that works with python on this node would have > access to it. > > > > personally i would have expected this have formed part of this image > available... > > > > G > > > > On Wed, May 14, 2025 at 11:18 AM Nikola Milutinovic < > n.milutino...@levi9.com> wrote: > > Hi George. > > > > We saw the same problem, running Apache Flink 1.19 and 1.20 images. The > cause is that Flink image provides a JRE and you need JDK to build/install > PyFlink. And, oddly enough, I think it was only on ARM64 images. Amd64 was > OK, I think. So, Mac M1, M2, M3… > > > > Our Docker file for building our custom image has some extra steps, to > install JDK, pip-install and then cleanup. > > > > RUN apt-get update -y \ > > && apt-get upgrade -y \ > > && apt-get install --no-install-recommends -y \ > > … > > openjdk-17-jdk-headless \ > > ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-arm64 > > > > After PIP install our requirement.txt, we do cleanup. > > > > # Cleanup JDK > > RUN apt-get remove -y openjdk-17-jdk-headless > > ENV JAVA_HOME=/opt/java/openjdk > > > > Hope it helps. > > > > Nix. > > > > *From: *George <george...@gmail.com> > *Date: *Wednesday, May 14, 2025 at 10:23 AM > *To: *user@flink.apache.org <user@flink.apache.org> > *Subject: *Python based User defined function on Flink 1.19.1 > > Hi all > > > > My Flink Jobmanager and Taskmanager is based on the community 1.19.1 on > the Java 17 image. > > > > I've extended this by installing Python 3.11 and python3.11-venv. > > > > created my venv environment, activated it, > > when trying to pip install apache-flink. I first got an error saying > /opt/java/openjdk/include does not exist... so created it. > > Next attempt ended in the below error. > > > > Please advise. > > > > G > > > > ``` > > venv) flink@jobmanager:/sql/prompush$ pip install apache-flink > Collecting apache-flink > Downloading apache-flink-2.0.0.tar.gz (1.5 MB) > ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 1.9 MB/s eta > 0:00:00 > Installing build dependencies ... done > Getting requirements to build wheel ... done > Preparing metadata (pyproject.toml) ... done > Collecting python-dateutil<3,>=2.8.0 > Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB) > Collecting requests>=2.26.0 > Using cached requests-2.32.3-py3-none-any.whl (64 kB) > Collecting pyarrow>=5.0.0 > Downloading pyarrow-20.0.0-cp311-cp311-manylinux_2_28_aarch64.whl (40.7 > MB) > ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.7/40.7 MB 415.8 kB/s eta > 0:00:00 > Collecting pytz>=2018.3 > Using cached pytz-2025.2-py2.py3-none-any.whl (509 kB) > Collecting fastavro!=1.8.0,>=1.1.0 > Using cached > fastavro-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl > (3.3 MB) > Collecting pemja==0.4.1 > Downloading pemja-0.4.1.tar.gz (50 kB) > ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 50.7/50.7 KB 600.0 kB/s eta > 0:00:00 > Installing build dependencies ... done > Getting requirements to build wheel ... error > error: subprocess-exited-with-error > > × Getting requirements to build wheel did not run successfully. > │ exit code: 255 > ╰─> [1 lines of output] > jni.h should be in '/opt/java/openjdk/include/jni.h' but doesn't > exist. Please check you've installed the JDK properly. > [end of output] > > note: This error originates from a subprocess, and is likely not a > problem with pip. > error: subprocess-exited-with-error > > × Getting requirements to build wheel did not run successfully. > │ exit code: 255 > ╰─> See above for output. > > note: This error originates from a subprocess, and is likely not a problem > with pip. > > ``` > > > > -- > > You have the obligation to inform one honestly of the risk, and as a person > you are committed to educate yourself to the total risk in any activity! > > Once informed & totally aware of the risk, > every fool has the right to kill or injure themselves as they see fit! > > > > > -- > > You have the obligation to inform one honestly of the risk, and as a person > you are committed to educate yourself to the total risk in any activity! > > Once informed & totally aware of the risk, > every fool has the right to kill or injure themselves as they see fit! > > > > > -- > > You have the obligation to inform one honestly of the risk, and as a person > you are committed to educate yourself to the total risk in any activity! > > Once informed & totally aware of the risk, > every fool has the right to kill or injure themselves as they see fit! > -- You have the obligation to inform one honestly of the risk, and as a person you are committed to educate yourself to the total risk in any activity! Once informed & totally aware of the risk, every fool has the right to kill or injure themselves as they see fit!