尝试使用Sparklyr将R连接到Spark

5
我正在尝试使用Sparklyr将R连接到Spark。
我按照rstudio博客的教程进行了操作。
我尝试使用install.packages("sparklyr")进行安装,这个过程很顺利。但在另一篇文章中,我看到sparklyr_0.4版本存在一个错误。所以我按照指示使用devtools::install_github("rstudio/sparklyr")下载开发版本,也很顺利,现在我的sparklyr版本是sparklyr_0.4.16。
我按照rstudio教程下载并安装Spark。
spark_install(version = "1.6.2")

当我尝试使用

Spark

第一次连接时:

sc <- spark_connect(master = "local")

我收到了以下错误信息。

Created default hadoop bin directory under: C:\Users\rkaku\AppData\Local\rstudio\spark\Cache\spark-1.6.2-bin-hadoop2.6\tmp\hadoop
Error: 
To run Spark on Windows you need a copy of Hadoop winutils.exe:
1. Download Hadoop winutils.exe from:
   https://github.com/steveloughran/winutils/raw/master/hadoop-2.6.0/bin/
2. Copy winutils.exe to C:\Users\rkaku\AppData\Local\rstudio\spark\Cache\spark-1.6.2-bin-hadoop2.6\tmp\hadoop\bin
Alternatively, if you are using RStudio you can install the RStudio Preview Release,
which includes an embedded copy of Hadoop winutils.exe:
  https://www.rstudio.com/products/rstudio/download/preview/**

然后我下载了winutils.exe并将其放置在C:\Users\rkaku\AppData\Local\rstudio\spark\Cache\spark-1.6.2-bin-hadoop2.6\tmp\hadoop\bin - 这是在指导中给出的。

我尝试重新连接到spark。

sc <- spark_connect(master = "local",version = "1.6.2")

但我遇到了以下错误

Error in force(code) : 
Failed while connecting to sparklyr to port (8880) for sessionid (8982): Gateway in port (8880) did not respond.
Path: C:\Users\rkaku\AppData\Local\rstudio\spark\Cache\spark-1.6.2-bin-hadoop2.6\bin\spark-submit2.cmd
Parameters: --class, sparklyr.Backend, --packages, "com.databricks:spark-csv_2.11:1.3.0", "C:\Users\rkaku\Documents\R\R-3.2.3\library\sparklyr\java\sparklyr-1.6-2.10.jar", 8880, 8982
Traceback:
  shell_connection(master = master, spark_home = spark_home, app_name = app_name, version = version, hadoop_version = hadoop_version, shell_args = shell_args, config = config, service = FALSE, extensions = extensions)
  start_shell(master = master, spark_home = spark_home, spark_version = version, app_name = app_name, config = config, jars = spark_config_value(config, "spark.jars.default", list()), packages = spark_config_value(config, "sparklyr.defaultPackages"), extensions = extensions, environment = environment, shell_args = shell_args, service = service)
  tryCatch({
gatewayInfo <- spark_connect_gateway(gatewayAddress, gatewayPort, sessionId, config = config, isStarting = TRUE)
}, error = function(e) {
abort_shell(paste("Failed while connecting to sparklyr to port (", gatewayPort, ") for sessionid (", sessionId, "): ", e$message, sep = ""), spark_submit_path, shell_args, output_file, error_file)
})
  tryCatchList(expr, classes, parentenv, handlers)
  tryCatchOne(expr, names, parentenv, handlers[[1]])
  value[[3]](cond)
  abort_shell(paste("Failed while connecting to sparklyr to port (", gatewayPort, ") for sessionid (", sessionId, "): ", e$message, sep = ""), spark_submit_path, shell_args, output_file, error_file)

---- Output Log ----
The system cannot find the path specified.

请问有人能帮我解决这个问题吗?我已经困扰了两周,没有得到太多帮助。非常感谢任何能帮助我解决问题的人。


我会省略前两段 - 你不需要为提问道歉。看起来你已经自己解决了第一个问题 - 至少你已经通过了关于需要winutils的错误,所以我不确定这在这一点上是否真的相关。专注于你正在尝试解决的问题,即第二个错误。 - Caleb
1
@Caleb:感谢您审阅我的问题。我将删除我的初始评论。 - Rakesh Kumar
2个回答

3

我终于解决了问题,非常高兴自己能够独立完成。显然,这需要大量的谷歌搜索。

问题出在Winutils.exe上。

R Studio没有提供放置winutils.exe所需位置的正确信息。从我的问题 - 位置复制-粘贴winutils.exe是C:\Users\rkaku\AppData\Local\rstudio\spark\Cache\spark-1.6.2-bin-hadoop2.6\tmp\hadoop\bin。

但是,在搜索时,我发现会在临时文件夹中创建一个日志文件以检查问题,其中如下所示:

java.io.IOException: Could not locate executable C:\Users\rkaku\AppData\Local\rstudio\spark\Cache\spark-1.6.2-bin-hadoop2.6\bin\bin\winutils.exe in the Hadoop binaries

日志文件中给出的位置与R Studio建议的位置不同 :) 最终,在Spark日志文件引用的位置插入winutils.exe后,我成功连接到Sparklyr ...... wohooooooo!!!! 我不得不说,花费了3周时间才能连接到Spark,但一切都是值得的 :)


0

请注意任何代理

    Sys.getenv("http_proxy")
    Sys.setenv(http_proxy='')

这个对我管用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接