【问题标题】:Use Spark 2.2.0 to read from Hive metastore 2.x [duplicate]使用 Spark 2.2.0 从 Hive Metastore 2.x 读取 [重复]
【发布时间】:2017-07-26 10:28:36
【问题描述】:

在 2.2.0 版本之前,Spark 无法与 Hive 2.X 通信,因此我无法使用 Hive 1 + Spark 1/2。对于我在这两个方面所读到的内容:

https://issues.apache.org/jira/browse/SPARK-18112 https://spark.apache.org/releases/spark-release-2-2-0.html

现在可以使用 Spark 2 + Hive 2,但我仍然面临一些问题。使用预编译的 Spark-without-hadoop,在访问临时配置单元表时出现以下错误:

线程“main”java.lang.IllegalArgumentException 中的异常:无法使用 Hive 支持实例化 SparkSession,因为找不到 Hive 类。 在 org.apache.spark.sql.SparkSession$Builder.enableHiveSupport(SparkSession.scala:845) 在 io.bigdatabenchmark.v2.queries.q05.LogisticRegression$.main(LogisticRegression.scala:87) 在 io.bigdatabenchmark.v2.queries.q05.LogisticRegression.main(LogisticRegression.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:755) 在 org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180) 在 org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205) 在 org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:119) 在 org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

我通常通过使用选项“-Phive -Phive-thriftserver”编译我自己的 Spark 版本来解决此问题,但默认情况下,Spark 将使用 Hive 1.2.1 绑定进行构建,如文档中所示。

所以,Spark 2.2.0 似乎解决了 Spark 2 -> Hive 2 绑定的问题,但我找不到合适的方法来编译它,以便它可以访问具有架构 2.x 的元存储。

感谢您的帮助!

【问题讨论】:

    标签: hadoop apache-spark hive metastore


    【解决方案1】:

    将以下依赖项添加到您的 maven 项目中。

    <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_2.11</artifactId>
            <version>2.2.0</version>
            <scope>provided</scope>
    </dependency>
    

    【讨论】:

    • 在常规文件夹 (/spark-2.2.0/pom.xml) 和 sql 项目中的 pom.xml 中添加新依赖项时,我无法完成编译(/spark-2.2.0/sql/hive/pom.xml)。在这两个测试中,我收到以下错误:[error] /home/alejandro/Documents/projects/spark/spark-2.2.0/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveStrategies.scala:165: type mismatch; [error] found : org.apache.spark.sql.catalyst.catalog.CatalogTable [error] required: org.apache.spark.sql.hive.MetastoreRelation
    • 我已经更新了答案中的依赖关系。让我知道这是否有帮助。
    • 这次编译成功完成,但是当尝试从 Metastore 读取时,我得到:Exception in thread "main" java.lang.IllegalArgumentException: Unable to instantiate SparkSession with Hive support because Hive classes are not found. 可能我将依赖项放在它不属于的地方。
    • 你在使用 spark-submit 吗?
    • 是的,在一堆罐子旁边。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2017-04-29
    • 2022-01-25
    • 1970-01-01
    • 2022-06-14
    • 2019-11-10
    • 2020-12-30
    相关资源
    最近更新 更多