蜂巢中的Spark构建没有使用MySQL Metastore

Jos*_*osé 8 mysql hive metastore apache-spark spark-thriftserver

我正在使用Apache Spark 2.1.1,我在$SPARK_HOME/conf文件夹中放了以下hive-site.xml :

<?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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

use*_*742 4

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

  1. 启动元存储服务。您可以在这里查看如何启动服务hive Metastore 管理手册。您使用相同的 hive-site.xml 在 MySQL DB 后端启动 Metastore 服务,并添加以下行以在端口 XXXX 上的 METASTORESERVER 上启动 Metastore 服务:

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

  • 我已经找到解决问题的方法,正如您正确建议的那样,我已经安装了 hive 来使用元存储服务,问题是我已经安装了 Hive 2.1 并且我正在阅读一些有关 Spark 的文档,并且 Spark 是使用 Hive 1.2 构建的,所以我已经安装了那个然后它就可以工作了。不知何故,当我启动 thrift 服务器时,它仍然记录“使用直接 SQL,底层数据库是 DERBY”,但它也连接到 hive 元存储 URI。我在问题中添加了我没有使用 Hive,所以请在您的答案中添加我应该安装 Hive 1.2 版本,我会接受它。多谢。 (2认同)