apache spark "Py4JError: Answer from Java side is empty" 翻译成中文为:apache spark "Py4JError: Java端回答为空"。
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] 连接被拒绝"***
这篇文章将讨论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内存设置的更多信息。
在使用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参数来提高计算效率。希望这篇文章对你解决这个问题有所帮助!