Pyspark中First()步骤出错

时间:2016-05-20 19:35:47

标签: apache-spark pyspark

  1. 我使用以下代码读取文件:

    数据= sc.textFile( “fileToRead.csv”)

  2. 我在做什么时

    data.count()
    

    它没有给我任何错误,我正在计算行数。但是,如果我正在做

    data.first()
    

    它给了我以下错误。我把整个错误日志放在这里。

    有谁能告诉我我在哪里做错了?

    非常感谢!

    Py4JJavaError                             Traceback (most recent call last)
    <ipython-input-25-9c10a21c6028> in <module>()
    ----> 1 first=train.first()
    
    C:\Spark\python\lib\pyspark.zip\pyspark\rdd.py in first(self)
       1313         ValueError: RDD is empty
       1314         """
    -> 1315         rs = self.take(1)
       1316         if rs:
       1317             return rs[0]
    
    C:\Spark\python\lib\pyspark.zip\pyspark\rdd.py in take(self, num)
       1295 
       1296             p = range(partsScanned, min(partsScanned + numPartsToTry, totalParts))
    -> 1297             res = self.context.runJob(self, takeUpToNumLeft, p)
       1298 
       1299             items += res
    
    C:\Spark\python\lib\pyspark.zip\pyspark\context.py in runJob(self, rdd, partitionFunc, partitions, allowLocal)
        937         # SparkContext#runJob.
        938         mappedRDD = rdd.mapPartitions(partitionFunc)
    --> 939         port = self._jvm.PythonRDD.runJob(self._jsc.sc(), mappedRDD._jrdd, partitions)
        940         return list(_load_from_socket(port, mappedRDD._jrdd_deserializer))
        941 
    
    C:\Spark\python\lib\py4j-0.9-src.zip\py4j\java_gateway.py in __call__(self, *args)
        811         answer = self.gateway_client.send_command(command)
        812         return_value = get_return_value(
    --> 813             answer, self.gateway_client, self.target_id, self.name)
        814 
        815         for temp_arg in temp_args:
    
    C:\Spark\python\lib\pyspark.zip\pyspark\sql\utils.py in deco(*a, **kw)
         43     def deco(*a, **kw):
         44         try:
    ---> 45             return f(*a, **kw)
         46         except py4j.protocol.Py4JJavaError as e:
         47             s = e.java_exception.toString()
    
    C:\Spark\python\lib\py4j-0.9-src.zip\py4j\protocol.py in get_return_value(answer, gateway_client, target_id, name)
        306                 raise Py4JJavaError(
        307                     "An error occurred while calling {0}{1}{2}.\n".
    --> 308                     format(target_id, ".", name), value)
        309             else:
        310                 raise Py4JError(
    
    Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.runJob.
    : org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 8.0 failed 1 times, most recent failure: Lost task 0.0 in stage 8.0 (TID 14, localhost): java.net.SocketException: Connection reset by peer: socket write error
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(Unknown Source)
        at java.net.SocketOutputStream.write(Unknown Source)
        at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
        at java.io.BufferedOutputStream.write(Unknown Source)
        at java.io.DataOutputStream.write(Unknown Source)
        at java.io.FilterOutputStream.write(Unknown Source)
        at org.apache.spark.api.python.PythonRDD$.writeUTF(PythonRDD.scala:622)
        at org.apache.spark.api.python.PythonRDD$.org$apache$spark$api$python$PythonRDD$$write$1(PythonRDD.scala:442)
        at org.apache.spark.api.python.PythonRDD$$anonfun$writeIteratorToStream$1.apply(PythonRDD.scala:452)
        at org.apache.spark.api.python.PythonRDD$$anonfun$writeIteratorToStream$1.apply(PythonRDD.scala:452)
        at scala.collection.Iterator$class.foreach(Iterator.scala:727)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
        at org.apache.spark.api.python.PythonRDD$.writeIteratorToStream(PythonRDD.scala:452)
        at org.apache.spark.api.python.PythonRunner$WriterThread$$anonfun$run$3.apply(PythonRDD.scala:280)
        at org.apache.spark.util.Utils$.logUncaughtExceptions(Utils.scala:1765)
        at org.apache.spark.api.python.PythonRunner$WriterThread.run(PythonRDD.scala:239)
    
    Driver stacktrace:
        at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1431)
        at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1419)
        at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1418)
        at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
        at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
        at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1418)
        at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:799)
        at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:799)
        at scala.Option.foreach(Option.scala:236)
        at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:799)
        at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:1640)
        at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1599)
        at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1588)
        at org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:48)
        at org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:620)
        at org.apache.spark.SparkContext.runJob(SparkContext.scala:1832)
        at org.apache.spark.SparkContext.runJob(SparkContext.scala:1845)
        at org.apache.spark.SparkContext.runJob(SparkContext.scala:1858)
        at org.apache.spark.api.python.PythonRDD$.runJob(PythonRDD.scala:393)
        at org.apache.spark.api.python.PythonRDD.runJob(PythonRDD.scala)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231)
        at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:381)
        at py4j.Gateway.invoke(Gateway.java:259)
        at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
        at py4j.commands.CallCommand.execute(CallCommand.java:79)
        at py4j.GatewayConnection.run(GatewayConnection.java:209)
        at java.lang.Thread.run(Unknown Source)
    Caused by: java.net.SocketException: Connection reset by peer: socket write error
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(Unknown Source)
        at java.net.SocketOutputStream.write(Unknown Source)
        at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
        at java.io.BufferedOutputStream.write(Unknown Source)
        at java.io.DataOutputStream.write(Unknown Source)
        at java.io.FilterOutputStream.write(Unknown Source)
        at org.apache.spark.api.python.PythonRDD$.writeUTF(PythonRDD.scala:622)
        at org.apache.spark.api.python.PythonRDD$.org$apache$spark$api$python$PythonRDD$$write$1(PythonRDD.scala:442)
        at org.apache.spark.api.python.PythonRDD$$anonfun$writeIteratorToStream$1.apply(PythonRDD.scala:452)
        at org.apache.spark.api.python.PythonRDD$$anonfun$writeIteratorToStream$1.apply(PythonRDD.scala:452)
        at scala.collection.Iterator$class.foreach(Iterator.scala:727)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
        at org.apache.spark.api.python.PythonRDD$.writeIteratorToStream(PythonRDD.scala:452)
        at org.apache.spark.api.python.PythonRunner$WriterThread$$anonfun$run$3.apply(PythonRDD.scala:280)
        at org.apache.spark.util.Utils$.logUncaughtExceptions(Utils.scala:1765)
        at org.apache.spark.api.python.PythonRunner$WriterThread.run(PythonRDD.scala:239
    

1 个答案:

答案 0 :(得分:3)

在我看来,就像遗嘱执行人神秘地死去一样,当你的其他遗嘱执行人试图与之交谈时,你所包含的例外被抛出。从您的输出:“引起:java.net.SocketException:连接重置由peer:套接字写入错误”。

我在这些情况下的经验是,遗嘱执行人员遇到资源匮乏,并被杀害。通常是内存不足。

我在输出中看到您包含文本:“阶段8.0中的任务0失败了1次”。因此,“第一阶段”被称为“第8阶段” - 我怀疑在早期阶段之一发生的事情使得Spark执行者的内存占用空间膨胀。

我假设你在纱线上运行?不幸的是,当纱线的内容出现问题时,根据我的经验,Spark的错误报告很差。如果你真的想知道到底出了什么问题,你必须深入了解所有节点上的纱线日志。另一方面,如果您编写的python代码出现任何问题,Spark会报告致命异常。

我的印象是你刚刚开始尝试使用Spark?如果是这样,我怀疑你没有调整执行程序和驱动程序允许使用的内存量。默认值几乎总是太低。如果你在EMR上运行,EMR-4.x中有一个很棒的新“spark”配置参数,“maximizeResourceAllocation”,它为执行者提供了适当的大量内存。你仍然需要调整驱动程序内存的数量,AFAIK。

设置执行程序和驱动程序内存的一种快速而简单的方法是在命令行上执行此操作:

spark-submit --executor-memory 10G --driver-memory 2G my_spark_app.py ...

您指定的内存量应小于节点的物理内存量。如果你有自己的节点,尝试使用70%的内存;将其余部分留作内核和其他东西的肘部空间。

您还需要调整执行程序可以使用的核心数。默认值通常太低。如果以纱线客户端模式运行,我将执行器核心数设置为小于核心物理数量的核心数。 (我在那里留下额外的一个为“应用程序管理器”纱线容器留出空间;我合理地假设yarn.nodemanager.resource.cpu-vcores设置为物理核心数。)

spark-submit --executor-cores 31 --executor-memory 10G --driver-memory 2G my_spark_app.py ...