java.lang.ClassNotFoundException:Kubernetes Flink 会话作业的 org.apache.hadoop.conf.Configuration

问题描述 投票:0回答:1

我通过 Helm Operator 将 Flink 部署到 Kubernetes 集群。我启用了

flink-s3-f2-hadoop
插件:

# Source: flink-demo/templates/flink-session-cluster.yaml
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  name: flink-session-cluster
spec:
  image: flink:1.18
  flinkVersion: v1_18
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "2"
  serviceAccount: flink
  podTemplate:
    spec:
      containers:
        - name: flink-main-container
          env:
            - name: ENABLE_BUILT_IN_PLUGINS
              value: flink-s3-fs-hadoop-1.18.1.jar
  jobManager:
    resource:
      cpu: 1
      memory: 2048m
  taskManager:
    resource:
      cpu: 1
      memory: 2048m

然后我部署了工作:

apiVersion: flink.apache.org/v1beta1
kind: FlinkSessionJob
metadata:
  name: kafka-to-iceberg-job
spec:
  deploymentName: flink-session-cluster
  job:
    jarURI: <joburi>
    parallelism:  1
    upgradeMode: stateless

pom.xml
中,我添加了依赖关系
hadoop-common
,如下所示:

   <dependency>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-common</artifactId>
       <version>3.3.6</version>
       <scope>provided</scope>
   </dependency>

我的理解是,如果您在

flink-s3-f2-hadoop
中启用插件
podTemplate
,那么它应该可以工作,但我仍然收到
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration
错误。

kubernetes hadoop apache-flink kubernetes-helm
1个回答
0
投票

添加

provided
范围只是表明在构造可执行文件时,依赖关系将在运行时可用(即通常由运行基于操作员的作业的映像提供),在本例中是
flink:1.18
映像。

您不应该明确需要对 Hadoop 的引用,因为

ENABLE_BUILT_IN_PLUGINS
配置应该可以为您提供所需的一切。我以完全相同的方式使用了 S3 和 GCS 相关插件来针对 Flink 的普通图像。

您确定这不是 YAML 间距/格式问题吗?尝试设置间距,使您的项目显示在与您的

env
相同的水平上,如下所示:

spec:
  ...
  podTemplate:
    spec:
      containers:
        - name: flink-main-container
          env:
          - name: ENABLE_BUILT_IN_PLUGINS
            value: flink-s3-fs-hadoop-1.18.1.jar

您应该在日志中看到一些内容,表明它正在尝试在 pod 启动时加载依赖项。

© www.soinside.com 2019 - 2024. All rights reserved.