[英]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:///
这样的路径.
我能做什么? 也许我想念什么?
问题似乎是您正在部署两个单独的容器taskmanager
和jobmanager
,但该文件仅在jobmanager
上可用,而不在taskmanager
上可用。 您能否也尝试将正确的安装添加到任务管理器并重试?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.