我无法配置Spark SQL,以便我可以访问Spark Thrift Server中的Hive表(不使用JDBC,但直接来自Spark)
我将单个配置文件conf/hive-site.xml
用于Spark Thrift Server和Spark SQL。我将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服务器,并且可以观察到metastore_db
目录正在创建嵌入式Derby数据库。我可以与beeline
连接,创建一个表,并查看spark-warehouse
目录和该表的子目录一起创建。所以在这个阶段就可以了。
我启动启用了Hive支持./bin/pyspark --conf spark.sql.catalogImplementation=hive
的pyspark shell,并尝试使用以下命令访问Hive表:
from pyspark.sql import HiveContext
hc = HiveContext(sc)
hc.sql('show tables')
我遇到如下错误:
错误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的?我没有集群,只能在本地进行所有操作。
答案 0 :(得分:0)
嵌入式Derby Metastore数据库可以在本地使用,但是对于生产环境,建议使用任何其他Metastore数据库。
是的,您绝对可以将MYSQL用作元存储。为此,您必须在hive-site.xml
中进行输入。
有关详细信息,您可以按照Use MySQL for the Hive Metastore上的配置指南进行操作。