Skip to main content
 首页 » 编程设计

python之PySpark之YARN 上不存在输入路径。在本地工作正常

2025年05月04日27over140

我是 Spark 和 Python 的新手,我正在尝试启动 Python 脚本(通过 bash run.sh 命令)。
当我在本地模式下运行它时,一切都很好。当我尝试在集群中运行它时(它有没有 hadoop 的 spark 2.1.2)然后我收到同样的错误。
我希望这些信息足够了。

我应该怎么做才能让脚本在 yarn 中运行?

from pyspark import SparkContext, SparkConf 
import sys 
import collections 
import os 
from subprocess import call, Popen 
import numpy 
import re 
import requests 
import json 
import math 
 
from bs4 import BeautifulSoup 
from bs4.element import Comment 
 
sc = SparkContext("yarn", "test") 
record_attribute = sys.argv[1] 
in_file = sys.argv[2] 
 
 
#Read warc file and split in WARC/1.0 
rdd = sc.newAPIHadoopFile(in_file, 
    "org.apache.hadoop.mapreduce.lib.input.TextInputFormat", 
    "org.apache.hadoop.io.LongWritable", 
    "org.apache.hadoop.io.Text", 
    conf={"textinputformat.record.delimiter": "WARC/1.0"}) 

这是错误

7/11/30 14:05:48 INFO spark.SparkContext: Created broadcast 1 from broadcast at PythonRDD.scala:553 
Traceback (most recent call last): 
  File "/home/test/script.py", line 51, in <module> 
    ,conf={"textinputformat.record.delimiter": "WARC/1.0"}) 
  File "/home/test/spark-2.1.2-bin-without-hadoop/python/lib/pyspark.zip/pyspark/context.py", line 651, in newAPIHadoopFile 
  File "/home/test/spark-2.1.2-bin-without-hadoop/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1133, in __call__ 
  File "/home/test/spark-2.1.2-bin-without-hadoop/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py", line 319, in get_return_value 
py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.newAPIHadoopFile. org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist 

请您参考如下方法:

When I run it on local mode, everything is fine

你正在从本地文件系统加载一个文件,然后

当你部署到集群时,你需要确保 in_file 存在于所有执行器(YARN ResourceManagers)上,或者在一些共享文件系统上,例如 HDFS 或 S3

您应该指定数据在该 bash 脚本中的位置,例如 hdfs:///some/input/in_file

如果您没有将 Hadoop 集群的 core-site.xml 和 hdfs-site.xml 复制到本地 HADOOP_CONF_DIR 环境变量中,或者自己配置它,那么默认行为是读取本地文件系统,因此您需要使用外部文件系统 URI 路径。例如,HDFS 的格式为 hdfs://namenode:port/some/input/in_file

注意:您需要先将文件上传到远程文件系统