Sparklyr 无法从 Dockerfile 中的 apache 下载 Spark

问题描述

我正在尝试创建一个 dockerfile,该文件从 Rocker/tidyverse 构建图像并包含来自 sparklyr 的 Spark。以前,在这文章Unable to install spark with sparklyr in Dockerfile 中,我试图弄清楚为什么 spark 不能从我的 dockerfile 下载。玩了 5 天后,我想我找到了原因,但不知道如何解决

这是我的 Dockerfile:

# start with the most up-to-date tidyverse image as the base image
FROM rocker/tidyverse:latest

# install openjdk 8 (Java)
RUN apt-get update \
  && apt-get install -y openjdk-8-jdk

# Install devtools
RUN Rscript -e 'install.packages("devtools")'

# Install sparklyr
RUN Rscript -e 'devtools::install_version("sparklyr",version = "1.5.2",dependencies = TRUE)'

# Install spark
RUN Rscript -e 'sparklyr::spark_install(version = "3.0.0",hadoop_version = "3.2")'

RUN mv /root/spark /opt/ && \
    chown -R rstudio:rstudio /opt/spark/ && \
    ln -s /opt/spark/ /home/rstudio/

RUN apt-get install unixodbc unixodbc-dev --install-suggests
RUN apt-get install odbc-postgresql

RUN install2.r --error --deps TRUE DBI
RUN install2.r --error --deps TRUE RPostgres
RUN install2.r --error --deps TRUE dbplyr

下载到这一行之前的所有内容都没有问题:

RUN Rscript -e 'sparklyr::spark_install(version = "3.0.0",hadoop_version = "3.2")'

然后给了我错误

Step 5/11 : RUN Rscript -e 'sparklyr::spark_install(version = "3.0.0",hadoop_version = "3.2")'
 ---> Running in 739775db8f12
Error in download.file(installInfo$packageRemotePath,destfile = installInfo$packageLocalPath,: 
  download from 'https://archive.apache.org/dist/spark/spark-3.0.0/spark-3.0.0-bin-hadoop3.2.tgz' Failed
Calls: <Anonymous>
Execution halted
ERROR: Service 'rocker_sparklyr' Failed to build : The command '/bin/sh -c Rscript -e 'sparklyr::spark_install(version = "3.0.0",hadoop_version = "3.2")'' returned a non-zero code: 1

经过一番研究,我认为这是一个超时错误在这种情况下,我提前运行了:

RUN Rscript -e 'options(timeout=600)'

这并没有增加再次出错的时间。我通过 Rstudio 将所有内容安装到我的个人机器上,并且安装没有任何问题。我认为这个问题是 docker 特有的,因为它无法从 https://archive.apache.org/dist/spark/spark-3.0.0/spark-3.0.0-bin-hadoop3.2.tgz

下载

我发现关于这个问题的文档很少,我非常依赖这篇文章解决这个问题。在此先感谢任何了解这方面知识的人与我们联系。

解决方法

自己下载版本然后用这个功能安装

sparklyr::spark_install_tar(tarfile ="~/spark/spark-3.0.1-bin-hadoop3.2.tgz")

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...