CentOS下RStudio中spark_connect()无法连接Spark的求助
解决RStudio连接Spark时的Java检测异常问题
我帮你梳理几个针对性的排查和解决步骤,应该能搞定这个明明装了Java却被提示未安装的问题:
1. 先确认RStudio能读到你的Java环境变量
你在终端里能看到JAVA_HOME和Java版本,但RStudio Server作为独立服务运行,它的环境变量不一定和终端一致。先在RStudio的控制台里运行这两行代码:
Sys.getenv("JAVA_HOME") Sys.which("java")
如果输出是空值或者不是你设置的/usr/java/jdk1.8.0_111,那就是RStudio没读到Java的环境变量。
修复方法:
- 编辑RStudio的全局环境配置文件
/etc/rstudio/rserver.conf,添加一行:rsession-ld-library-path=/usr/java/jdk1.8.0_111/jre/lib/amd64:/usr/java/jdk1.8.0_111/jre/lib/amd64/server - 或者修改R的系统级环境配置文件(比如
/usr/lib64/R/etc/Renviron.site),添加:JAVA_HOME=/usr/java/jdk1.8.0_111 PATH=${JAVA_HOME}/bin:${PATH} - 最后重启RStudio Server生效:
sudo systemctl restart rstudio-server
2. 检查sparklyr版本和你的Spark/R是否兼容
你用的是R-3.4.0和Spark 2.1.0.cloudera1,太新的sparklyr可能不兼容旧版本的Spark。建议安装适配Spark 2.x的sparklyr旧版本,比如0.6.4:
install.packages("sparklyr", version = "0.6.4")
安装完记得重启R会话再尝试连接。
3. 直接在spark_connect里强制指定路径
如果环境变量的问题一时搞不定,可以直接在连接命令里指定spark_home和java_home,绕开环境变量的传递问题:
sc <- spark_connect( master = "local", spark_home = "/opt/cloudera/parcels/SPARK2", java_home = "/usr/java/jdk1.8.0_111" )
4. 验证Spark本身的Java环境是否正常
先在终端里用Spark自带的命令测试,确认Spark本身能识别Java:
/opt/cloudera/parcels/SPARK2/bin/spark-shell
如果能正常进入Spark Shell,说明Spark的Java配置没问题,问题肯定出在RStudio这边;如果Spark Shell也报错,那得去检查CDH的Spark配置里的Java路径是否正确。
5. 重新配置R的Java关联
运行R CMD javareconf命令,让R重新识别Java环境:
sudo R CMD javareconf JAVA_HOME=/usr/java/jdk1.8.0_111
执行完这个命令后,重启RStudio再尝试连接Spark。
内容的提问来源于stack exchange,提问作者po_int
相关产品推荐
相关产品推荐

