#java #apache-spark
#java #apache-spark
Вопрос:
Я пытаюсь запустить код Python, который ссылается на Apache Spark в Mac OSX 10.14.4, но, похоже, у меня проблема с версиями классов Java, и я не могу решить проблему. Вероятно, это связано с версиями Java, но я не понимаю проблему и как ее решить.
I installed version of Spark: spark-2.4.1-bin-hadoop2.7,
I installed the latest version of Java JDK
Версии Java в окне терминала дают следующий результат:
java -version
>java version "12.0.1" 2019-04-16
>Java(TM) SE Runtime Environment (build 12.0.1 12)
>Java HotSpot(TM) 64-Bit Server VM (build 12.0.1 12, mixed mode, sharing)
javac -version
>javac 12.0.1
Предупреждения при запуске Jupiter Notebook для Python
запуск в окне терминала
$ pyspark
[I 20:47:14.841 NotebookApp] JupyterLab beta preview extension loaded from /Users/myname/anaconda3/lib/python3.6/site-packages/jupyterlab
[I 20:47:14.841 NotebookApp] JupyterLab application directory is /Users/myname/anaconda3/share/jupyter/lab
[I 20:47:14.852 NotebookApp] Serving notebooks from local directory: /Users/myname
[I 20:47:14.852 NotebookApp] 0 active kernels
[I 20:47:14.852 NotebookApp] The Jupyter Notebook is running at:
[I 20:47:14.852 NotebookApp] http://localhost:8888/?token=0666955663ecb246ee569680e4e8e7afbdd3d64b0efcfc75
[I 20:47:14.852 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 20:47:14.896 NotebookApp]
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
http://localhost:8888/?token=0666955663ecb246ee569680e4e8e7afbdd3d64b0efcfc75amp;token=0666955663ecb246ee569680e4e8e7afbdd3d64b0efcfc75
[I 20:47:15.555 NotebookApp] Accepting one-time-token-authenticated connection from 127.0.0.1
[I 20:47:24.920 NotebookApp] Creating new notebook in
[I 20:47:27.600 NotebookApp] Kernel started: 2ff964f7-da2a-4427-9aaa-ff9f96967512
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.spark.unsafe.Platform (file:/Applications/spark-2.4.1-bin-hadoop2.7/jars/spark-unsafe_2.11-2.4.1.jar) to method java.nio.Bits.unaligned()
WARNING: Please consider reporting this to the maintainers of org.apache.spark.unsafe.Platform
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
19/04/22 20:47:37 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[W 20:47:37.658 NotebookApp] Timeout waiting for kernel_info reply from 2ff964f7-da2a-4427-9aaa-ff9f96967512
19/04/22 20:47:39 WARN MacAddressUtil: Failed to find a usable hardware address from the network interfaces; using random bytes: a1:17:d6:b3:ce:11:0b:4c
[I 20:47:41.088 NotebookApp] Adapting to protocol v5.1 for kernel 2ff964f7-da2a-4427-9aaa-ff9f96967512
[I 20:49:27.467 NotebookApp] Saving file at /Untitled1.ipynb
Я могу запускать код Python в записной книжке, если он не ссылается на Spark. Предупреждения также появлялись при запуске Spark в окне терминала до настройки Jupyter Notebook.
Это код Python, который я использовал в записной книжке:
sc = SparkContext.getOrCreate()
import numpy as np
TOTAL = 10000
dots = sc.parallelize([2.0 * np.random.random(2) - 1.0 for i in range(TOTAL)]).cache()
print("Number of random points:", dots.count())
Отчет об ошибке
Когда я запускаю код, я получаю следующее сообщение об ошибке ниже. Цель состоит в том, чтобы иметь возможность запускать программу без этой ошибки.
---------------------------------------------------------------------------
Py4JJavaError Traceback (most recent call last)
/Applications/spark-2.4.1-bin-hadoop2.7/python/pyspark/sql/utils.py in deco(*a, **kw)
62 try:
---> 63 return f(*a, **kw)
64 except py4j.protocol.Py4JJavaError as e:
/Applications/spark-2.4.1-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py
in get_return_value(answer, gateway_client, target_id, name)
327 "An error occurred while calling {0}{1}{2}.n".
--> 328 format(target_id, ".", name), value)
329 else:
Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: java.lang.IllegalArgumentException: Unsupported class file major version 56
at org.apache.xbean.asm6.ClassReader.<init>(ClassReader.java:166)
at org.apache.xbean.asm6.ClassReader.<init>(ClassReader.java:148)
at org.apache.xbean.asm6.ClassReader.<init>(ClassReader.java:136)
More error lines not copied here
Мой вопрос
Я не очень хорошо знаком со средой Java и Apache Spark. Можете ли вы предоставить инструкции о том, как устранить эту ошибку? Вы знаете, можно ли устранить предупреждения во время запуска ноутбука Jupiter? Если вам потребуется дополнительная информация, пожалуйста, дайте мне знать.
Спасибо за помощь.
Комментарии:
1. Переключитесь на Java 1.8
2. Здравствуйте, Сай, спасибо за ваш быстрый ответ. Я не так уж плохо разбираюсь в технических аспектах Java. Не могли бы вы подробнее объяснить, что я должен сделать, чтобы использовать Java 1.8? Инструкции в терминах непрофессионала были бы полезны. Я добавил журнал экрана, когда pyspark запускается, появляются предупреждения, влияют ли они? Спасибо за помощь.
3. Загрузите и установите Java 8: oracle.com/technetwork/java/javaee/downloads /… и задайте переменную path: docs.oracle.com/javase/tutorial/essential/environment/… Spark 2.4 соответствовал версии 1.8, и если вы установите и установите переменную path, вы можете решить эту проблему. В качестве альтернативы, если вы не можете отказаться от Java 12, вы можете попробовать скомпилировать spark из исходного кода с Java 12
4. Привет, Сай, спасибо за инструкции и разъяснения. Я смог решить эту проблему.
5. Рад, что у вас все получилось!