S3 Select와 함께 Hive를 사용하여 성능 향상 - Amazon EMR

S3 Select와 함께 Hive를 사용하여 성능 향상

Amazon EMR 릴리스 버전 5.18.0 이상에서는 Amazon EMR 기반 Hive에서 S3 Select를 사용할 수 있습니다. S3 Select를 사용하면 애플리케이션이 객체에서 데이터 하위 집합만 검색할 수 있습니다. Amazon EMR의 경우 처리를 위해 대형 데이터 세트를 필터링하는 계산 작업이 클러스터에서 Amazon S3로 '푸시다운'되어 일부 애플리케이션의 성능이 향상되고 Amazon EMR과 Amazon S3 사이에 전송되는 데이터의 양이 줄어듭니다.

S3 Select에는 CSV 및 JSON 파일을 기반으로, 그리고 Hive 세션 중에 s3select.filter 구성 변수를 true로 설정하여 Hive 테이블이 지원됩니다. 자세한 정보와 지침은 코드에서 S3 Select 지정을 참조하세요.

S3 Select가 애플리케이션에 적합한가요?

S3 Select 사용 여부에 관계없이 애플리케이션을 벤치마킹하여 애플리케이션에 적합한지 여부를 확인하는 것이 좋습니다.

다음 지침을 사용하여 애플리케이션과 함께 S3 Select를 사용할 수 있는지 확인하십시오.

  • 쿼리가 원본 데이터 세트 중 반 이상을 필터링합니다.

  • 쿼리 필터 조건자가 Amazon S3 Select에서 지원하는 데이터 형식의 열을 사용합니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서에서 데이터 유형을 참조하세요.

  • Amazon S3 및 Amazon EMR 클러스터 간 네트워크 연결의 전송 속도와 가용 대역폭이 양호합니다. Amazon S3는 HTTP 응답을 압축하지 않으므로 압축된 입력 파일의 경우 응답 크기가 증가할 수 있습니다.

고려 사항 및 제한

  • 고객 제공 암호화 키를 사용하는 Amazon S3 서버 측 암호화(SSE-C) 및 클라이언트 측 암호화는 지원되지 않습니다.

  • AllowQuotedRecordDelimiters 속성이 지원되지 않습니다. 이 속성이 지정되면 쿼리가 실패합니다.

  • UTF-8 형식의 CSV 및 JSON 파일만 지원됩니다. 여러 줄의 CSV 및 JSON은 지원되지 않습니다.

  • 압축되지 않거나 gzip 또는 bzip2 파일이 지원되지 않습니다.

  • 마지막 줄의 설명 문자는 지원되지 않습니다.

  • 파일 끝의 빈 줄은 처리되지 않습니다.

  • Amazon EMR 기반 Hive는 S3 Select에서 지원하는 기본 데이터 형식을 지원합니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서에서 데이터 유형을 참조하세요.

코드에서 S3 Select 지정

Hive 테이블에 S3 Select를 사용하려면 com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormatINPUTFORMAT 클래스 이름으로 지정하여 테이블을 생성하고, TBLPROPERTIES 절을 사용하여 s3select.format 속성의 값을 지정합니다.

쿼리를 실행할 때 기본적으로 S3 Select가 비활성화됩니다. 아래와 같이 Hive에서 s3select.filtertrue로 설정하여 S3 Select를 활성화합니다. 아래의 예제는 기본 CSV 및 JSON 파일로 테이블을 생성한 후 간단한 select 문을 사용하여 테이블을 쿼리할 때 S3 Select를 지정하는 방법을 보여 줍니다.

예 CSV 기반 테이블의 CREATE TABLE 문
CREATE TABLE mys3selecttable ( col1 string, col2 int, col3 boolean ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS INPUTFORMAT 'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://path/to/mycsvfile/' TBLPROPERTIES ( "s3select.format" = "csv", "s3select.headerInfo" = "ignore" );
예 JSON 기반 테이블의 CREATE TABLE 문
CREATE TABLE mys3selecttable ( col1 string, col2 int, col3 boolean ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://path/to/json/' TBLPROPERTIES ( "s3select.format" = "json" );
예 SELECT TABLE 문
SET s3select.filter=true; SELECT * FROM mys3selecttable WHERE col2 > 10;