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에서 HiveContext는 Livy를 사용할 때 기본적으로 활성화되지 않습니다. 이 오류를 해결하려면 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 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시 날짜: 2019년 2월 12일