Докер (HDFS, Spark, Shiny R) - PullRequest
       10

Докер (HDFS, Spark, Shiny R)

0 голосов
/ 23 сентября 2019

У меня есть 3 контейнера в одной сети: контейнер Hadoop, контейнер Spark и контейнер Shiny R

Я хотел бы прочитать папку на HDFS из моего приложения Shiny.Если Hadoop, Spark и Shiny R находятся на одном сервере (без Docker-контейнеров), я могу использовать это:

system(paste0("hdfs dfs -ls ", "/"), intern = TRUE)

Если я использую Docker-контейнеры, где Hadoop и Shiny R находятся в разных контейнерах, я не могу это сделатьэто:

system(paste0("hdfs dfs -ls ", "/"), intern = TRUE)

Поскольку они независимы.

Знаете ли вы, как я могу это сделать?

Я пытался использовать функцию invoke из sparklyr, но этоне работал.

> library(sparklyr)
>
> conf = spark_config()
>
> sc <- spark_connect(master = "local[*]", config = conf)
Re-using existing Spark connection to local[*]
>
> hconf <- sc %>% spark_context() %>% invoke("hadoopConfiguration")
>
> path <- 'hdfs://namenode:9000/user/root/input2/'
>
> spath <- sparklyr::invoke_new(sc, 'org.apache.hadoop.fs.Path', path)
> spath
<jobj[30]>
  org.apache.hadoop.fs.Path
  hdfs://namenode:9000/user/root/input2
> fs <- invoke_static(sc, "org.apache.hadoop.fs.FileSystem", "get",  hconf)
> fs
<jobj[32]>
  org.apache.hadoop.fs.LocalFileSystem
  org.apache.hadoop.fs.LocalFileSystem@788cf1b0
> lls <- invoke(fs, "globStatus", spath)
Error: java.lang.IllegalArgumentException: Wrong FS: hdfs://namenode:9000/user/root/input2, expected: file:///
        at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:649)
        at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:82)
        at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:606)
        at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:824)
        at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:601)
        at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:421)
        at org.apache.hadoop.fs.Globber.getFileStatus(Globber.java:57)
        at org.apache.hadoop.fs.Globber.glob(Globber.java:252)

Спасибо за вашу помощь

...