You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何通过R客户端连接运行Cloudera CDH的Spark集群

嘿,刚好我之前在CDH集群环境里折腾过SparkR的远程连接,给你梳理下这两个问题的答案:

1. 是否需要在集群所有节点安装SparkR?

完全不需要!CDH在部署Spark的时候,已经把SparkR的依赖包打包在Spark的安装目录里了(一般路径是/opt/cloudera/parcels/CDH/lib/spark/R)。

你只需要保证集群的网关节点/Spark客户端节点有可用的R环境,并且能访问到这个Spark目录就行。如果是YARN模式运行Spark,NodeManager节点会自动在作业运行时从Spark的共享目录加载SparkR依赖,不需要在每个节点单独安装。

2. 如何配置SparkR连接CDH集群?

分两种场景给你说,看你哪种更方便:

场景一:本地笔记本直接连接集群(YARN Client模式)

这种方式需要你的笔记本能和集群的YARN ResourceManager、NodeManager互通(比如在同一个内网,或者端口映射没问题),步骤如下:

  1. 准备SparkR包:如果本地R没有安装SparkR,从集群的${SPARK_HOME}/R/lib目录把SparkR包复制到本地R的library目录,或者直接在R里用install.packages("${SPARK_HOME}/R/lib/SparkR", repos = NULL, type = "source")安装。
  2. 设置环境变量:在本地R里指定集群的Spark路径(注意是集群上的路径,不是本地的):
    Sys.setenv(SPARK_HOME = "/opt/cloudera/parcels/CDH/lib/spark")
    
  3. 初始化SparkSession:用YARN模式连接,关键是要让集群能访问到你的本地Driver:
    library(SparkR)
    
    sparkR.session(
      master = "yarn",
      appName = "Local-SparkR-CDH-Test",
      sparkConfig = list(
        spark.driver.host = "你的笔记本内网IP", # 必须是集群能ping通的IP
        spark.driver.port = "4040", # 自定义一个集群能访问的端口
        spark.yarn.jars = "local:/opt/cloudera/parcels/CDH/lib/spark/jars/*.jar"
      )
    )
    
  4. 验证连接:跑个简单的测试代码:
    test_df <- createDataFrame(data.frame(id = 1:3, val = c("x", "y", "z")))
    showDF(test_df)
    
    如果能正常输出数据,说明连接成功了。

场景二:在集群网关节点运行SparkR(更稳定)

如果本地和集群的网络互通有问题,直接在集群的网关节点操作会更省心:

  1. 登录到集群的网关节点,确保已经安装了R(可以通过Cloudera Manager部署R服务,或者手动安装兼容版本)。
  2. 设置环境变量:
    export SPARK_HOME=/opt/cloudera/parcels/CDH/lib/spark
    export PATH=$SPARK_HOME/bin:$PATH
    
  3. 启动R,初始化SparkSession:
    library(SparkR)
    sparkR.session(master = "yarn", appName = "Gateway-SparkR-Job")
    
    这种方式不需要考虑本地和集群的网络问题,所有作业都在集群内部运行,权限也更容易管理。

额外提醒

  • 注意R版本兼容:CDH的SparkR一般支持R 3.x系列,别用太新的R版本,容易出依赖问题。
  • 如果集群开启了Kerberos认证,先在终端执行kinit 你的用户名@你的Kerberos域获取票据,然后在sparkConfig里加上:
    spark.yarn.principal = "你的用户名@你的Kerberos域",
    spark.yarn.keytab = "/path/to/你的keytab文件"
    

内容的提问来源于stack exchange,提问作者User

火山引擎 最新活动