PySpark java.lang.ExceptionInInitializerError Вызывается: java.lang.StringIndexOutOfBoundsException - PullRequest
0 голосов
/ 03 июля 2018

Я следовал этим инструкциям и установил Apache Spark (PySpark) 2.3.1 на мою машину со спецификациями:

  • Ubuntu 18.04
  • JDK 10
  • Python 3,6

Когда я создаю SparkSession либо косвенно, вызывая pyspark из оболочки, либо напрямую создавая сеанс в моем приложении с помощью:

spark = pyspark.sql.SparkSession.builder.appName('test').getOrCreate()

Я получаю следующее исключение:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:80)
    at org.apache.hadoop.security.SecurityUtil.getAuthenticationMethod(SecurityUtil.java:611)
    at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:273)
....
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:137)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.StringIndexOutOfBoundsException: begin 0, end 3, length 2
    at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3107)
    at java.base/java.lang.String.substring(String.java:1873)
    at org.apache.hadoop.util.Shell.<clinit>(Shell.java:52)
    ... 22 more
Traceback (most recent call last):
  File "/home/welshamy/tools/anaconda3/lib/python3.6/site-packages/pyspark/python/pyspark/shell.py", line 38, in <module>
    SparkContext._ensure_initialized()
  File "/home/welshamy/tools/anaconda3/lib/python3.6/site-packages/pyspark/context.py", line 292, in _ensure_initialized
    SparkContext._gateway = gateway or launch_gateway(conf)
  File "/home/welshamy/tools/anaconda3/lib/python3.6/site-packages/pyspark/java_gateway.py", line 93, in launch_gateway
    raise Exception("Java gateway process exited before sending its port number")
Exception: Java gateway process exited before sending its port number

Если я использую ноутбук Jupyter, я также получаю это исключение в ноутбуке:

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

Все решения, которые я нашел и применяли [ 1 , 2 , 3 ], указывают на определения переменных среды, но ни одно из них не помогло мне.

1 Ответ

0 голосов
/ 03 июля 2018

PySpark 2.3.1 не поддерживает JDK 10+. Вам нужно установить JDK 8 и установить переменную окружения JAVA_HOME, указав на нее.

Если вы используете Ubuntu (или * nix):

  1. Установить JDK 8

    sudo apt-get install openjdk-8-jdk
    
  2. Добавьте следующую строку в ваш файл ~/.bashrc:

    export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
    

В Windows установить JDK 8 и установить JAVA_HOME.

...