使用Spark SQL访问Hive表

时间:2019-05-02 20:05:06

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

我已经设置了一个AWS EMR集群,其中包括spark 2.3.2,hive 2.3.3和hbase 1.4.7。如何配置spark访问配置单元表?

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

  

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. 在齐柏林飞艇中,我创建了一个激发会话:

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

1 个答案:

答案 0 :(得分:0)

您提到的步骤(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