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

时间:2017-11-30 13:28:03

标签: python apache-spark pyspark yarn

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

我应该怎么做才能使脚本以纱线运行?

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

3 个答案:

答案 0 :(得分:1)

  

当我在本地模式下运行时,一切都很好

您正在从本地文件系统加载文件,然后

部署到群集时,需要确保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

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

答案 1 :(得分:0)

您是否正确配置了HADOOP_CONF_DIRYARN_CONF_DIR?该目录应包含hdfs和yarn服务的客户端配置。因此,spark应用程序可以从Yarn获取资源,应用程序可以对HDFS执行读/写操作。

请检查下面给出的文件,其中提供了有关纱线上火花的先决条件的信息。

https://spark.apache.org/docs/2.1.1/running-on-yarn.html

如果从cloudera manager或ambari服务器部署spark,则将自行部署与客户端配置关联的所有环境变量。

答案 2 :(得分:-2)

在YARN群集模式下运行Python SparkPi

运行pi.py文件:

spark-submit --master yarn --deploy-mode cluster SPARK_HOME/lib/pi.py 10

有关详细信息,请参阅以下链接:"Running Spark Applications on YARN"