Java Flink 1.9没有用于scheme的文件系统:kubernetes上的hdfs

Java Flink 1.9没有用于scheme的文件系统:kubernetes上的hdfs,java,hadoop,dockerfile,apache-flink,hadoop2,Java,Hadoop,Dockerfile,Apache Flink,Hadoop2,我正在尝试将我的项目从Flink 1.4升级到Flink 1.9。在1.4版本中,我构建了一个胖罐子,里面包含了我所有的hadoop2.9.2依赖项,然后我将这些依赖项提交给k8s上的Flink集群。我没有在集群上安装hadoop 当我将项目升级到1.9并同时升级集群时,我无法在集群上运行代码,尽管它在我的IntelliJ IDE上运行得很好。例外情况是: java.io.IOException: No FileSystem for scheme: hdfs at org.apache.hado

我正在尝试将我的项目从Flink 1.4升级到Flink 1.9。在1.4版本中,我构建了一个胖罐子,里面包含了我所有的hadoop
2.9.2
依赖项,然后我将这些依赖项提交给k8s上的Flink集群。我没有在集群上安装hadoop

当我将项目升级到1.9并同时升级集群时,我无法在集群上运行代码,尽管它在我的IntelliJ IDE上运行得很好。例外情况是:

java.io.IOException: No FileSystem for scheme: hdfs
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2660)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2667)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:172)
...
因为我没有在flink中包含任何hadoop依赖项,所以我假设它仍然可以工作,因为所有依赖项都打包到了fat jar中,因为它在1.4上工作得很好

我已经尝试将依赖性添加到shaded-hadoop2中,但这并不能解决问题

    compile group: 'org.apache.flink', name: 'flink-shaded-hadoop2-uber', version: '2.4.1-1.8.2'
我猜为flink设置hadoop路径可能会解决这个问题,并且一直在努力理解我应该如何在Dockerfile中做到这一点。我需要解压hadoop 2二进制文件还是创建一些JAR并将它们添加到
/flink/lib

我的Dockerfile现在看起来像这样:

FROM openjdk:8-jre
MAINTAINER User "myemail@gmail.com"
LABEL version="v1.9.0"

ENV FLINK_HOME=/flink
ENV FLINK_CONF_DIR=/flink/conf
ENV FLINK_APPS_DIR=/flink/apps
ENV FLINK_LIB_DIR=/flink/lib

RUN mkdir -p ${FLINK_HOME}
RUN mkdir -p ${FLINK_CONF_DIR}
RUN mkdir -p ${FLINK_APPS_DIR}
RUN mkdir -p ${FLINK_LIB_DIR}

ENV PATH=$FLINK_HOME/bin:$PATH
ENV CLASSPATH=.:$FLINK_APPS_DIR:$FLINK_LIB_DIR

COPY dist/flink-1.9.0-bin-scala_2.11.tgz ${FLINK_HOME}/flink.tgz
WORKDIR ${FLINK_HOME}

COPY prepare-deployment.sh /
RUN chmod +x /prepare-deployment.sh
RUN /prepare-deployment.sh
RUN rm -rf /prepare-deployment.sh


COPY Tools/netstat /bin/netstat
COPY Tools/ttyd-static-amd64 /bin/ttyd
COPY Tools/jq /bin/jq
COPY Tools/checktm /bin/checktm
COPY Tools/checktm_log /bin/checktm_log

COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
RUN chmod -R 755 /bin
RUN chmod -R 777 /flink
RUN chmod -R 777 /etc
EXPOSE 6122 6123 6124 6125 6126 6127 8080 8081
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["--help"]

在Flink源代码中,您将找到一个目录,其中包含用于构建Docker映像的
build.sh
脚本和
Dockerfile
,等等。它们的设置旨在帮助您正确获取这些详细信息,并根据您的需要进行参数化,以便包含hadoop库

我无法从
build.sh
创建Docker映像。运行以下命令:
/build.sh--job artifacts~/myartifact.jar--from release--flink version 1.9.0--scala version 2.11--hadoop version 2.9
导致:
在flink-1.8之后,我们将下载预绑定的hadoop jar包。网址https://repo.maven.apache.org/maven2/org/apache/flink/flink-shaded-hadoop2-uber//flink-shaded-hadoop2-uber-.jar 不可用,请检查您的参数,退出…
1.9集群上的fat jar不可能在jar中包含所有hadoop依赖项吗?据我所知,Flink还不支持Hadoop 2.9——这就是build.sh脚本失败的原因。我能够解决这个问题。我将
hadoop
tarball复制到Dockerfile中,提取它并在修复它的
hadoop\u类路径中使用它。