未使用配置单元 MySQL 元存储中的 Spark 构建

Spark build in hive MySQL metastore isn't being used

我正在使用 Apache Spark 2.1.1,我已将以下配置单元-site.xml 放在 $SPARK_HOME/conf 文件夹中:

<?xml version="1.0"?>
<configuration>
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://mysql_server:3306/hive_metastore?createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
  <description>username to use against metastore database</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>password</value>
  <description>password to use against metastore database</description>
</property>
<property>
  <name>hive.metastore.schema.verification</name>
  <value>false</value>
  <description>password to use against metastore database</description>
</property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>${test.tmp.dir}/hadoop-tmp</value>
  <description>A base for other temporary directories.</description>
</property>
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>hdfs://hadoop_namenode:9000/value_iq/hive_warehouse/</value>
  <description>Warehouse Location</description>
</property>
</configuration>

当我启动 thrift 服务器时,在我的 MySQL 数据库上创建了 Metastore 模式但未使用,而是使用 Derby。

在 thrift 服务器日志文件中找不到任何错误,唯一引起我注意的是它首先尝试使用 MySQL (INFO MetaStoreDirectSql: Using direct SQL, underlying DB is MYSQL),但随后没有任何错误使用而是德比 (INFO MetaStoreDirectSql: Using direct SQL, underlying DB is DERBY)。这是 thrift 服务器日志 https://www.dropbox.com/s/rxfwgjm9bdccaju/spark-root-org.apache.spark.sql.hive.thriftserver.HiveThriftServer2-1-s-master.value-iq.com.out?dl=0

我的系统上没有安装 Hive,我只是假装使用 Apache Spark 内置的 Hive。

我正在使用位于 $SPARK_HOME/jars 文件夹中的 mysql-connector-java-5.1.23-bin.jar

因为它出现在配置单元中-site.xml 您还没有设置要连接的 Metastore 服务。所以 spark 将使用默认的本地 Metastore 服务和 derby DB 后端
我要使用以 MySQL 数据库作为后端的 Metastore 服务,您必须:

  1. 启动 Metastore 服务。你可以在这里看看如何启动服务 hive metastore admin manual。您使用相同的 hive-site.xml 在 MySQL DB 的后端启动您的 Metastore 服务,并添加以下行以在端口 XXXX 上的 METASTORESERVER 上启动 Metastore 服务:

    <property>
      <name>hive.metastore.uris</name>
      <value>thrift://METASTRESERVER:XXXX</value>
    </property>
    
  2. 让spark知道metastore服务从哪里开始。这可以使用您在启动 Metastore 服务时使用的相同 hive-site.xml 来完成(添加上面的行)将此文件复制到 Spark 的配置路径中,然后重新启动您的 spark thrift server