我通过以下方式启动了第一个配置为连接到远程 Hive Metastore DB 的 spark 应用程序:
.set("hive.metastore.uris", "thrift://localhost:9083")
.set("spark.sql.hive.thriftServer.singleSession", "true")
这是源代码:
val df = sparkSession.readStream
.format("json")
.load("gs://path/location/to/data/")
df.writeStream.queryName("dictionary")
.format("memory")
.start()
似乎将数据加载到同一元存储数据库实例中的“global_temp”数据库中,如日志中所示:
tail -f /var/log/hive/hive-metastore.out
2019-02-04T14:16:51,628 INFO [pool-11-thread-78] org.apache.hadoop.hive.metastore.HiveMetaStore - 76: source:10.132.0.67 get_functions: db=default pat=*
2019-02-04T14:16:51,677 INFO [pool-11-thread-78] org.apache.hadoop.hive.metastore.HiveMetaStore - 76: source:10.132.0.67 get_database: default
2019-02-04T14:16:51,682 INFO [pool-11-thread-78] org.apache.hadoop.hive.metastore.HiveMetaStore - 76: source:10.132.0.67 get_database: global_temp
但是,当我通过直线连接到 Metastore 数据库时,我从未看到字典表或 global_temp 数据库。怎么可能?
我尝试将默认数据库值更新为“字典”数据库,并在运行作业之前创建它,我收到以下错误消息:
线程 "main" org.apache.spark.SparkException 中的异常:字典是系统保留的数据库,请重命名现有数据库以解决名称冲突,或为 spark.sql.globalTempDatabase 设置不同的值,然后再次启动您的 Spark 应用程序.
知道为什么表“字典”从未出现在元存储数据库上吗?