Amazon Web Services 한국 블로그

Amazon S3 Table 기능 출시: 분석 워크로드에 최적화된 스토리지

Amazon S3 TablesAmazon Athena, Amazon EMR, Apache Spark 등의 인기 있는 쿼리 엔진을 사용하여 쉽게 쿼리할 수 있도록 Apache Iceberg 형식의 일일 구매 거래, 스트리밍 센서 데이터, 광고 노출 등 표 형식 데이터에 최적화된 스토리지를 제공합니다. 자체 관리형 테이블 스토리지와 비교하면, 완전 관리형 서비스에 핵심인 작업 효율성과 더불어 최대 3배 더 빠른 쿼리 성능과 초당 최대 10배 더 많은 트랜잭션을 기대할 수 있습니다.

수천 명의 AWS 고객이 Iceberg를 사용하여 페타바이트는 물론 엑사바이트 규모의 데이터까지 아우르는 수십억 개의 파일을 쿼리하는 가운데, Iceberg는 Parquet 파일을 관리하는 가장 인기 있는 방법이 되었습니다.

테이블 버킷, 테이블, 네임스페이스
테이블 버킷은 기존의 범용디렉토리 버킷과 함께 사용되는 세 번째 유형의 S3 버킷입니다. 테이블 버킷은 다양한 스키마를 사용하여 Iceberg 테이블을 저장할 수 있는 분석 웨어하우스라고 생각하면 됩니다. 또한 S3 테이블은 S3와 동일한 내구성, 가용성, 확장성, 성능 특성을 지니며 스토리지를 자동으로 최적화하여 쿼리 성능을 극대화하는 동시에 비용을 최소화합니다.

각 테이블 버킷은 특정 AWS 리전에 상주하며, AWS 계정 내에서 해당 리전과 관련하여 고유한 이름을 가져야 합니다. 버킷은 ARN에서 참조하며 리소스 정책도 있습니다. 마지막으로, 각 버킷은 네임스페이스를 사용하여 버킷에 속한 테이블을 논리적으로 그룹화합니다.

테이블은 테이블 버킷에 저장된 구조화된 데이터 세트입니다. 테이블 버킷과 마찬가지로 테이블도 ARN과 리소스 정책이 있으며 버킷의 네임스페이스 중 하나에 존재합니다. 테이블은 완전히 관리되며, 압축, 오래된 스냅샷 관리, 참조되지 않은 파일 제거 등 자동으로 구성 가능한 지속적인 유지 관리를 제공합니다. 각 테이블에는 스토리지 작업을 위한 S3 API 엔드포인트가 있습니다.

액세스 관리를 단순화하기 위해 액세스 정책에서 네임스페이스를 참조할 수 있습니다.

명령줄의 버킷과 테이블
이제, 버킷을 만들고 그 안에 테이블 한두 개를 넣어봅시다. AWS Command Line Interface(AWS CLI)를 사용하겠지만, AWS Management Console과 API 지원도 이용할 수 있습니다. 간결한 작업을 위해 jq를 통해 더 자세한 명령의 출력을 파이핑하여 가장 관련성이 높은 값만 보여 드리겠습니다.

첫 번째 단계는 다음과 같이 테이블 버킷을 생성하는 것입니다.

$ aws s3tables create-table-bucket --name jbarr-table-bucket-2 | jq .arn
"arn:aws:s3tables:us-east-2:123456789012:bucket/jbarr-table-bucket-2"

더 편하게 작업하도록 테이블 버킷의 ARN을 사용하여 다음과 같이 환경 변수를 만듭니다.

$ export ARN="arn:aws:s3tables:us-east-2:123456789012:bucket/jbarr-table-bucket-2"

이어서 다음과 같이 테이블 버킷을 나열합니다.

$ aws s3tables list-table-buckets | jq .tableBuckets[].arn
"arn:aws:s3tables:us-east-2:123456789012:bucket/jbarr-table-bucket-1"
"arn:aws:s3tables:us-east-2:123456789012:bucket/jbarr-table-bucket-2"

다양한 방법으로 테이블에 액세스하여 값을 채울 수 있습니다. 테스트를 위해 Apache Spark를 설치했고, 이어서 명령줄 인수를 통해 Spark 쉘을 간접 호출하여 Amazon S3 Tables Catalog for Apache Iceberg 패키지를 사용하고mytablebucket을 테이블의 ARN에 설정했습니다.

다음과 같이 테이블을 그룹화하는 데 사용할 네임스페이스(mydata)를 만듭니다.

scala> spark.sql("""CREATE NAMESPACE IF NOT EXISTS mytablebucket.mydata""")

이어서 네임스페이스에 다음과 같이 간단한 Iceberg 테이블을 만듭니다.

spark.sql("""CREATE TABLE IF NOT EXISTS mytablebucket.mydata.table1
 (id INT,
  name STRING,
  value INT)
  using iceberg
  """)

몇 가지 s3tables 명령을 사용하여 다음과 같이 작업을 확인합니다.

$ aws s3tables list-namespaces --table-bucket-arn $ARN | jq .namespaces[].namespace[] 
"mydata"
$
$ aws s3tables list-tables --table-bucket-arn $ARN | jq .tables[].name
"table1"

그런 다음 Spark 쉘로 돌아가서 다음과 같이 테이블에 데이터 행을 몇 개 추가합니다.

spark.sql("""INSERT INTO mytablebucket.mydata.table1
  VALUES
  (1, 'Jeff', 100),
  (2, 'Carmen', 200),
  (3, 'Stephen', 300),
  (4, 'Andy', 400),
  (5, 'Tina', 500),
  (6, 'Bianca', 600),
  (7, 'Grace', 700)
  """)

콘솔의 버킷과 테이블
S3 콘솔을 사용해도 테이블 버킷을 생성해 작업할 수 있습니다. 시작하려면 다음 테이블 버킷을 클릭합니다.

첫 번째 버킷을 생성하기 전에 통합 활성화를 클릭하여 Amazon Athena, Amazon Redshift, Amazon EMR, 기타 AWS 쿼리 엔진에서 테이블 버킷에 액세스할 수 있습니다. 지금 하지 않아도 나중에 할 수 있습니다.

작은 글씨를 읽고 통합 활성화를 클릭하여 AWS Glue Data Catalog에 지정된 IAM 역할과 항목을 생성했습니다.

몇 초 후 통합이 활성화되고, 테이블 버킷 생성을 클릭하여 계속 진행합니다.

이름(jbarr-table-bucket-3)을 입력하고 다음과 같이 테이블 버킷 생성을 클릭합니다.

여기서부터는 앞서 CLI 섹션에서 봤던 것처럼 테이블을 생성하며 사용할 수 있습니다.

테이블 유지 관리
테이블 버킷은 자체 Iceberg 테이블을 생성하고 관리하는 경우 사용자가 담당해야 하는 중요한 유지 관리 업무 몇 가지를 처리합니다. 이렇게 업무를 덜어줌으로써 테이블에 더 많은 시간을 사용할 수 있도록 다음과 같은 유지 관리 작업이 자동으로 수행됩니다.

압축 – 이 프로세스는 64MiB~512MiB로 구성할 수 있는 대상 파일 크기를 추구하면서 여러 개의 작은 테이블 객체를 큰 객체로 결합하여 쿼리 성능을 향상합니다. 새 개체는 새 스냅샷으로 다시 작성됩니다.

스냅샷 관리 – 이 프로세스는 유지할 최소 스냅샷 수와 최대 기간에 대한 구성 옵션을 사용하여 테이블 스냅샷을 만료시키고 최종적으로는 제거합니다. 만료된 스냅샷은 최신이 아닌 상태로 표시되고 이어서 지정된 일수가 지난 뒤에는 삭제됩니다.

참조되지 않은 파일 제거 – 이 프로세스는 테이블 스냅샷에서 참조하지 않는 객체를 제거하고 삭제합니다.

알아야 할 사항
다음은 테이블 버킷과 테이블에 대해 알아야 할 몇 가지 중요한 사항입니다.

AWS 통합 – S3 테이블과 AWS Glue Data Catalog의 통합이 미리 보기로 제공되며, 이를 통해 Amazon Athena, Amazon Redshift, Amazon EMR, Amazon QuickSight와 같은 AWS 분석 서비스를 사용하여 데이터를 쿼리하고 시각화할 수 있습니다.

S3 API 지원 – 테이블 버킷은 GetObject, HeadObject, PutObject, 멀티 파트 업로드 작업을 비롯한 관련 S3 API 기능을 지원합니다.

보안 – 테이블 버킷에 저장된 모든 객체가 자동으로 암호화됩니다. 테이블 버킷은 퍼블릭 액세스 차단을 적용하도록 구성되어 있습니다.

요금 – 스토리지, 요청, 객체 모니터링 요금, 압축 요금을 지불합니다. 자세한 내용은 S3 요금 페이지를 참조하세요.

리전 – 미국 동부(오하이오, 버지니아 북부) 및 미국 서부(오리건) AWS 리전에서 이 새로운 기능을 사용할 수 있습니다.

Jeff;