【问题标题】:Spark build in hive MySQL metastore isn't being used未使用 Hive MySQL 元存储中的 Spark 构建
【发布时间】:2020-08-13 05:08:24
【问题描述】:

我使用的是 Apache Spark 2.1.1,我已将以下 hive-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 服务器时,metastore 架构在我的 MySQL 数据库上创建但未使用,而是使用 Derby。

在 thrift 服务器日志文件中找不到任何错误,唯一引起我注意的是它首先尝试使用 MySQL (INFO MetaStoreDirectSql: Using direct SQL, underlying DB is MYSQL),但随后没有任何错误地使用 Derby (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

【问题讨论】:

  • 在 hive 和 spark conf 中的 hive-site.xml 中将 hive.metastore.schema.verification 的值设置为 false 并重新启动服务并重试
  • 我已经设置了它并且行为相同。当您说在 hive 和 spark 中时,您的意思是在 $SPARK_HOME/conf/hive-site.xml$SPARK_HOME/conf/spark-defaults.conf?请记住,我没有安装 Hive,我使用的是 Hive 中内置的 Spark。

标签: mysql apache-spark hive metastore spark-thriftserver


【解决方案1】:

正如 hive-site.xml 中显示的那样,您尚未设置要连接的元存储服务。所以 spark 将使用默认的本地元存储服务和 derby DB 后端
我要使用以 MySQL DB 作为后端的 Metastore 服务,您必须:

  1. 启动元存储服务。您可以在这里查看如何启动服务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 服务器

【讨论】:

  • 但是我没有安装 hive,我只有 Apache Spark。因此,如果我启动位于 $SPARK_HOME/sbin 文件夹中的 thrift 服务器,它将使用 $SPARK_HOME/conf 上唯一可用的 hive-site.xml。还是有什么我还是不明白?
  • 不幸的是,我不知道不使用 hive 启动 Metastore 服务的另一种方法。你的理解很好,但想法是 spark thrift 服务器是建立在 hive 服务器上的,使用 metastore 服务,它在 hive/spark 服务器和后端数据库之间起到中介作用
  • 要使用hive启动一个metastore,你只需要下载一个hive版本解压然后把你的hive-site.xml放到hive的配置中,然后启动它的metastore服务器。无需额外配置。
  • 我找到了解决问题的方法,正如你正确地建议我安装了 hive 以使用 metastore 服务,问题是我已经安装了 Hive 2.1 并且我正在阅读一些关于 spark 和spark 是用 Hive 1.2 构建的,所以我已经安装了那个,然后它就可以工作了。不知何故,当我启动节俭服务器时,它仍然记录Using direct SQL, underlying DB is DERBY,但它也连接到配置单元元存储 URI。我已经添加了我没有使用 Hive 的问题,所以请添加到您的答案中,我应该安装 Hive 1.2 版本,我会接受它。非常感谢。
猜你喜欢
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 2019-03-31
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 2017-07-07
相关资源
最近更新 更多