Я установил Spark 2.4.0 на чистый экземпляр Ubuntu. Фреймы данных Spark работают нормально, но когда я пытаюсь использовать spark.sql в отношении фрейма данных, как в приведенном ниже примере, я получаю сообщение об ошибке «Не удалось получить доступ к хранилищу метаданных. К этому классу нельзя обращаться во время выполнения».
spark.read.json("/data/flight-data/json/2015-summary.json")
.createOrReplaceTempView("some_sql_view")
spark.sql("""SELECT DEST_COUNTRY_NAME, sum(count)
FROM some_sql_view GROUP BY DEST_COUNTRY_NAME
""").where("DEST_COUNTRY_NAME like 'S%'").where("sum(count) > 10").count()
Большинство исправлений, которые я вижу в отношении этой ошибки, относятся к средам, в которых установлен hive. Требуется ли улей, если я хочу использовать операторы sql для фреймов данных в Spark, или мне не хватает чего-то еще?
Чтобы следить за моим исправлением. В моем случае проблема заключалась в том, что в моей системе по умолчанию использовалась Java 11. Как только я установил Java 8 в качестве значения по умолчанию, metastore_db начал работать.
Можете ли вы показать мне, во что превратились эти операторы без использования .createOrReplaceTempView?
val df = spark.read.json ("json_datafile") df.select ("DEST_COUNTRY_NAME") аналогично этому
Это запрос фрейма данных, а не SQL-запрос. Таким образом, невозможно запустить sql-запрос без предварительного использования createOrReplaceTempView. Мой вопрос: смогу ли я запускать искровые запросы sql с установкой искры по умолчанию, не устанавливая улей
Я думаю, вы имеете в виду "может", а не "должен".
Можете ли вы вставить всю трассировку стека с частью Failed to access metastore. This class should not accessed in runtime.
?
Да, мы можем запускать sql-запросы Spark на Spark без установки hive, по умолчанию hive использует mapred в качестве механизма выполнения, мы можем настроить hive на использование Spark или tez в качестве механизма выполнения, чтобы выполнять наши запросы намного быстрее. Hive on Spark Hive использует хранилище метаданных улья для выполнения запросов улья. В то же время sql-запросы могут выполняться через Spark. Если Spark используется для выполнения простых запросов sql или не связан с сервером хранилища метаданных улья, он использует встроенную базу данных derby, и новая папка с именем metastore_db будет создана в домашней папке пользователя, который выполняет запрос.
По какой-то причине этот metastore_db не создается. Я пробовал передать -conf spark.sql.warehouse.dir, но ничего не создается. Разрешения прямо в папке
Я нахожу ответ сбивающим с толку. , по умолчанию ... не актуально. См. spark.apache.org/docs/1.6.0/…. Да, 1.6. Вы можете запрашивать файлы напрямую, Jdbc ... Они не обязательно должны быть в Hive.
Вам следует удалить .createorReplaceTempView, поскольку он создает соблазн и будет использовать улей. помимо этого вы можете запросить сам DataFrame