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

标签 python apache-spark pyspark hadoop-yarn

我是 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.xmlhdfs-site.xml 复制到本地 HADOOP_CONF_DIR 环境变量中,或者自己配置它,那么默认行为是读取本地文件系统,因此您需要使用外部文件系统 URI 路径。例如,HDFS 的格式为 hdfs://namenode:port/some/input/in_file

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

关于python - PySpark - YARN 上不存在输入路径。在本地工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47574624/

相关文章:

python - 无法在 AWS EMR 上使用 PySpark Dataframe 保存 CSV 文件

python - 使用数据生成器时,Keras 自定义指标 self.validation_data 为 none

scala - df.select() 和 df.agg() 有什么区别?

java - scala/spark —如何使用指定的任意字节数组创建字符串?

apache-spark - Spark独立安装无法连接到master

PySpark 序列化结果 OOM 对于 Spark 中的循环来说太大

python - 在 wxpython 中附加/分离两个框架

python - 在 python 中使用 cv2.findContours() 时出错

python - 使用 numpy 运算实现 conv1d

scala - 如何在 Amazon EMR 上运行 Spark Scala 代码