【问题标题】:Flink 1.9 No Filesystem for scheme: hdfs on kubernetesFlink 1.9 No Filesystem for scheme:kubernetes 上的 hdfs
【发布时间】:2019-11-21 20:37:02
【问题描述】:

我正在尝试将我的项目从 Flink 1.4 升级到 Flink 1.9。在 1.4 上,我正在构建一个胖 jar,其中包含我所有的 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"]

【问题讨论】:

    标签: java hadoop dockerfile apache-flink hadoop2


    【解决方案1】:

    在 Flink 源代码中,您将找到一个 flink-container 目录,其中包含一个用于构建 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 结果:After Flink-1.8, we would download pre-bundle hadoop jar package. The url https://repo.maven.apache.org/maven2/org/apache/flink/flink-shaded-hadoop2-uber//flink-shaded-hadoop2-uber-.jar not available, please check your parameters, exit...
    • 在 1.9 集群上通过在 jar 中包含所有 hadoop 依赖项来使用 fat jar 运行是不可能的吗?
    • 据我所知,Flink 还不支持 Hadoop 2.9——这就是 build.sh 脚本失败的原因。
    • 我能够解决这个问题。我将hadoop tarball 复制到Dockerfile,将其解压缩并在修复它的HADOOP_CLASSPATH 中使用。
    猜你喜欢
    • 1970-01-01
    • 2020-08-11
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多