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ゲートウェイプロセスは、ドライバーにポート番号を送信する前に終了しましたか?
しかし、質問には答えられていません。助けてください!ありがとう。
これはあなたを助けるはずです
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が含まれている必要があります。
考えられる理由の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 から
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でマスターを起動すると報告されます)。
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
さまざまなソリューションを何時間も試してみた後、Java 10 SDKがこのエラーの原因であることを確認できます。 Macでは、/ Library/Java/JavaVirtualMachinesに移動し、次のコマンドを実行してJava JDK 10を完全にアンインストールしてください。
Sudo rm -rf jdk-10.jdk/
その後、JDK 8をダウンロードしてください。問題が解決します。
私の場合、このエラーは、以前は正常に実行されていたスクリプトで発生しました。それで、これは私のJava更新によるものであるかもしれないことがわかりました。 Java 1.8を使用する前に、誤ってJava 1.9に更新していました。 Java 1.8に切り替えたときにエラーが消え、すべてが正常に実行されています。同じ理由でこのエラーが発生するが、ubuntuの古いJavaバージョンに戻す方法がわからない場合:run
Sudo update-alternatives --config Java
Javaバージョンの選択を行います
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
例外はなくなり、すべてがうまくいきました。
構文エラーで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
しない。
違いは、最後のコロンが最後の(実際の)例で、パッケージバージョン番号からスカラバージョン番号を分離していることです。
Pycharmでpysparkを実行しても同じエラーが発生します。 pycharmの環境変数にJava_HOMEを追加することで問題を解決しました。
以下の行を使用してJavaをインストールした後、同じ問題が発生し、問題は解決しました!
Sudo add-apt-repository ppa:webupd8team/Java
Sudo apt-get update
Sudo apt-get install Oracle-Java8-installer
Windowsシステムの問題を見つけました。 Javaのインストールディレクトリは、C:\Program Files
などのパスに空白があってはなりません。 C\Java
にJavaを再インストールしました。 Java_HOME
をC:\Java
に設定すると、問題はなくなりました。
これは古いスレッドですが、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
を再度実行することでこれを確認できます。
その後、それは動作するはずです。
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
Java_HOMEの問題があるLinux(Ubuntu 18.04)の場合、キーはmasterフォルダーを指すことです:
Sudo update-alternatives --config Java
に設定します。 Jave 8がインストールされていない場合は、Sudo apt install openjdk-8-jdk
でインストールします。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
。.bashrc
に追加することにより可能です。このファイルは、bashがインタラクティブに開始されるとロードされます ref:.bashrc私の場合、SPARK_DRIVER_MEMORY=10
のSPARK_DRIVER_MEMORY=10g
の代わりにspark-env.sh
を作成したためでした
私にとっての答えは、「ファイル」->「プロジェクト構造」->「モジュール」(IntelliJ)に2つの「コンテンツルート」を追加することでした。
このエラーには多くの理由があります。私の理由は:pysparkのバージョンはsparkと互換性がありません。 pysparkバージョン:2.4.0ですが、sparkバージョンは2.2.0です。 pythonプロセスを開始すると、常にsparkが失敗します。 sparkは、そのポートをPythonに伝えることができません。そのため、エラーは「Pyspark:例外:Javaゲートウェイプロセスがドライバーにポート番号を送信する前に終了しました」になります。
このエラーが発生する実際の理由を見つけるために、ソースコードに飛び込むことをお勧めします
これに何時間もかかりました。私の問題はJava 10のインストールにありました。アンインストールしてJava 8をインストールすると、Pysparkが動作するようになりました。
以下のコードを使用して、このエラーを修正しました。ただし、SPARK_HOMEをセットアップしました。 eproblems website からこの簡単な手順に従うことができます
spark_home = os.environ.get('SPARK_HOME', None)
Javaディレクトリ(パスにある)とPythonインタープリターの両方がスペースなしのディレクトリに存在することを確認してください。これらが私の問題の原因でした。
私は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ファイル名を確認する必要があります)
今すぐ動作します!このヘルプを願っています:)
ディスクスペースが不足しているため、このエラーが発生しました。
同じエラーが発生します。
私のトラブルシューティング手順は次のとおりです。
pyspark/Java_gateway.py
、93行目、launch_gateway
。私の場合、問題はPySparkに一時ディレクトリを作成する権限がないため、IDEをSudoで実行するだけです