首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spark on YARN 提交任務報錯「Input path does not exist」:HDFS 路徑配置排查指南

     編輯:Java 綜合教學

Spark on YARN 任務提交失敗:輸入路徑不存在異常全流程排查

錯誤堆棧核心信息

Exception in thread "main" org.apache.hadoop.mapred.InvalidInputException: 
Input path does not exist: hdfs://mycluster-tj/user/engine_arch/data/mllib/sample_libsvm_data.txt

根因分析

核心原因:YARN 集群模式下,Spark 任務在分布式節點運行,無法訪問本地文件系統,必須讀取 HDFS 或其他分布式存儲上的數據。

  • Local/Standalone 模式:Driver 與 Executor 同機,可直接讀取本地路徑(如 file:///data/xxx.txt)
  • YARN Cluster 模式:Executor 分佈在各 NodeManager,只能訪問共享存儲(HDFS、S3、NFS 等)

解決方案

方案一:上傳數據至 HDFS(推薦)

# 1. 上傳本地文件到 HDFS
hdfs dfs -mkdir -p /user/engine_arch/data/mllib/
hdfs dfs -put sample_libsvm_data.txt /user/engine_arch/data/mllib/

# 2. 代碼中使用 HDFS 路徑
val data = spark.read.format("libsvm")
  .load("hdfs://mycluster-tj/user/engine_arch/data/mllib/sample_libsvm_data.txt")

方案二:使用 --files 分發小文件(適用於配置文件、小數據集)

spark-submit \
  --master yarn \
  --deploy-mode cluster \
  --files /local/path/sample_libsvm_data.txt \
  --class com.example.Main \
  app.jar

# 代碼中通過 SparkFiles.get() 獲取
import org.apache.spark.SparkFiles
val path = SparkFiles.get("sample_libsvm_data.txt")

方案三:統一使用分布式存儲路徑

生產環境建議統一使用 HDFS/S3 路徑,避免環境差異導致問題:

// 配置文件中統一管理
spark.data.path=hdfs://nameservice1/user/app/data/

// 代碼讀取配置
val dataPath = spark.conf.get("spark.data.path")
val df = spark.read.parquet(dataPath + "table_name")

常見誤區避坑指南

誤區正確做法
代碼寫死本地絕對路徑 /home/user/data.txt使用 HDFS 路徑或通過配置注入
以為 --files 適合大文件--files 走 Driver HTTP 分發,大文件極慢,只適合 <100MB 小文件
忽略 HDFS 高可用邏輯路徑使用 hdfs://nameservice/ 而非具體 IP
權限不足導致讀取失敗確保提交用戶有 HDFS 目錄讀權限

驗證步驟

  1. HDFS 路徑存在性:hdfs dfs -ls hdfs://mycluster-tj/user/engine_arch/data/mllib/
  2. 權限檢查:hdfs dfs -test -r /path(返回 0 表示可讀)
  3. 網絡連通性:Executor 節點能解析 NameService 並連通 NameNode/DataNode 端口

總結

「Input path does not exist」在 YARN 模式下 90% 以上由本地路徑未遷移至 HDFS引起。建立「開發測試用本地、生產部署用 HDFS」的路徑管理規範,配合配置中心統一管理存儲路徑,可徹底杜絕此類問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved