Apache spark 如何修复pyspark EMR笔记本上的错误-AnalysisException:无法实例化org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

Apache spark 如何修复pyspark EMR笔记本上的错误-AnalysisException:无法实例化org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient,apache-spark,hadoop,pyspark,amazon-emr,hive-metastore,Apache Spark,Hadoop,Pyspark,Amazon Emr,Hive Metastore,我正在尝试使用spark.SQL()或sqlContext.SQL()方法(这里spark是启动EMR Notebook时可用的SparkSession对象的变量)在公共数据集上运行SQL查询,使用EMR Notebook连接到安装了Hadoop、spark和Livy的EMR集群。 但在运行任何基本SQL查询时,我都会遇到错误: AnalysisException: u'java.lang.RuntimeException: java.lang.RuntimeException: Unable

我正在尝试使用spark.SQL()或sqlContext.SQL()方法(这里spark是启动EMR Notebook时可用的SparkSession对象的变量)在公共数据集上运行SQL查询,使用EMR Notebook连接到安装了Hadoop、spark和Livy的EMR集群。 但在运行任何基本SQL查询时,我都会遇到错误:

AnalysisException: u'java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;
u'java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;'
Traceback (most recent call last):
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/context.py", line 358, in sql
    return self.sparkSession.sql(sqlQuery)
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/session.py", line 767, in sql
    return DataFrame(self._jsparkSession.sql(sqlQuery), self._wrapped)
  File "/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
    answer, self.gateway_client, self.target_id, self.name)
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 69, in deco
    raise AnalysisException(s.split(': ', 1)[1], stackTrace)
AnalysisException: u'java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;'
我想使用SQL查询,所以我不想使用DataFrameAPI作为替代

这个spark EMR集群没有安装单独的Hive组件,我不打算使用它。 我试图寻找这个问题的各种原因,其中一个原因可能是EMR笔记本可能没有创建metastore_db的写入权限。然而,我无法证实这一点。 我试图在群集中的日志文件中找到此错误,但找不到,并且不确定哪个文件可能包含此错误,以便获得更多详细信息

重现问题的步骤:

  • 使用控制台创建AWS EMR群集,并使用快速启动视图,选择spark选项。它将包括Hadoop 2.8.5纱线上的Spark 2.4.3、Ganglia 3.7.2和齐柏林飞艇0.8.1。它可以只包含1个主节点和2个核心节点,甚至可以单独包含1个主节点

  • 从EMR页面中的“笔记本”链接创建一个EMR笔记本,将其连接到刚创建的集群并打开它(默认情况下,所选内核将是pyspark,如笔记本右上角所示)

  • 我使用的代码在amazon reviews数据集上运行spark.sql查询,该数据集是公共的
  • 代码:
  • 我希望从该数据集中返回5个产品标识,但我得到错误:

    AnalysisException: u'java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;
    
    u'java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;'
    Traceback (most recent call last):
      File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/context.py", line 358, in sql
        return self.sparkSession.sql(sqlQuery)
      File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/session.py", line 767, in sql
        return DataFrame(self._jsparkSession.sql(sqlQuery), self._wrapped)
      File "/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
        answer, self.gateway_client, self.target_id, self.name)
      File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 69, in deco
        raise AnalysisException(s.split(': ', 1)[1], stackTrace)
    AnalysisException: u'java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;'
    

    我也有同样的问题,我意识到我的EMR集群上没有蜂巢


    启动另一个群集并确保选择了配置单元后,该群集工作。

    笔记本电脑应在具有兼容配置单元版本的EMR群集上运行

    如何在emr上使用spark启动hive?@kmkhan在创建集群时,只需在控制台上选择hive即可。或者,如果使用aws cli,请将Name=Hive添加到应用程序列表中。