Я пытаюсь подключиться к каталогу хранилища Hive с помощью Spark на IntelliJ, который расположен по следующему пути:
hdfs://localhost:9000/user/hive/warehouse
Для этого я использую следующий код:
import org.apache.spark.sql.SparkSession
// warehouseLocation points to the default location for managed databases and tables
val warehouseLocation = "hdfs://localhost:9000/user/hive/warehouse"
val spark = SparkSession
.builder()
.appName("Spark Hive Local Connector")
.config("spark.sql.warehouse.dir", warehouseLocation)
.config("spark.master", "local")
.enableHiveSupport()
.getOrCreate()
spark.catalog.listDatabases().show(false)
spark.catalog.listTables().show(false)
spark.conf.getAll.mkString("\n")
import spark.implicits._
import spark.sql
sql("USE test")
sql("SELECT * FROM test.employee").show()
Как видите, я создал базу данных 'test' и создал таблицу 'employee' в этой базе данных с помощью консоли куста.Я хочу получить результат последнего запроса.
'spark.catalog.'и "spark.conf."используются для печати свойств пути хранилища и настроек базы данных.
spark.catalog.listDatabases().show(false)
дает мне:
- имя: по умолчанию
- описание: база данных Hive по умолчанию
- locationUri: hdfs: // localhost: 9000/ пользователь / улей / склад
spark.catalog.listTables.show(false)
дает мне пустой результат.Так что на этом шаге что-то не так.
В конце выполнения задания я получил следующую ошибку:
> Exception in thread "main" org.apache.spark.sql.catalyst.analysis.NoSuchDatabaseException: Database 'test' not found;
Я также настроил файл hive-site.xmlдля хранилища Hive:
<property>
<name>hive.metastore.warehouse.dir</name>
<value>hdfs://localhost:9000/user/hive/warehouse</value>
</property>
Я уже создал тестовую базу данных с помощью консоли Hive.
Ниже приведены версии моих компонентов:
- Spark: 2.2.0
- Улей: 1.1.0
- Hadoop: 2.7.3
Есть идеи?