Spark SQL无法访问Spark Thrift服务器

时间:2019-01-14 19:41:51

标签: apache-spark hive pyspark spark-thriftserver

我无法配置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的?我没有集群,只能在本地进行所有操作。

1 个答案:

答案 0 :(得分:0)

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

有关详细信息,您可以按照Use MySQL for the Hive Metastore上的配置指南进行操作。