Spark SQL Hive Datanucleus jar Classpath



我有一个应用程序,一个基于Netty的REST服务器,它嵌入了spark sql和hivecontext来进行分析查询。当运行服务时,一切都在IntelliJ上运行良好。但是我做了一个超级罐子,里面装了所有的东西。并且不能让它运行,因为Hive不能实例化它的MetaStoreclient。经过挖掘,hive似乎无法解决datanucus的依赖关系。我运行我的应用程序

java -jar app.jar

我已经尝试添加Datanucleus jar与java -cp…运气不好。Spark文档建议使用——jars标志运行此操作,但仍然没有运气。因为我想我没有在这里使用spark-submit。

任何帮助都是非常感激的。谢谢。

编辑:为了回答下面的问题,是的,我现在以master = local[*]在本地模式下启动Spark。在$SPARK_HOME/conf/中有一个hive-site.xml文件。当在IntelliJ中运行时,它工作得很好,hive在项目目录上创建了一个本地metastore,并将其日志输出到derby.log。这个问题似乎发生在启动web服务器在一个阴暗的罐子,其中SparkContext和HiveContext实例化。

所以我设法解决了这个问题。由于我使用的是maven shade插件,所以我需要将datanucleus jar添加到类路径

中。
  <transformer  implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    <manifestEntries>
      <Main-Class>com.sparkserver.SparkServer</Main-Class>
      <Class-Path>..libs/mysql-connector-java-5.1.36.jar ../libs/datanucleus-core-3.2.10.jar ../libs/datanucleus-api-jdo-3.2.6.jar ../libs/datanucleus-rdbms-3.2.9.jar ../libs/bonecp-0.8.0.RELEASE.jar
     </Class-Path>
    </manifestEntries>
  </transformer>

因为使用-jar会擦除通常的类路径,所以我在$SPARK_HOME/libs中添加了这些行和匹配的版本,并且工作得很好。

最新更新