【问题标题】:Spark SQL cannot access Spark Thrift ServerSpark SQL 无法访问 Spark Thrift 服务器
【发布时间】:2019-06-08 19:56:04
【问题描述】:

我无法配置 Spark SQL,以便我可以访问 Spark Thrift Server 中的 Hive 表(不使用 JDBC,但本地来自 Spark)

我对 Spark Thrift Server 和 Spark SQL 都使用单个配置文件 conf/hive-site.xml。我将javax.jdo.option.ConnectionURL 属性设置为jdbc:derby:;databaseName=/home/user/spark-2.4.0-bin-hadoop2.7/metastore_db;create=true。我还将spark.sql.warehouse.dir 属性设置为指向spark-warehouse 目录的绝对路径。我用./start-thriftserver.sh 运行Thrift 服务器,我可以观察到嵌入式Derby 数据库是用metastore_db 目录创建的。我可以与beeline 连接,创建一个表并查看使用表的子目录创建的spark-warehouse 目录。所以现阶段还好。

我启动启用了 Hive 支持的 pyspark shell ./bin/pyspark --conf spark.sql.catalogImplementation=hive,并尝试使用以下命令访问 Hive 表:

from pyspark.sql import HiveContext
hc = HiveContext(sc)
hc.sql('show tables')

我收到如下错误:

ERROR XJ040: 启动数据库失败 '/home/user/spark-2.4.0-bin-hadoop2.7/metastore_db' 与类加载器 sun.misc.Launcher$AppClassLoader@1b4fb997

错误 XSDB6:另一个 Derby 实例可能已经启动了 数据库 /home/user/spark-2.4.0-bin-hadoop2.7/metastore_db

pyspark.sql.utils.AnalysisException: u'java.lang.RuntimeException: java.lang.RuntimeException:无法实例化 org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;

显然 Spark 正在尝试创建新的 Derby 数据库,而不是使用我放在配置文件中的 Metastore。如果我停止 Thrift Server 并只运行 spark,一切都很好。我该如何解决?

嵌入式 Derby Metastore 数据库是否可以让 Thrift Server 和 Spark 访问一个 Hive,或者我需要使用例如MySQL?我没有集群,一切都在本地完成。

【问题讨论】:

    标签: apache-spark hive pyspark spark-thriftserver


    【解决方案1】:

    Embedded Derby Metastore Database 可以在本地使用,但对于生产环境,建议使用任何其他 Metastore 数据库。 是的,您绝对可以使用 MYSQL 作为元存储。为此,您必须在hive-site.xml 中输入一个条目。

    您可以按照Use MySQL for the Hive Metastore 的配置指南了解详细信息。

    【讨论】:

    • 为什么嵌入式德比在生产中不好?谁反对它?谢谢。
    猜你喜欢
    • 2015-10-27
    • 1970-01-01
    • 2018-01-18
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2015-01-22
    • 1970-01-01
    相关资源
    最近更新 更多