0

我正在为 hive 使用远程 mysql 元存储。当我运行 hive 客户端时,它运行完美。但是当我尝试通过 spark-shell 或 spark-submit 使用 spark-sql 时,我无法连接到 hive。并出现以下错误:

    Caused by: javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.derby.jdbc.EmbeddedDriver

当我使用 mysql 数据库进行元存储时,我不明白为什么 spark 尝试连接 derby 数据库。

我正在使用 apache spark 1.3 版和 cloudera 版 CDH 5.4.8

4

1 回答 1

0

似乎 spark 正在使用默认配置单元设置,请按照下列步骤操作:

  • 将 hive-site.xml 的软链接复制或创建到您的 SPARK_HOME/conf 文件夹。
  • 将配置单元库路径添加到 SPARK_HOME/conf/spark-env.sh 中的类路径
  • 重启 Spark 集群以使一切生效。

我相信你的 hive-site.xml 有 MYSQL 元存储的位置?如果没有,请按照以下步骤重新启动 spark-shell:

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://MYSQL_HOST:3306/hive_{version}</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>XXXXXXXX</value>
    <description>Username to use against metastore database/description>
</property> 
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>XXXXXXXX</value>
    <description>Password to use against metastore database/description>
</property>
于 2016-06-30T15:22:18.877 回答