我正在尝试使用附加到 EMR 的 EMR 笔记本在公共(public)数据集上使用 spark.sql() 或 sqlContext.sql() 方法运行 SQL 查询(这里 spark 是我们启动 EMR Notebook 时可用的 SparkSession 对象的变量)安装了 Hadoop、Spark 和 Livy 的集群。
但是在运行任何基本的 SQL 查询时,我都会遇到错误:
AnalysisException: u'java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;
我想使用 SQL 查询,所以我不想使用 Dataframe API 作为替代方案。
这个 spark EMR 集群没有安装单独的 Hive 组件,我不打算使用它。
我已尝试寻找导致此问题的各种原因,其中一个原因可能是 EMR 笔记本可能没有创建 metastore_db 的写入权限。但是,我无法证实这一点。
我试图在集群的日志文件中找到此错误,但找不到它,并且不确定哪个文件可能包含此错误,以便获取更多详细信息。
重现问题的步骤:
# Importing data from s3
input_bucket = 's3://amazon-reviews-pds'
input_path = '/parquet/product_category=Books/*.parquet'
df = spark.read.parquet(input_bucket + input_path)
# Register temporary view
df.createOrReplaceTempView("reviews")
sqlDF = sqlContext.sql("""SELECT product_id FROM reviews LIMIT 5""")
我希望从这个数据集中返回 5 个 product_id 但是我得到了错误:
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 集群上没有 Hive。
在启动另一个集群并确保选择了 Hive 后,它就可以工作了。
关于apache-spark - 如何修复 pyspark EMR Notebook 上的错误 - AnalysisException : Unable to instantiate org. apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57780222/