Ошибка HiveMetaStore в Pyspark Shell, но не в ноутбуке Jupyter - PullRequest
0 голосов
/ 13 мая 2019

У меня происходит странная вещь, когда я пытаюсь использовать pyspark dataframe или sql. Хотя он работает в записной книжке ipython или на консоли python, я получаю ошибку «javax.jdo.JDOFatalInternalException: Ошибка при создании фабрики транзакционных соединений», когда я запускаю ее в оболочке pyspark.

Короче говоря, все работает, если я запускаю следующее в iPython Notebook или просто в терминале python:

import findspark
findspark.init("C:\Spark\spark-2.3.3-bin-hadoop2.7")

import pyspark # only run after findspark.init()
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()
spark.sql('''select 'spark' as hello ''').show()

Когда я открываю только оболочку pyspark, набирая 'pyspark', я выполняю это: (SparkSession уже инициализирован):

spark.sql('''select 'spark' as hello ''').show()

И мне выдается ошибка:

>>> spark.sql('''select 'spark' as hello ''').show()
2019-05-12 18:41:35 WARN  HiveMetaStore:622 - Retrying creating default database after error: Error creating transactional connection factory
javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
...
pyspark.sql.utils.AnalysisException: 'java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;'

Это очень странно, есть идеи, почему это работает в одной настройке, а не в другой? Спасибо!

Edit: Еще ошибки:

java.sql.SQLException: Unable to open a test connection to the given database. JDBC url = jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true, username = root. Terminating connection pool (set lazyInit to true if you expect to start your database after your app). Original Exception: ------
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

1 Ответ

0 голосов
/ 13 мая 2019

Я получил его на работу.Таким образом, при запуске Spark у вас есть две опции для ваших настроек "spark.sql.catalogImplementation" (куст или в памяти).Я использую Windows, и у меня была головная боль при настройке Hive для работы с pyspark.Ноутбук jupyter, на котором запущен pyspark, по какой-то причине не поддерживает эту настройку (по этой причине он работал).Однако при запуске интерактивного pyspark этот параметр работал со значением по умолчанию spark.sql.catalogImplementation = hive.Если вы хотите избежать головной боли улья, просто задайте параметр во время выполнения следующим образом:

pyspark --conf spark.sql.catalogImplementation=in-memory

Затем запустите эту строку, чтобы проверить, работает ли она:

spark.sql('''select 'spark' as hello ''').show()

Если это работает, товсе работает нормально.

Если вы хотите установить этот параметр по умолчанию, просто перейдите в каталог spark и отредактируйте файл conf / spark-defaults.conf и просто добавьте параметр «spark.sql.catalogImplementation = in-memory».Вероятно, изначально это будет файл TEMPLATE, поэтому обязательно сохраните его как файл .conf.После этого все, что вы запускаете в pyspark, у вас не должно возникнуть проблем с hive.

Другой способ проверить это - перейти в пользовательский интерфейс при запуске сеанса pyspark и проверить страницу среды (http://localhost:4041/environment/). Тамв «Spark Properties» вы можете увидеть, какое значение имеет spark.sql.catalogImplementation (я уверен, что вы также можете проверить это значение в интерактивной оболочке).

Опять же, я просто запускаю pyspark локально намоя Windows-машина, но теперь pyspark вместе с поддержкой dataframe без проблем работает как с ноутбуками jupyter, так и с интерактивной оболочкой!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...