apache spark "Py4JError: Answer from Java side is empty" 翻译成中文为:apache spark "Py4JError: Java端回答为空"。

11 浏览
0 Comments

apache spark "Py4JError: Answer from Java side is empty" 翻译成中文为:apache spark "Py4JError: Java端回答为空"。

每次我使用Sparkling Water时都会出现这个错误...

我的配置文件是这样的:

***"spark.driver.memory 65g
spark.python.worker.memory 65g
spark.master local[*]"***

数据量大约是5GB。

关于这个错误没有其他信息...

有人知道为什么会发生这种情况吗?谢谢!

***"ERROR:py4j.java_gateway:在发送或接收时出错。
Traceback (most recent call last):
  File "/data/analytics/Spark1.6.1/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 746, in send_command
    raise Py4JError("Answer from Java side is empty")
Py4JError: 来自Java端的回答为空
ERROR:py4j.java_gateway:尝试连接Java服务器时出错
Traceback (most recent call last):
  File "/data/analytics/Spark1.6.1/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 690, in start
    self.socket.connect((self.address, self.port))
  File "/usr/local/anaconda/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
error: [Errno 111] 连接被拒绝
ERROR:py4j.java_gateway:尝试连接Java服务器时出错
Traceback (most recent call last):
  File "/data/analytics/Spark1.6.1/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 690, in start
    self.socket.connect((self.address, self.port))
  File "/usr/local/anaconda/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
error: [Errno 111] 连接被拒绝
ERROR:py4j.java_gateway:尝试连接Java服务器时出错
Traceback (most recent call last):
  File "/data/analytics/Spark1.6.1/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 690, in start
    self.socket.connect((self.address, self.port))
  File "/usr/local/anaconda/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
error: [Errno 111] 连接被拒绝"***

0
0 Comments

这篇文章将讨论Apache Spark中出现的"Py4JError: Answer from Java side is empty"问题的原因和解决方法。

通常情况下,当Java进程被OOM Killer(内存不足杀手)默默终止时,就会出现这个错误。OOM Killer是一个Linux进程,在系统内存严重不足时启动。它根据进程的“恶劣程度”评分选择一个进程并终止它,以回收内存。可以在这里了解有关OOM Killer的更多信息。

在这种情况下,增加spark.executor.memory和/或spark.driver.memory的值只会使情况更糟,即你可能需要做相反的操作!

其他选项包括:

  • 如果处理非常大的数据源,则增加分区的数量;
  • 增加工作节点的数量;
  • 为工作节点/驱动节点增加更多物理内存;

或者,如果你在使用Docker运行驱动程序/工作节点:

  • 增加Docker的内存限制;
  • 在容器上设置--oom-kill-disable,但务必了解可能的后果!

可以在这里了解有关--oom-kill-disable和其他Docker内存设置的更多信息。

0
0 Comments

在使用pyspark时,如果你使用的是wsl2,请确保你的wsl2配置文件中有增加的内存。

# Settings apply across all Linux distros running on WSL 2

[wsl2]

# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB

memory=12GB # This was originally set to 3gb which caused me to fail since spark.executor.memory and spark.driver.memory was only able to MAX of 3gb regardless of how high i set it.

# Sets the VM to use eight virtual processors

processors=8

参考。你的.wslconfig配置文件应该位于C:\Users\USERNAME中。

Apache Spark是一个开源的大数据处理框架,它提供了分布式计算的能力。在使用pyspark的过程中,有时候会遇到"Py4JError: Answer from Java side is empty"这个错误。下面我们来分析一下这个错误出现的原因以及解决方法。

根据上面提到的信息,在使用wsl2环境下的pyspark时,需要通过修改wsl2的配置文件来增加内存。这是因为默认情况下,wsl2的内存限制为4GB,而这个限制会导致spark.executor.memory和spark.driver.memory的最大值也只能是3GB。因此,当我们将这两个参数设置为超过3GB的值时,就会出现"Py4JError: Answer from Java side is empty"的错误。

为了解决这个问题,我们需要修改wsl2配置文件中的内存限制。可以通过打开.wslconfig文件,将memory的值增加到12GB,这样就可以满足spark.executor.memory和spark.driver.memory的要求。同时,还可以通过设置processors参数来指定虚拟处理器的数量,以提高计算的效率。

需要注意的是,.wslconfig配置文件位于C:\Users\USERNAME目录下,可以根据自己的用户名进行相应的替换。

,当使用pyspark时,如果遇到"Py4JError: Answer from Java side is empty"的错误,可以通过增加wsl2的内存限制来解决。具体方法是修改.wslconfig配置文件,将memory的值增加到足够的大小,以满足spark.executor.memory和spark.driver.memory的要求。同时,还可以通过设置processors参数来提高计算效率。希望这篇文章对你解决这个问题有所帮助!

0
0 Comments

问题出现的原因是没有在Spark配置文件中设置spark.executor.memoryspark.driver.memory。解决方法是根据上述提供的链接,设置这两个参数。

0