web-dev-qa-db-ja.com

Pyspark:例外:Javaゲート​​ウェイプロセスは、ドライバーにポート番号を送信する前に終了しました

Macbook Airでpysparkを実行しようとしています。起動しようとするとエラーが発生します:

Exception: Java gateway process exited before sending the driver its port number

sc = SparkContext()が起動時に呼び出されるとき。次のコマンドを実行してみました。

./bin/pyspark
./bin/spark-Shell
export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-Shell"

無駄に。私もここを見ました:

Spark + Python-Javaゲート​​ウェイプロセスは、ドライバーにポート番号を送信する前に終了しましたか?

しかし、質問には答えられていません。助けてください!ありがとう。

35
mt88

これはあなたを助けるはずです

1つの解決策は、pyspark-Shellをシェル環境変数PYSPARK_SUBMIT_ARGSに追加することです。

export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-Shell"

Python/pyspark/Java_gateway.pyに変更があります。PYSPARK_SUBMIT_ARGS変数がユーザーによって設定されている場合、PYSPARK_SUBMIT_ARGSにはpyspark-Shellが含まれている必要があります。

20
Anup Ash

考えられる理由の1つは、Javaがインストールされていないため、Java_HOMEが設定されていないことです。

同じ問題が発生しました。それは言う

Exception in thread "main" Java.lang.UnsupportedClassVersionError: org/Apache/spark/launcher/Main : Unsupported major.minor version 51.0
    at Java.lang.ClassLoader.defineClass1(Native Method)
    at Java.lang.ClassLoader.defineClass(ClassLoader.Java:643)
    at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:142)
    at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:277)
    at Java.net.URLClassLoader.access$000(URLClassLoader.Java:73)
    at Java.net.URLClassLoader$1.run(URLClassLoader.Java:212)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(URLClassLoader.Java:205)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:323)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:296)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:268)
    at Sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.Java:406)
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/opt/spark/python/pyspark/conf.py", line 104, in __init__
    SparkContext._ensure_initialized()
  File "/opt/spark/python/pyspark/context.py", line 243, in _ensure_initialized
    SparkContext._gateway = gateway or launch_gateway()
  File "/opt/spark/python/pyspark/Java_gateway.py", line 94, in launch_gateway
    raise Exception("Java gateway process exited before sending the driver its port number")
Exception: Java gateway process exited before sending the driver its port number

sc = pyspark.SparkConf()で。実行して解決しました

Sudo add-apt-repository ppa:webupd8team/Java
Sudo apt-get update
Sudo apt-get install Oracle-Java8-installer

https://www.digitalocean.com/community/tutorials/how-to-install-Java-with-apt-get-on-ubuntu-16-04 から

19
Old Panda

Linux(ubuntu)上のiphythonノートブック(IPython 3.2.1)でも同じ問題がありました。

私の場合、欠けていたのは、次のような$ PYSPARK_SUBMIT_ARGS環境でマスターURLを設定することでした(bashを使用すると仮定):

export PYSPARK_SUBMIT_ARGS="--master spark://<Host>:<port>"

例えば.

export PYSPARK_SUBMIT_ARGS="--master spark://192.168.2.40:7077"

これを.bashrcファイルに入れることができます。 sparkマスターのログで正しいURLを取得します(このログの場所は、/ sbin/start_master.shでマスターを起動すると報告されます)。

5
quax

Ubuntuでpysparkを実行しているときにこのエラーメッセージが表示された場合は、openjdk-8-jdkパッケージをインストールして削除しました

from pyspark import SparkConf, SparkContext
sc = SparkContext(conf=SparkConf().setAppName("MyApp").setMaster("local"))
^^^ error

Open JDK 8をインストールします。

apt-get install openjdk-8-jdk-headless -qq    
2
user2314737

さまざまなソリューションを何時間も試してみた後、Java 10 SDKがこのエラーの原因であることを確認できます。 Macでは、/ Library/Java/JavaVirtualMachinesに移動し、次のコマンドを実行してJava JDK 10を完全にアンインストールしてください。

Sudo rm -rf jdk-10.jdk/

その後、JDK 8をダウンロードしてください。問題が解決します。

2
Kiem Nguyen

同じ例外があり、すべての環境変数を設定およびリセットしてすべてを試しました。しかし、最後の問題は、sparkセッションのappnameプロパティのスペース、つまり「SparkSession.builder.appName( "StreamingDemo")。getOrCreate()」にドリルダウンされました。 appnameプロパティに指定された文字列からスペースを削除した直後に解決されました。Windows10環境でEclipseでpyspark 2.7を使用していました。それは私のために働いた。必須のスクリーンショットが同封されています。 Error_with space

No Error_without space

1
A known

私の場合、このエラーは、以前は正常に実行されていたスクリプトで発生しました。それで、これは私のJava更新によるものであるかもしれないことがわかりました。 Java 1.8を使用する前に、誤ってJava 1.9に更新していました。 Java 1.8に切り替えたときにエラーが消え、すべてが正常に実行されています。同じ理由でこのエラーが発生するが、ubuntuの古いJavaバージョンに戻す方法がわからない場合:run

Sudo update-alternatives --config Java 

Javaバージョンの選択を行います

1
Pankaj Kumar

Java gateway process exited......port numberを適切に設定しても、同じPYSPARK_SUBMIT_ARGS例外が発生しました。 Spark 1.6を実行しており、pysparkをIPython4/Jupyter(OS:VMゲストとしてのubuntu)で動作させようとしています。

この例外を受け取りましたが、hs_err _ *。logが生成されていることに気付き、次のように開始しました。

There is insufficient memory for the Java Runtime Environment to continue. Native memory allocation (malloc) failed to allocate 715849728 bytes for committing reserved memory.

そこで、VirtualBox Settingを介してUbuntuに割り当てられたメモリを増やし、ゲストUbuntuを再起動しました。その後、このJava gateway例外はなくなり、すべてがうまくいきました。

1
Ida

構文エラーでCSVサポートを使用してIPythonを起動しようとすると、Clouderaで同じException: Java gateway process exited before sending the driver its port numberを取得しましたVM:

PYSPARK_DRIVER_PYTHON=ipython pyspark --packages com.databricks:spark-csv_2.10.1.4.0

エラーをスローします:

PYSPARK_DRIVER_PYTHON=ipython pyspark --packages com.databricks:spark-csv_2.10:1.4.0

しない。

違いは、最後のコロンが最後の(実際の)例で、パッケージバージョン番号からスカラバージョン番号を分離していることです。

1
Pim Schaaf

Pycharmでpysparkを実行しても同じエラーが発生します。 pycharmの環境変数にJava_HOMEを追加することで問題を解決しました。

1
Joon

以下の行を使用してJavaをインストールした後、同じ問題が発生し、問題は解決しました!

Sudo add-apt-repository ppa:webupd8team/Java
Sudo apt-get update
Sudo apt-get install Oracle-Java8-installer
1
Coral

Windowsシステムの問題を見つけました。 Javaのインストールディレクトリは、C:\Program Filesなどのパスに空白があってはなりません。 C\JavaにJavaを再インストールしました。 Java_HOMEC:\Javaに設定すると、問題はなくなりました。

1
Sujan Mukherjee

これは古いスレッドですが、Macを使用しているユーザー向けにソリューションを追加しています。

問題はJava_HOMEにありました。これを.bash_profileに含める必要があります。

Java -versionを確認してください。最新のJavaをダウンロードしたが、最新バージョンとして表示されない場合、パスが間違っていることがわかります。通常、デフォルトのパスはexport Java_HOME= /usr/bin/Javaです。

パスを次のように変更してみてください:/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/Java

または、最新のJDKをダウンロードすることもできます。 https://www.Oracle.com/technetwork/Java/javase/downloads/index.html これにより、usr/bin/Javaが自動的に最新バージョンに置き換えられます。 Java -versionを再度実行することでこれを確認できます。

その後、それは動作するはずです。

0
noiivice

Hadoopバイナリなしでsparkを実行しようとすると、上記のエラーが発生する場合があります。 1つの解決策は次のとおりです。

1)hadoopを個別にダウンロードします。
2)PATHにhadoopを追加します
3)SPARKインストールにhadoopクラスパスを追加します

最初の2つのステップは簡単です。最後のステップは、各sparkノード(マスターとワーカー)の$ SPARK_HOME/conf/spark-env.shに以下を追加することで最適に実行できます。

### in conf/spark-env.sh ###

export SPARK_DIST_CLASSPATH=$(hadoop classpath)

詳細についても確認してください: https://spark.Apache.org/docs/latest/hadoop-provided.html

0
natbusa

Java_HOMEの問題があるLinux(Ubuntu 18.04)の場合、キーはmasterフォルダーを指すことです:

  1. Java 8をデフォルトとしてSudo update-alternatives --config Javaに設定します。 Jave 8がインストールされていない場合は、Sudo apt install openjdk-8-jdkでインストールします。
  2. Java_HOME環境変数をmasterJava 8フォルダーとして設定します。場所は、上記の最初のコマンドでjre/bin/Javaを削除することで指定されます。すなわち:export Java_HOME="/usr/lib/jvm/Java-8-openjdk-AMD64/"。コマンドラインで実行した場合、これは現在のセッションにのみ関連します( ref:export command on Linux )。確認するには:echo $Java_HOME
  3. これを永続的に設定するには、IDE/Jupyter/pythonインタープリターを開始する前に実行されるファイルに上記の太字の行を追加します。これは、上記の太字の行を.bashrcに追加することにより可能です。このファイルは、bashがインタラクティブに開始されるとロードされます ref:.bashrc
0
Ran Feldesh

私の場合、SPARK_DRIVER_MEMORY=10SPARK_DRIVER_MEMORY=10gの代わりにspark-env.shを作成したためでした

0
hayj

私にとっての答えは、「ファイル」->「プロジェクト構造」->「モジュール」(IntelliJ)に2つの「コンテンツルート」を追加することでした。

  1. YourPath\spark-2.2.1-bin-hadoop2.7\python
  2. YourPath\spark-2.2.1-bin-hadoop2.7\python\lib\py4j-0.10.4-src.Zip
0
Yuuura87

このエラーには多くの理由があります。私の理由は:pysparkのバージョンはsparkと互換性がありません。 pysparkバージョン:2.4.0ですが、sparkバージョンは2.2.0です。 pythonプロセスを開始すると、常にsparkが失敗します。 sparkは、そのポートをPythonに伝えることができません。そのため、エラーは「Pyspark:例外:Javaゲート​​ウェイプロセスがドライバーにポート番号を送信する前に終了しました」になります。

このエラーが発生する実際の理由を見つけるために、ソースコードに飛び込むことをお勧めします

0
ZhangXu

これに何時間もかかりました。私の問題はJava 10のインストールにありました。アンインストールしてJava 8をインストールすると、Pysparkが動作するようになりました。

0
aghd

以下のコードを使用して、このエラーを修正しました。ただし、SPARK_HOMEをセットアップしました。 eproblems website からこの簡単な手順に従うことができます

spark_home = os.environ.get('SPARK_HOME', None)
0
abhishek kumar

Javaディレクトリ(パスにある)とPythonインタープリターの両方がスペースなしのディレクトリに存在することを確認してください。これらが私の問題の原因でした。

0
Steven

私はMac OSを使用しています。問題を修正しました!

以下に修正方法を示します。

JDK8は正常に動作するようです。 ( https://github.com/jupyter/jupyter/issues/248

だから私は自分のJDK/ Library/Java/JavaVirtualMachinesをチェックしましたが、私はjdk-11.jdkこのパスで。

I ダウンロードしたJDK8 (リンクをたどりました)。どちらですか:

brew tap caskroom/versions
brew cask install Java8

この後、私は追加しました

export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
export Java_HOME="$(/usr/libexec/Java_home -v 1.8)"

to〜/ .bash_profileファイル(jdk1.8ファイル名を確認する必要があります)

今すぐ動作します!このヘルプを願っています:)

0
shihs

ディスクスペースが不足しているため、このエラーが発生しました。

0
Josh Terrell

同じエラーが発生します。

私のトラブルシューティング手順は次のとおりです。

  1. Sparkソースコードを確認してください。
  2. エラーメッセージに従ってください。私の場合:pyspark/Java_gateway.py、93行目、launch_gateway
  3. コードロジックをチェックして根本原因を見つけ、解決します。

私の場合、問題はPySparkに一時ディレクトリを作成する権限がないため、IDEをSudoで実行するだけです

0
J.Bo