You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过Spark访问Cloudera Hadoop集群主节点的技术求助

用Scala+Spark连接Cloudera Hadoop集群的完整配置方案

嘿,看你已经搞定了基础环境——10节点的Cloudera集群跑起来了,用IntelliJ远程开发Scala+Spark应用,还已经在SBT里加了部分依赖。我先帮你补全缺失的Spark SQL依赖,再一步步说清楚连接集群的关键配置,确保你能顺利连上:

第一步:补全SBT依赖配置

首先,Spark SQL的版本必须和Spark Core保持一致(你用的是2.2.0),另外还要加上匹配Cloudera版本的Hadoop客户端依赖,避免连接HDFS时出现版本不兼容问题。注意把hadoop-client的版本换成你Cloudera集群对应的Hadoop版本(比如CDH 5.15对应2.6.0-cdh5.15.0):

libraryDependencies ++= Seq(
  "org.scalatestplus.play" %% "scalatestplus-play" % "3.1.2" % Test,
  "com.h2database" % "h2" % "1.4.196",
  // 标记为Provided,因为集群上已经预装了Spark,打包时不用包含这些依赖
  "org.apache.spark" %% "spark-core" % "2.2.0" % Provided,
  "org.apache.spark" %% "spark-sql" % "2.2.0" % Provided,
  // 替换为你的Cloudera Hadoop版本
  "org.apache.hadoop" % "hadoop-client" % "2.6.0-cdh5.15.0" % Provided
)

为什么加Provided?因为Cloudera集群本身已经部署了Spark和Hadoop的核心库,打包时把这些依赖排除掉,既能减少jar包体积,又能避免版本冲突。

第二步:编写Spark连接集群的代码

下面是一个最小化的连接示例,关键配置都标出来了,你需要替换成自己集群的主机地址:

import org.apache.spark.sql.SparkSession

object ClouderaSparkConnector {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("ClouderaClusterConnectionTest")
      // Cloudera默认用YARN做资源管理器,所以指定master为yarn
      .master("yarn")
      // 替换为你的ResourceManager主机和端口(默认8032是提交端口)
      .config("spark.hadoop.yarn.resourcemanager.address", "your-rm-host:8032")
      // 替换为你的NameNode主机和HDFS端口(默认8020)
      .config("spark.hadoop.fs.defaultFS", "hdfs://your-nn-host:8020")
      // 指定集群上Spark jars的HDFS路径,避免远程提交时重复上传依赖
      .config("spark.yarn.jars", "hdfs:///user/spark/jars/*")
      .getOrCreate()

    // 测试读取HDFS上的文件,替换成你集群上存在的文件路径
    val testDF = spark.read.text("hdfs://your-nn-host:8020/sample.txt")
    testDF.show()

    spark.stop()
  }
}

第三步:IntelliJ的关键配置

光有代码还不够,IntelliJ这边还要做两个重要设置:

  • Scala版本匹配:Spark 2.2.0对应Scala 2.11.x,别用2.12版本,不然会出现兼容性问题。在IntelliJ的Project Structure里确认Scala SDK版本和集群一致。
  • Hadoop配置文件加载:把集群上的core-site.xml、yarn-site.xml、hdfs-site.xml拷贝到本地目录,然后在IntelliJ的运行配置里添加VM参数:
    -DHADOOP_CONF_DIR=/path/to/your/local/cloudera-config-folder
    
    这样Spark就能自动读取集群的配置,不用在代码里硬编码所有参数,更灵活。
  • 网络连通性:确保你的开发主机能访问集群的ResourceManager、NameNode以及各个DataNode的端口(比如8032、8020、8088等),如果有防火墙的话要开放这些端口。

这样配置下来,你应该就能顺利从IntelliJ远程连接到Cloudera Hadoop集群,运行Spark任务了。如果遇到问题,比如权限或者版本冲突,再针对性排查就行~

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:59:03