我是 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
注意:您需要先将文件上传到远程文件系统
关于python - PySpark - YARN 上不存在输入路径。在本地工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47574624/