繁体   English   中英

Apache 中的作业/jar Flink 没有权限在 Docker 中归档

[英]Job/jar in Apache Flink doesn't have permisson to file in Docker

我有 Apache Flink 作业用于解析 csv 文件,它在 Windows 的 IntelliJ IDEA 中工作正常。但是当我把我的工作(jar)放在 docker-container Apache Flink 中时,我遇到了使用 class FileSource.forRecordStreamFormat(...) 在容器内我有文件: /opt/flink/data/test2.csv 权限没问题(我什至可以从我的工作中更改文件)。 对于fileName名,我使用/opt/flink/data/test2.csv//opt/flink/data/test2.csv///opt/flink/data/test2.csv

权限:

# pwd
/opt/flink/data
# ls -ls
total 16088
 1204 -rwxrwxrwx 1 root root  1231979 Jan 24 15:54 test2.csv
14876 -rwxrwxrwx 1 root root 15231523 Jan 22 19:24 test3.csv
    8 -rwxrwxrwx 1 root root     6623 Jan 24 14:32 test_Home.xlsx

Docker-compose:

version: "2.2"
services:
  jobmanager:
    image: flink:1.16-java8
    ports:
      - "8081:8081"
    command: jobmanager
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
    volumes:
      - /c/Users/MGubina/Desktop/data:/opt/flink/data

  taskmanager:
    image: flink:1.16-java8
    depends_on:
      - jobmanager
    command: taskmanager
    scale: 1
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        taskmanager.numberOfTaskSlots: 2

部分工作代码:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        CsvReaderFormat<Product> csvFormat = CsvReaderFormat.forPojo(Product.class);

        FileSource<Product> csvSource =
//                FileSource.forRecordStreamFormat(csvFormat, Path.fromLocalFile(file)).build(); // firsrt version
                FileSource.forRecordStreamFormat(csvFormat, new Path(fileName)).build(); // second version

        DataStream<Product> csvInputStream = env.fromSource(csvSource, WatermarkStrategy.noWatermarks(), "csv-source");
...

异常日志:

Caused by: java.io.FileNotFoundException: File file:/opt/flink/data/test2.csv does not exist or the user running Flink ('flink') has insufficient permissions to access it.
        at org.apache.flink.core.fs.local.LocalFileSystem.getFileStatus(LocalFileSystem.java:106)
        at org.apache.flink.connector.file.src.impl.StreamFormatAdapter.openStream(StreamFormatAdapter.java:157)
        at org.apache.flink.connector.file.src.impl.StreamFormatAdapter.createReader(StreamFormatAdapter.java:70)
        at org.apache.flink.connector.file.src.impl.FileSourceSplitReader.checkSplitOrStartNext(FileSourceSplitReader.java:112)
        at org.apache.flink.connector.file.src.impl.FileSourceSplitReader.fetch(FileSourceSplitReader.java:65)
        at org.apache.flink.connector.base.source.reader.fetcher.FetchTask.run(FetchTask.java:58)
        at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.runOnce(SplitFetcher.java:142)

我尝试使用不同的方式获取 Path,但没有成功。 只要我有异常File file:/opt/flink/data/test2.csv does not exist我认为问题可能是在 Docker(类 Unix)的本地 fyle 系统中需要像file:///这样的路径.

我能做什么? 也许我想念什么?

问题似乎是您正在部署两个单独的容器taskmanagerjobmanager ,但该文件仅在jobmanager上可用,而不在taskmanager上可用。 您能否也尝试将正确的安装添加到任务管理器并重试?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM