View a markdown version of this page

오픈 테이블 형식 지원 - Amazon EMR

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

오픈 테이블 형식 지원

Amazon EMR 릴리스 6.15.0 이상에는 Spark SQL AWS Lake Formation 을 사용하여 데이터를 읽고 쓸 때 Hive 테이블, Apache Iceberg, Apache Hudi 및 Delta Lake를 사용하여를 기반으로 하는 세분화된 액세스 제어에 대한 지원이 포함되어 있습니다. Amazon EMR은 Apache Hudi를 통해 테이블, 행, 열 및 셀 수준 액세스 제어를 지원합니다. Amazon EMR 릴리스 6.15.0 이상부터 AWS Lake Formation을 기반으로 행, 열 또는 셀 수준에서 세분화된 액세스 제어에 대한 지원이 포함됩니다. EMR 7.12부터 Lake Formation 벤딩 자격 증명을 사용하여 Apache Hive, Apache Iceberg 및 Delta Lake 테이블에 대해 테이블 데이터를 수정하는 DML 및 DDL 작업이 지원됩니다.

이 섹션의 주제에서는 세분화된 액세스 제어를 통해 EMR Spark 작업 또는 대화형 세션에서 열린 테이블 형식으로 Lake Formation에 등록된 테이블에 액세스하는 방법을 다룹니다.

권한 요구 사항

에 등록되지 않은 테이블 AWS Lake Formation

에 등록되지 않은 테이블 AWS Lake Formation의 경우 작업 런타임 역할은 AWS Glue 데이터 카탈로그와 Amazon S3의 기본 테이블 데이터에 모두 액세스합니다. 이를 위해서는 작업 런타임 역할에 AWS Glue 및 Amazon S3 작업 모두에 대한 적절한 IAM 권한이 있어야 합니다.

에 등록된 테이블 AWS Lake Formation

에 등록된 테이블 AWS Lake Formation의 경우 작업 런타임 역할은 AWS Glue 데이터 카탈로그 메타데이터에 액세스하고 Lake Formation에서 제공하는 임시 자격 증명은 Amazon S3의 기본 테이블 데이터에 액세스합니다. 작업을 실행하는 데 필요한 Lake Formation 권한은 Spark 작업이 시작하는 AWS Glue 데이터 카탈로그 및 Amazon S3 API 호출에 따라 달라지며 다음과 같이 요약할 수 있습니다.

  • DESCRIBE 권한을 사용하면 런타임 역할이 데이터 카탈로그에서 테이블 또는 데이터베이스 메타데이터를 읽을 수 있습니다.

  • ALTER 권한은 런타임 역할이 데이터 카탈로그의 테이블 또는 데이터베이스 메타데이터를 수정할 수 있도록 허용합니다.

  • DROP 권한을 사용하면 런타임 역할이 데이터 카탈로그에서 테이블 또는 데이터베이스 메타데이터를 삭제할 수 있습니다.

  • SELECT 권한은 런타임 역할이 Amazon S3에서 테이블 데이터를 읽을 수 있도록 허용합니다.

  • INSERT 권한은 런타임 역할이 Amazon S3에 테이블 데이터를 쓸 수 있도록 허용합니다.

  • DELETE 권한은 런타임 역할이 Amazon S3에서 테이블 데이터를 삭제할 수 있도록 허용합니다.

    참고

    Lake Formation은 Spark 작업이 AWS Glue를 호출하여 테이블 메타데이터를 검색하고 Amazon S3를 호출하여 테이블 데이터를 검색할 때 권한을 느리게 평가합니다. 권한이 부족한 런타임 역할을 사용하는 작업은 Spark가 누락된 권한이 필요한 AWS Glue 또는 Amazon S3를 호출할 때까지 실패하지 않습니다.

참고

다음 지원되는 테이블 매트릭스에서:

  • Supported로 표시된 작업은 Lake Formation 자격 증명만 사용하여 Lake Formation에 등록된 테이블의 테이블 데이터에 액세스합니다. Lake Formation 권한이 충분하지 않으면 작업이 런타임 역할 자격 증명으로 돌아가지 않습니다. Lake Formation에 등록되지 않은 테이블의 경우 작업 런타임 역할 자격 증명이 테이블 데이터에 액세스합니다.

  • Amazon S3 위치에서 지원되는 IAM 권한으로 표시된 작업은 Lake Formation 자격 증명을 사용하여 Amazon S3의 기본 테이블 데이터에 액세스하지 않습니다. 이러한 작업을 실행하려면 테이블이 Lake Formation에 등록되어 있는지 여부에 관계없이 작업 런타임 역할에 테이블 데이터에 액세스하는 데 필요한 Amazon S3 IAM 권한이 있어야 합니다.

Hive
연산 AWS Lake Formation 권한 지원 상태
SELECT SELECT 지원됨
CREATE TABLE CREATE_TABLE 지원됨
CREATE TABLE LIKE CREATE_TABLE Amazon S3 위치에 대한 IAM 권한 지원
CREATE TABLE AS SELECT CREATE_TABLE Amazon S3 위치에 대한 IAM 권한 지원
DESCRIBE TABLE DESCRIBE 지원됨
SHOW TBLPROPERTIES DESCRIBE 지원됨
SHOW COLUMNS DESCRIBE 지원됨
SHOW PARTITIONS DESCRIBE 지원됨
SHOW CREATE TABLE DESCRIBE 지원됨
테이블 변경 tablename SELECT 및 ALTER 지원됨
테이블 tablename 세트 위치 변경 - 지원되지 않음
테이블 변경 파티션 tablename추가 SELECT, INSERT 및 ALTER 지원됨
REPAIR TABLE SELECT 및 ALTER 지원됨
데이터 로드 지원되지 않음
INSERT INSERT 및 ALTER 지원됨
INSERT OVERWRITE SELECT, INSERT, DELETE 및 ALTER 지원됨
DROP TABLE SELECT, DROP, DELETE 및 ALTER 지원됨
TRUNCATE TABLE SELECT, INSERT, DELETE 및 ALTER 지원됨
데이터프레임 라이터 V1 해당 SQL 작업과 동일

기존 테이블에 데이터를 추가할 때 지원됩니다. 자세한 내용은 고려 사항 및 제한 사항을 참조하세요.

Dataframe Writer V2 해당 SQL 작업과 동일

기존 테이블에 데이터를 추가할 때 지원됩니다. 자세한 내용은 고려 사항 및 제한 사항을 참조하세요.

Iceberg
연산 AWS Lake Formation 권한 지원 상태
SELECT SELECT 지원됨
CREATE TABLE CREATE_TABLE 지원됨
CREATE TABLE LIKE CREATE_TABLE Amazon S3 위치에 대한 IAM 권한 지원
CREATE TABLE AS SELECT CREATE_TABLE Amazon S3 위치에 대한 IAM 권한 지원
테이블을 선택으로 바꾸기 SELECT, INSERT 및 ALTER 지원됨
DESCRIBE TABLE DESCRIBE Amazon S3 위치에 대한 IAM 권한 지원
SHOW TBLPROPERTIES DESCRIBE Amazon S3 위치에 대한 IAM 권한 지원
SHOW CREATE TABLE DESCRIBE Amazon S3 위치에 대한 IAM 권한 지원
ALTER TABLE SELECT, INSERT 및 ALTER 지원됨
ALTER TABLE SET LOCATION SELECT, INSERT 및 ALTER Amazon S3 위치에 대한 IAM 권한 지원
에서 정렬한 테이블 쓰기 변경 SELECT, INSERT 및 ALTER Amazon S3 위치에 대한 IAM 권한 지원
에서 배포한 테이블 쓰기 변경 SELECT, INSERT 및 ALTER Amazon S3 위치에 대한 IAM 권한 지원
테이블 이름 변경 테이블 CREATE_TABLE 및 DROP 지원됨
INSERT INTO SELECT, INSERT 및 ALTER 지원됨
INSERT OVERWRITE SELECT, INSERT 및 ALTER 지원됨
DELETE SELECT, INSERT 및 ALTER 지원됨
UPDATE SELECT, INSERT 및 ALTER 지원됨
MERGE INTO SELECT, INSERT 및 ALTER 지원됨
DROP TABLE SELECT, DELETE 및 DROP 지원됨
DataFrame Writer V1 - 지원되지 않음
DataFrame Writer V2 해당 SQL 작업과 동일

기존 테이블에 데이터를 추가할 때 지원됩니다. 자세한 내용은 고려 사항 및 제한 사항을 참조하세요.

메타데이터 테이블 SELECT 지원 특정 테이블은 숨겨집니다. 자세한 내용은 고려 사항 및 제한 사항을 참조하세요.
저장 프로시저 - 다음 조건을 충족하는 테이블에 지원됩니다.
  • 에 등록되지 않은 테이블 AWS Lake Formation

  • register_table 및를 사용하지 않는 테이블 migrate

    자세한 내용은 고려 사항 및 제한 사항을 참조하세요.

Iceberg의 Spark 구성: Iceberg 형식을 사용하려면 다음 구성을 설정합니다. DB_LOCATION을 Iceberg 테이블이 있는 Amazon S3 경로로 바꾸고 리전 및 계정 ID 자리 표시자를 자체 값으로 바꾸세요.

spark-sql \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog --conf spark.sql.catalog.spark_catalog.warehouse=s3://DB_LOCATION --conf spark.sql.catalog.spark_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog --conf spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO --conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.glue.id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.client.region=AWS_REGION

이전 EMR 버전에서 Iceberg 형식을 사용하려면 다음 명령을 대신 사용하세요.

spark-sql \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension --conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.spark_catalog.warehouse=s3://DB_LOCATION --conf spark.sql.catalog.spark_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog --conf spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO --conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.glue.id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.client.assume-role.region=AWS_REGION --conf spark.sql.catalog.spark_catalog.lf.managed=true

:

다음은 Iceberg 테이블 작업의 몇 가지 예입니다.

-- Create an Iceberg table CREATE TABLE my_iceberg_table ( id BIGINT, name STRING, created_at TIMESTAMP ) USING ICEBERG; -- Insert data INSERT INTO my_iceberg_table VALUES (1, 'Alice', current_timestamp()); -- Query the table SELECT * FROM my_iceberg_table;
Hudi
연산 AWS Lake Formation 권한 지원 상태
SELECT SELECT 지원됨
CREATE TABLE CREATE_TABLE Amazon S3 위치에 대한 IAM 권한 지원
CREATE TABLE LIKE CREATE_TABLE Amazon S3 위치에 대한 IAM 권한 지원
CREATE TABLE AS SELECT - 지원되지 않음
DESCRIBE TABLE DESCRIBE Amazon S3 위치에 대한 IAM 권한 지원
SHOW TBLPROPERTIES DESCRIBE Amazon S3 위치에 대한 IAM 권한 지원
SHOW COLUMNS DESCRIBE Amazon S3 위치에 대한 IAM 권한 지원
SHOW CREATE TABLE DESCRIBE Amazon S3 위치에 대한 IAM 권한 지원
ALTER TABLE SELECT Amazon S3 위치에 대한 IAM 권한 지원
INSERT INTO SELECT 및 ALTER Amazon S3 위치에 대한 IAM 권한 지원
INSERT OVERWRITE SELECT 및 ALTER Amazon S3 위치에 대한 IAM 권한 지원
DELETE - 지원되지 않음
UPDATE - 지원되지 않음
MERGE INTO - 지원되지 않음
DROP TABLE SELECT 및 DROP Amazon S3 위치에 대한 IAM 권한 지원
DataFrame Writer V1 - 지원되지 않음
DataFrame Writer V2 해당 SQL 작업과 동일 Amazon S3 위치에 대한 IAM 권한 지원
메타데이터 테이블 - 지원되지 않음
테이블 유지 관리 및 유틸리티 기능 - 지원되지 않음

Hudi에 대한 Spark 구성:

EMR 7.10 이상 버전에서 Spark 쉘을 시작하려면 다음 명령을 사용합니다.

spark-sql --jars /usr/lib/hudi/hudi-spark-bundle.jar \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \ --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension

이전 EMR 버전에서 Spark 쉘을 시작하려면 대신 아래 명령을 사용합니다.

spark-sql --jars /usr/lib/hudi/hudi-spark-bundle.jar \ --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \ --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \ --conf spark.sql.catalog.spark_catalog.lf.managed=true

:

다음은 Hudi 테이블 작업의 몇 가지 예입니다.

-- Create a Hudi table CREATE TABLE my_hudi_table ( id BIGINT, name STRING, created_at TIMESTAMP ) USING HUDI TBLPROPERTIES ( 'type' = 'cow', 'primaryKey' = 'id' ); -- Insert data INSERT INTO my_hudi_table VALUES (1, 'Alice', current_timestamp()); -- Query the latest snapshot SELECT * FROM my_hudi_table;

copy-on-write 테이블의 최신 스냅샷을 쿼리하려면:

SELECT * FROM my_hudi_cow_table
spark.read.table("my_hudi_cow_table")

압축된 최신 MOR 테이블 데이터를 쿼리하려면 _ro 접미사가 붙은 읽기 최적화 테이블을 쿼리하면 됩니다.

SELECT * FROM my_hudi_mor_table_ro
spark.read.table("my_hudi_mor_table_ro")
Delta Lake
연산 AWS Lake Formation 권한 지원 상태
SELECT SELECT 지원됨
CREATE TABLE CREATE_TABLE 지원됨
CREATE TABLE LIKE - 지원되지 않음
CREATE TABLE AS SELECT CREATE_TABLE 지원됨
테이블을 선택으로 바꾸기 SELECT, INSERT 및 ALTER 지원됨
DESCRIBE TABLE DESCRIBE Amazon S3 위치에 대한 IAM 권한 지원
SHOW TBLPROPERTIES DESCRIBE Amazon S3 위치에 대한 IAM 권한 지원
SHOW COLUMNS DESCRIBE Amazon S3 위치에 대한 IAM 권한 지원
SHOW CREATE TABLE DESCRIBE Amazon S3 위치에 대한 IAM 권한 지원
ALTER TABLE SELECT 및 INSERT 지원됨
ALTER TABLE SET LOCATION SELECT 및 INSERT Amazon S3 위치에 대한 IAM 권한 지원
로 테이블 tablename 클러스터 변경 SELECT 및 INSERT Amazon S3 위치에 대한 IAM 권한 지원
테이블 변경 제약 조건 tablename 추가 SELECT 및 INSERT Amazon S3 위치에 대한 IAM 권한 지원
테이블 tablename 삭제 제약 조건 변경 SELECT 및 INSERT Amazon S3 위치에 대한 IAM 권한 지원
INSERT INTO SELECT 및 INSERT 지원됨
INSERT OVERWRITE SELECT 및 INSERT 지원됨
DELETE SELECT 및 INSERT 지원됨
UPDATE SELECT 및 INSERT 지원됨
MERGE INTO SELECT 및 INSERT 지원됨
DROP TABLE SELECT, DELETE 및 DROP 지원됨
DataFrame Writer V1 - 지원되지 않음
DataFrame Writer V2 해당 SQL 작업과 동일

지원됨

테이블 유지 관리 및 유틸리티 기능 - 지원되지 않음

Delta Lake의 Spark 구성:

Lake Formation on EMR 7.10 이상에서 Delta Lake를 사용하려면 다음 명령을 실행합니다.

spark-sql \ --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog

Lake Formation on EMR 6.15~7.9와 함께 Delta Lake를 사용하려면 다음 명령을 실행합니다.

spark-sql \ --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \ --conf spark.sql.catalog.spark_catalog.lf.managed=true

Lake Formation에서 레코드 서버를 사용하여 Spark 카탈로그를 관리하도록 하려면 spark.sql.catalog.<managed_catalog_name>.lf.managed를 true로 설정합니다.

:

다음은 Delta Lake 테이블 작업의 몇 가지 예입니다.

-- Create a Delta Lake table CREATE TABLE my_delta_table ( id BIGINT, name STRING, created_at TIMESTAMP ) USING DELTA; -- Insert data INSERT INTO my_delta_table VALUES (1, 'Alice', current_timestamp()); -- Query the table SELECT * FROM my_delta_table; -- Update data UPDATE my_delta_table SET name = 'Alice Smith' WHERE id = 1; -- Merge data MERGE INTO my_delta_table AS target USING (SELECT 2 as id, 'Bob' as name, current_timestamp() as created_at) AS source ON target.id = source.id WHEN MATCHED THEN UPDATE SET * WHEN NOT MATCHED THEN INSERT *;

AWS Glue 데이터 카탈로그에서 Delta Lake 테이블 생성

Lake Formation을 사용하는 Amazon EMR은 7.12 이전 EMR 릴리스에서 DDL 명령 및 Delta 테이블 생성을 지원하지 않습니다. 다음 단계에 따라 AWS Glue 데이터 카탈로그에서 테이블을 생성합니다.

  1. 다음 예제 코드를 사용하여 델타 테이블을 생성합니다. S3 위치가 존재하는지 확인합니다.

    spark-sql \ --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" \ --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog" > CREATE DATABASE if not exists <DATABASE_NAME> LOCATION 's3://<S3_LOCATION>/transactionaldata/native-delta/<DATABASE_NAME>/'; > CREATE TABLE <TABLE_NAME> (x INT, y STRING, z STRING) USING delta; > INSERT INTO <TABLE_NAME> VALUES (1, 'a1', 'b1');
  2. 테이블의 세부 정보를 보려면 https://console.aws.amazon.com/glue/로 이동합니다.

  3. 왼쪽 탐색에서 Data Catalog를 확장하고 테이블을 선택한 다음, 사용자가 생성한 테이블을 선택합니다. 스키마에서 Spark로 생성한 Delta 테이블이 AWS Glue의 데이터 형식에 모든 열을 저장한다는 것을 알 array<string> 수 있습니다.

  4. Lake Formation에서 열 및 셀 수준 필터를 정의하려면 스키마에서 col 열을 제거한 다음, 테이블 스키마에 있는 열을 추가합니다. 이 예제에서는 x, y, z 열을 추가합니다.

이 기능을 사용하면 copy-on-write 테이블에서 스냅샷 쿼리를 실행하여 지정된 커밋 또는 압축 인스턴스에서 테이블의 최신 스냅샷을 쿼리할 수 있습니다. 현재 Lake Formation 지원 Amazon EMR 클러스터는 증분 쿼리 및 시간 이동 쿼리를 수행하려면 Hudi의 커밋 시간 열을 검색해야 합니다. Spark의 timestamp as of 구문과 Spark.read() 함수는 지원하지 않습니다. 올바른 구문은 select * from table where _hoodie_commit_time <= point_in_time입니다. 자세한 내용은 Point in time Time-Travel queries on Hudi table을 참조하세요.

참고

지원되지 않는 최적화로 인해 Lake Formation 클러스터의 읽기 성능이 느려질 수 있습니다. 이러한 기능에는 Hudi 메타데이터를 기반으로 하는 파일 목록 및 데이터 건너뛰기가 포함됩니다. 애플리케이션 성능을 테스트하여 요구 사항을 충족하는지 확인하는 것이 좋습니다.