import findspark findspark.init() app_name = "zdf-jupyter" os.environ['HADOOP_USER_NAME'] = 'prod_sec_strategy_tech' os.environ['HADOOP_USER_PASSWORD'] = 'TbjnfqTIRFXFidmhfctN3ZT9QwncfQfY' # os.environ['QUEUE'] = 'root.sec_technology_sec_engine_tenant_prod' spark3conf = { "master": "yarn", "spark.submit.deployMode": "client", "driver-memory": "4g", "spark.dynamicAllocation.enabled": "true", "spark.dynamicAllocation.minExecutors": "100", "spark.dynamicAllocation.maxExecutors": "200", "spark.executor.cores": "3", "spark.executor.memory": "10g", "spark.executor.memoryOverhead": "8192", "spark.sql.hive.manageFilesourcePartitions": "false", "spark.default.parallelism": "1000", "spark.sql.shuffle.partitions": "1000", "spark.yarn.queue": "root.sec_technology_sec_engine_tenant_prod", "spark.sql.autoBroadcastJoinThreshold": "-1", "spark.sql.broadcastTimeout": "3000", "spark.driver.extraJavaOptions": "-Dcom.github.fommil.netlib.BLAS=com.github.fommil.netlib.F2jBLAS", "spark.executor.extraJavaOptions": "-Dcom.github.fommil.netlib.BLAS=com.github.fommil.netlib.F2jBLAS", "spark.yarn.dist.archives": "hdfs://difed/user/dm/ENV/nithavellir/v3.0/py3.10.16_lite.tgz", "spark.executorEnv.PYSPARK_PYTHON": "./py3.10.16_lite.tgz/py3.10.16_lite/bin/python3", "spark.extraListeners": "sparkmonitor.listener.JupyterSparkMonitorListener", "spark.jars": ( "hdfs://difed/user/dm/ENV/jars/spark_tfrecord/compile/spark-tfrecord-0.5.1_scala2.12-spark3.2.0-tfhp1.15.0.jar" ), } spark_app = SparkBaseApp() spark_app.initialize(app_name, spark3conf) spark = spark_app.spark hdfs = spark_app.hdfs 为什么会失败呢
时间: 2025-08-08 11:58:30 浏览: 8
初始化 PySpark 会话失败可能由多个因素引起,尤其是在配置了 Hadoop 用户名和密码以及 Spark 相关参数的情况下。以下是可能导致 Spark 会话无法启动的常见原因及分析:
### 1. 环境变量配置问题
若未正确设置 `JAVA_HOME` 或 `SPARK_HOME` 等环境变量,会导致 JVM 启动失败,从而无法创建 Spark 会话。此外,如果系统中存在多个 Java 版本,尤其是非 JDK 的 JRE 或不兼容的 JDK 版本(如 Java 11 以上),也可能导致 Spark 初始化失败。应确保使用的是 OpenJDK 8,并在 `/etc/profile` 中正确配置环境变量,必要时通过 `source /etc/profile` 刷新配置[^2]。
```bash
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
```
### 2. Hadoop 配置问题
Spark 依赖 Hadoop 的配置文件(如 `core-site.xml` 和 `hdfs-site.xml`)来连接 HDFS。若这些文件缺失、路径错误或配置不正确,将导致 Spark 无法识别 Hadoop 用户名或访问 HDFS。应在 `spark-defaults.conf` 中指定 Hadoop 配置目录:
```properties
spark.hadoop.fs.defaultFS hdfs://hadoop01:9000
spark.hadoop.dfs.permissions false
```
此外,若 Kerberos 安全认证开启,需确保正确配置 Kerberos 并使用 `kinit` 登录后再启动 Spark 会话。
### 3. Spark 集群状态异常
Spark 会话依赖于集群管理器(如 YARN、Standalone 或 Mesos)的正常运行。若未启动 Spark 集群(如未执行 `sbin/start-all.sh`),则无法建立与集群的连接,导致初始化失败[^2]。应确保所有节点上的 Spark Worker 正常运行,并通过 `jps` 检查进程状态:
```bash
jps
# 应看到 Master 和 Worker 进程
```
### 4. 网络与主机名解析问题
Spark 节点之间的通信依赖于主机名解析。若 `/etc/hosts` 文件配置不正确,可能导致节点之间无法通信,进而影响 Spark 会话的初始化。应确保所有节点的 IP 地址与主机名映射正确,并在 `/etc/hosts` 中添加如下内容:
```bash
192.168.0.1 VM-0-1-centos-Master fate-cluster
192.168.0.2 VM-0-2-centos-Slave-01 fate-cluster
192.168.0.3 VM-0-3-centos-Slave-02 fate-cluster
```
此外,若主机名与实际 IP 不一致,也会导致 Spark 无法注册节点,进而引发初始化失败[^3]。
### 5. 内存或资源不足
若未合理配置 Spark 的内存参数(如 `spark.executor.memory` 或 `spark.driver.memory`),可能导致 JVM 启动失败或内存溢出错误。应在 SparkSession 初始化时设置合理的资源配置:
```python
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("InitializedSession") \
.config("spark.executor.memory", "4g") \
.config("spark.driver.memory", "4g") \
.getOrCreate()
```
### 6. Spark 与 Hadoop 版本兼容性问题
若使用的 Spark 版本与 Hadoop 版本不兼容,也可能导致初始化失败。例如,Spark 3.x 通常需要 Hadoop 3.x,而 Spark 2.x 可能仅支持 Hadoop 2.x。应确保版本匹配,并在构建项目时使用对应的依赖版本[^4]。
---
###
阅读全文
相关推荐



