我创建了一个 Amazon SageMaker 笔记本实例。然后我使用 Apache Livy 将它连接到一个 Apache Spark Amazon EMR 集群。我可以在 AWS Glue 数据目录中看到数据库和表。但在我尝试查询数据时,我收到了与以下类似的错误消息:

An error occurred while calling o647.showString. : java.lang.AssertionError: assertion failed: No plan for HiveTableRelation 'mydatabase'.'cloudfront_logs', org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe

在 Amazon EMR 发布版本 5.10.0 至 5.17.0 中,使用 Livy 时不会默认启用 HiveContext。在 Livy 中启用 HiveContext 即可消除此错误。

您可以在长期运行的集群上或启动新集群时在 Livy 中启用 HiveContext。对于长期运行的集群:

1.    使用 SSH 连接主节点。例如:

ssh -i ~/mykeypair.pem hadoop@master-public-DNS

2.    导航至 livy.conf 文件所在的目录:

cd /etc/livy/conf/

3.    备份 livy.conf 文件:

sudo cp livy.conf livy.bk

4.    在您偏爱使用的文本编辑器中打开 livy.conf 文件。例如:

sudo vim livy.conf

5.    将如下行添加到 livy.conf,然后保存文件:

livy.repl.enable-hive-context true

6.    运行以下命令以重新启动 livy-server

sudo stop livy-server
sudo start livy-server

对于新集群:

在启动新集群时使用下列配置对象启用 livy-conf 的 HiveContext:

[
  {
    "Classification": "livy-conf",
    "Properties": {
      "livy.repl.enable-hive-context": "true"
    }
  }
]

在 Amazon SageMaker 笔记本中测试 PySpark 查询功能

1.    在笔记本中创建一个 Spark 环境:

sc

2.    导入 HiveContext,然后预览表。例如:

from pyspark.sql import HiveContext
hive_context = HiveContext(sc)
cl_logs = hive_context.table("mydatabase.cloudfront_logs")
cl_logs.show()

3.    运行简单的查询以确认 java.lang.AssertionError 错误已经消除。例如:

result = hive_context.sql('SELECT * FROM mydatabase.cloudfront_logs WHERE method="GET" AND status=200 LIMIT 5')
result.show()

此页内容对您是否有帮助? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS Support 中心

发布时间:2019 年 2 月 12 日