我正在尝试使用附加到 EMR 的 EMR 笔记本在公共数据集上使用 Spark.sql() 或 sqlContext.sql() 方法(此处 Spark 是我们启动 EMR Notebook 时可用的 SparkSession 对象的变量)运行 SQL 查询安装了 Hadoop、Spark 和 Livy 的集群。但在运行任何基本 SQL 查询时我遇到错误:
AnalysisException: u'java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;
Run Code Online (Sandbox Code Playgroud)
我想使用 SQL 查询,所以我不想使用 Dataframe API 作为替代方案。
这个 Spark EMR 集群没有安装单独的 Hive 组件,我不打算使用它。我尝试寻找此问题的各种原因,其中一个原因可能是 EMR 笔记本可能没有创建 Metastore_db 的写入权限。不过,我无法证实这一点。我尝试在集群中的日志文件中查找此错误,但找不到它,并且不确定哪个文件可能包含此错误以便获取更多详细信息。
重现问题的步骤:
使用控制台创建 AWS EMR 集群并使用快速启动视图,选择 Spark 选项。它将包括 Hadoop 2.8.5 YARN 上的 Spark 2.4.3、Ganglia 3.7.2 和 Zeppelin 0.8.1。它可以只有 1 个主节点和 2 个核心节点,甚至可以有 1 个主节点。
从 EMR 页面中的笔记本链接创建一个 EMR 笔记本,将其附加到您刚刚创建的集群并打开它(默认情况下,选择的内核将为 pyspark,如笔记本右上角所示)。