I have a Kubernetes cluster in GCP running the Flink Kubernetes Operator.

I'm trying to package a project with the Apache Beam MinimalWordCount using
the Flink Runner as a FlinkDeployment to the Kubernetes Cluster

Job Docker image created with this Dockerfile:

FROM flink

ENV FLINK_CLASSPATH /opt/flink/lib/*
ENV CLASSPATH /opt/flink/lib/*

# Add Google Dependencies
ADD
https://repo1.maven.org/maven2/com/google/guava/guava/31.1-jre/guava-31.1-jre.jar
/opt/flink/lib/

# Add Google Cloud Platform Dependencies
ADD
https://repo1.maven.org/maven2/com/google/cloud/google-cloud-core/2.9.0/google-cloud-core-2.9.0.jar
/opt/flink/lib/
ADD
https://repo1.maven.org/maven2/com/google/cloud/google-cloud-core-http/2.9.0/google-cloud-core-http-2.9.0.jar
/opt/flink/lib/
ADD
https://repo1.maven.org/maven2/com/google/cloud/google-cloud-core-grpc/2.9.0/google-cloud-core-grpc-2.9.0.jar
/opt/flink/lib/

# Add dependencies for accessing Google Cloud Storage

ADD
https://repo1.maven.org/maven2/com/google/cloud/google-cloud-storage/2.9.3/google-cloud-storage-2.9.3.jar
/opt/flink/lib/
ADD
https://repo1.maven.org/maven2/com/google/auth/google-auth-library-oauth2-http/1.9.0/google-auth-library-oauth2-http-1.9.0.jar
/opt/flink/lib/
ADD
https://repo1.maven.org/maven2/com/google/http-client/google-http-client/1.42.3/google-http-client-1.42.3.jar
/opt/flink/lib/

# Apache Beam
ADD
https://repo1.maven.org/maven2/org/apache/beam/beam-sdks-java-core/2.43.0/beam-sdks-java-core-2.43.0.jar
/opt/flink/lib/
ADD
https://repo1.maven.org/maven2/org/apache/beam/beam-runners-direct-java/2.43.0/beam-runners-direct-java-2.43.0.jar
/opt/flink/lib/
ADD
https://repo1.maven.org/maven2/org/apache/beam/beam-sdks-java-extensions-google-cloud-platform-core/2.43.0/beam-sdks-java-extensions-google-cloud-platform-core-2.43.0.jar
/opt/flink/lib/
ADD
https://repo1.maven.org/maven2/org/apache/beam/beam-runners-flink_2.11/2.16.0/beam-runners-flink_2.11-2.16.0.jar
/opt/flink/lib/


ADD target/helloworld-bundled-1.0-SNAPSHOT.jar /opt/flink/lib/

This is the yaml for the FlinkDeployment:
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
name: minimal-word-count2
spec:
#image: flink:1.15
image: <docker repo>/flink_with_minimal_word_count
flinkVersion: v1_16
flinkConfiguration:
taskmanager.numberOfTaskSlots: "1"
serviceAccount: flink
ingress:
template: "flink.k8s.io/{{namespace}}/{{name}}(/|$)(.*)"
className: "nginx"
annotations:
nginx.ingress.kubernetes.io/rewrite-target: "/$2"
jobManager:
resource:
memory: "1048m"
cpu: 0.75
taskManager:
# template:
# spec:
# env:
# - name: CLASSPATH
# value: "/opt/flink/lib/dependencies:/opt/flink/lib/*"
resource:
memory: "1048m"
cpu: 0.75
job:
#jarURI:
local:///opt/flink/usrlib/helloworld-1.0-SNAPSHOT-jar-with-dependencies.jar
#jarURI: local:///opt/flink/usrlib/helloworld-bundled-1.0-SNAPSHOT.jar
jarURI: local:///opt/flink/lib/helloworld-bundled-1.0-SNAPSHOT.jar
parallelism: 2
upgradeMode: stateless

When I apply the yaml, the pod crashes with this error:
rg.apache.flink.util.FlinkException: Could not load the provided entrypoint
class.
at
org.apache.flink.client.program.DefaultPackagedProgramRetriever.getPackagedProgram(DefaultPackagedProgramRetriever.java:215)
~[flink-dist-1.16.0.jar:1.16.0]
at
org.apache.flink.kubernetes.entrypoint.KubernetesApplicationClusterEntrypoint.getPackagedProgram(KubernetesApplicationClusterEntrypoint.java:100)
~[flink-dist-1.16.0.jar:1.16.0]
at
org.apache.flink.kubernetes.entrypoint.KubernetesApplicationClusterEntrypoint.main(KubernetesApplicationClusterEntrypoint.java:70)
[flink-dist-1.16.0.jar:1.16.0]
Caused by: org.apache.flink.client.program.ProgramInvocationException: JAR
file does not exist '/opt/flink/lib/helloworld-bundled-1.0-SNAPSHOT.jar'
at
org.apache.flink.client.program.PackagedProgram.checkJarFile(PackagedProgram.java:617)
~[flink-dist-1.16.0.jar:1.16.0]
at
org.apache.flink.client.program.PackagedProgram.loadJarFile(PackagedProgram.java:465)
~[flink-dist-1.16.0.jar:1.16.0]
at
org.apache.flink.client.program.PackagedProgram.<init>(PackagedProgram.java:135)
~[flink-dist-1.16.0.jar:1.16.0]
at
org.apache.flink.client.program.PackagedProgram.<init>(PackagedProgram.java:65)
~[flink-dist-1.16.0.jar:1.16.0]
at
org.apache.flink.client.program.PackagedProgram$Builder.build(PackagedProgram.java:691)
~[flink-dist-1.16.0.jar:1.16.0]
at
org.apache.flink.client.program.DefaultPackagedProgramRetriever.getPackagedProgram(DefaultPackagedProgramRetriever.java:213)
~[flink-dist-1.16.0.jar:1.16.0]
... 2 more
Caused by: java.io.IOException: JAR file does not exist
'/opt/flink/lib/helloworld-bundled-1.0-SNAPSHOT.jar'
at org.apache.flink.util.JarUtils.checkJarFile(JarUtils.java:46)
~[flink-dist-1.16.0.jar:1.16.0]
at
org.apache.flink.client.program.PackagedProgram.checkJarFile(PackagedProgram.java:615)
~[flink-dist-1.16.0.jar:1.16.0]
at
org.apache.flink.client.program.PackagedProgram.loadJarFile(PackagedProgram.java:465)
~[flink-dist-1.16.0.jar:1.16.0]
at
org.apache.flink.client.program.PackagedProgram.<init>(PackagedProgram.java:135)
~[flink-dist-1.16.0.jar:1.16.0]
at
org.apache.flink.client.program.PackagedProgram.<init>(PackagedProgram.java:65)
~[flink-dist-1.16.0.jar:1.16.0]
at
org.apache.flink.client.program.PackagedProgram$Builder.build(PackagedProgram.java:691)
~[flink-dist-1.16.0.jar:1.16.0]
at
org.apache.flink.client.program.DefaultPackagedProgramRetriever.getPackagedProgram(DefaultPackagedProgramRetriever.java:213)
~[flink-dist-1.16.0.jar:1.16.0]
... 2 more

If I exec into the container, the jar is in the /opt/flink/lib (or
/opt/flink/usrlib when I tried copying the fat jar into there), but the
PackagedProgram client doesn't appear to be able to find it.

Does the PackagedProgram need a different configuration setting to find the
jar?  What am I missing?

Reply via email to