【问题标题】:Accessing Hive Tables with Spark SQL使用 Spark SQL 访问 Hive 表
【发布时间】:2019-09-21 09:24:08
【问题描述】:

我设置了一个包含 spark 2.3.2、hive 2.3.3 和 hbase 1.4.7 的 AWS EMR 集群。如何配置 spark 以访问 hive 表?

我已经采取了以下步骤,但结果是错误消息:

java.lang.ClassNotFoundException: java.lang.NoClassDefFoundError: 创建 Hive 客户端时的 org/apache/tez/dag/api/SessionNotRunning 使用类路径:

请确保您的 hive 和 hadoop 版本的 jar 是 包含在传递给 spark.sql.hive.metastore.jars 的路径中

步骤:

  1. cp /usr/lib/hive/conf/hive-site.xml /usr/lib/spark/conf

  2. /usr/lib/spark/conf/spark-defaults.conf 中添加:

    spark.sql.hive.metastore.jars /usr/lib/hadoop/lib/*:/usr/lib/hive/lib/*

  3. 在 zeppelin 中,我创建了一个 spark 会话:

    val spark = SparkSession.builder.appName("clue").enableHiveSupport().getOrCreate() 导入 spark.implicits._

【问题讨论】:

    标签: apache-spark hive apache-spark-sql amazon-emr


    【解决方案1】:

    您提到的步骤 (1, & 2) 部分没问题,除了一些可能对您有帮助的小调整。

    由于您使用的是hive-2.x,因此请配置spark.sql.hive.metastore.jars 并将其设置为mavenspark.sql.hive.metastore.version 以匹配您的元存储2.3.3 的版本。只需使用2.3 作为版本就足够了,请参阅Apache Spark Code 中的原因

    这是我在spark-default.conf 中设置的工作配置示例:

    spark.sql.broadcastTimeout  600 # An arbitrary number that you can change
    spark.sql.catalogImplementation hive
    spark.sql.hive.metastore.jars   maven
    spark.sql.hive.metastore.version    2.3  # No need for minor version
    spark.sql.hive.thriftServer.singleSession   true
    spark.sql.warehouse.dir {hdfs | s3 | etc}
    hive.metastore.uris thrift://hive-host:9083
    

    通过之前的设置,我已经能够对 Zeppelin 中的数据仓库执行如下查询:

    val rows = spark.sql("YOUR QUERY").show
    

    有关连接到外部配置单元元存储的更多详细信息,请参见此处 (Databricks)

    【讨论】:

    • 除了在 HDFS/S3/etc 中创建目录位置之外,spark.sql.warehouse.dir 是否需要任何其他设置?另外,在您发帖之前,我在hive-site.xml 复制到spark/conf 中将执行引擎更改为mr,但现在遇到错误:java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/mapreduce/TableInputFormatBase。你遇到过这样的jar依赖问题吗?谢谢。
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    相关资源
    最近更新 更多