

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

# EMR Serverless 작업을 실행하는 경우 Hive 구성 사용
<a name="jobs-hive"></a>

`type` 파라미터가 `HIVE`로 설정된 애플리케이션에서 Hive 작업을 실행할 수 있습니다. 작업은 Amazon EMR 릴리스 버전과 호환되는 Hive 버전과 호환되어야 합니다. 예를 들어, Amazon EMR 릴리스 6.6.0을 사용하여 애플리케이션에서 작업을 실행할 때 작업은 Apache Hive 3.1.2와 호환되어야 합니다. 각 릴리스의 애플리케이션 버전에 대한 자세한 내용은 [Amazon EMR Serverless 릴리스 버전](release-versions.md) 섹션을 참조하세요.

## Hive 작업 파라미터
<a name="hive-params"></a>

[`StartJobRun` API](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/API_StartJobRun.html)를 사용하여 Hive 작업을 실행하는 경우 다음 파라미터를 지정합니다.

**Topics**
+ [Hive 작업 런타임 역할](#hive-defaults-executionRoleArn)
+ [Hive 작업 드라이버 파라미터](#hive-defaults-jobDriver)
+ [Hive 구성 재정의 파라미터](#hive-defaults-configurationOverrides)

### Hive 작업 런타임 역할
<a name="hive-defaults-executionRoleArn"></a>

**`executionRoleArn`**을 사용하여 애플리케이션이 Hive 작업을 실행하는 데 사용하는 IAM 역할에 대한 ARN을 지정합니다. 이 역할에는 다음 권한이 있어야 합니다.
+ S3 버킷 또는 데이터가 상주하는 기타 데이터 소스에서 읽기
+ Hive 쿼리 파일 및 init 쿼리 파일이 상주하는 S3 버킷 또는 접두사에서 읽기
+ Hive Scratch 디렉터리와 Hive Metastore 웨어하우스 디렉터리가 상주하는 S3 버킷에 읽기 및 쓰기
+ 최종 출력을 쓰려는 S3 버킷에 쓰기
+ `S3MonitoringConfiguration`에서 지정하는 S3 버킷 또는 접두사로 로그 쓰기
+ S3 버킷의 데이터를 암호화하기 위해 KMS 키를 사용하는 경우 KMS 키에 대한 액세스
+  AWS Glue 데이터 카탈로그에 대한 액세스

Hive 작업이 다른 데이터 소스에서 데이터를 읽거나 쓰는 경우 이 IAM 역할에서 적절한 권한을 지정합니다. IAM 역할에 이러한 권한을 제공하지 않으면 작업이 실패할 수 있습니다. 자세한 정보는 [Amazon EMR Serverless에 대한 작업 런타임 역할](security-iam-runtime-role.md) 섹션을 참조하세요.

### Hive 작업 드라이버 파라미터
<a name="hive-defaults-jobDriver"></a>

**`jobDriver`**를 사용하여 작업에 대한 입력을 제공합니다. 작업 드라이버 파라미터는 실행하려는 작업 유형에 대해 하나의 값만 허용합니다. 작업 유형으로 `hive`를 지정하면 EMR Serverless는 Hive 쿼리를 `jobDriver` 파라미터에 전달합니다. Hive 자산에는 다음 파라미터가 있습니다.
+ **`query`** - Amazon S3에서 실행하려는 Hive 쿼리 파일에 대한 참조입니다.
+ **`parameters`** - 재정의하려는 추가 Hive 구성 속성입니다. 속성을 재정의하려면 이 파라미터에 `--hiveconf {{property=value}}`로 전달합니다. 변수를 재정의하려면 이 파라미터에 `--hivevar {{key=value}}`로 전달합니다.
+ **`initQueryFile`** - init Hive 쿼리 파일입니다. Hive는 쿼리 전에 이 파일을 실행하고 이를 사용하여 테이블을 초기화할 수 있습니다.

### Hive 구성 재정의 파라미터
<a name="hive-defaults-configurationOverrides"></a>

모니터링 수준 및 애플리케이션 수준 구성 속성을 재정의하려면 **`configurationOverrides`**를 사용합니다. 이 파라미터는 다음 두 필드를 포함하는 JSON 객체를 수락합니다.
+ **`monitoringConfiguration`** - 이 필드를 사용하여 EMR Serverless 작업에서 Hive 작업의 로그를 저장할 Amazon S3 URL(`s3MonitoringConfiguration`)을 지정합니다. 애플리케이션을 호스팅 AWS 계정 하는 동일한와 작업이 실행되는 AWS 리전 동일한에서이 버킷을 생성해야 합니다.
+ **`applicationConfiguration`** - 애플리케이션에 대한 기본 구성을 재정하도록 이 필드에 구성 객체를 제공할 수 있습니다. 간편 구문을 사용하여 구성을 제공하거나 JSON 파일의 구성 객체를 참조할 수 있습니다. 구성 객체는 분류, 속성 및 선택적 중첩 구성으로 이루어져 있습니다. 속성은 해당 파일에서 재정의하려는 설정으로 구성됩니다. 단일 JSON 객체에서 여러 애플리케이션에 대해 다양한 분류를 지정할 수 있습니다.
**참고**  
사용 가능한 구성 분류는 특정 EMR Serverless 릴리스에 따라 다릅니다. 예를 들어 사용자 지정 Log4j `spark-driver-log4j2` 및 `spark-executor-log4j2`에 대한 분류는 릴리스 6.8.0 이상에서만 사용할 수 있습니다.

애플리케이션 재정의 및 Hive 파라미터에서 동일한 구성을 전달하는 경우 Hive 파라미터가 우선합니다. 다음 목록은 가장 높은 우선순위에서 가장 낮은 우선순위로 구성의 우선순위를 나열합니다.
+ `--hiveconf {{property=value}}`를 사용하여 Hive 파라미터의 일부로 제공하는 구성.
+ 작업을 시작하는 경우 애플리케이션 재정의의 일부로 제공하는 구성.
+ 애플리케이션을 생성하는 경우 `runtimeConfiguration`의 일부로 제공하는 구성.
+ 해당 릴리스에 대해 Amazon EMR에서 할당하는 최적화된 구성.
+ 애플리케이션의 기본 오픈 소스 구성.

애플리케이션 수준에서 구성을 선언하고 작업 실행 중에 구성을 재정의하는 방법에 대한 자세한 내용은 [EMR Serverless에 대한 기본 애플리케이션 구성](default-configs.md) 섹션을 참조하세요.

## Hive 작업 속성
<a name="hive-defaults"></a>

다음 표에는 Hive 작업 제출 시 구성하는 필수 속성이 나와 있습니다.


**필수 Hive 작업 속성**  

| 설정 | 설명 | 
| --- | --- | 
| hive.exec.scratchdir | EMR Serverless가 Hive 작업 실행 중에 임시 파일을 생성하는 Amazon S3 위치. | 
| hive.metastore.warehouse.dir | Hive의 관리형 테이블에 대한 데이터베이스의 Amazon S3 위치. | 

다음 표에는 선택적 Hive 속성과 Hive 작업을 제출하는 경우 재정의할 수 있는 기본값이 나와 있습니다.


**선택적 Hive 속성 및 기본값**  

| 설정 | 설명 | 기본값  | 
| --- | --- | --- | 
| fs.s3.customAWSCredentialsProvider | 사용하려는 AWS 자격 증명 공급자입니다. | com.amazonaws.auth.DefaultAWSCredentialsProviderChain | 
| fs.s3a.aws.credentials.provider | S3A 파일 시스템에 사용할 AWS 자격 증명 공급자입니다. | com.amazonaws.auth.DefaultAWSCredentialsProviderChain | 
| hive.auto.convert.join | 입력 파일 크기에 따라 공통 조인을 맵 조인으로 자동 변환하는 옵션. | TRUE | 
| hive.auto.convert.join.noconditionaltask | Hive가 입력 파일 크기에 따라 공통 조인을 맵 조인으로 변환하는 경우 최적화를 켜는 옵션. | TRUE | 
| hive.auto.convert.join.noconditionaltask.size | 조인은 이 크기 미만의 맵 조인으로 직접 변환됩니다. | 최적의 값은 Tez 태스크 메모리를 기반으로 계산됩니다. | 
| hive.cbo.enable | Calcite 프레임워크를 사용하여 비용 기반 최적화를 켜는 옵션. | TRUE | 
| hive.cli.tez.session.async | Hive 쿼리가 컴파일되는 동안 백그라운드 Tez 세션을 시작하는 옵션. false로 설정하면 Hive 쿼리가 컴파일된 후 Tez AM이 시작됩니다. | TRUE | 
| hive.compute.query.using.stats | Hive를 활성화하여 메타스토어에 저장된 통계를 사용해 특정 쿼리에 응답하는 옵션. 기본 통계의 경우 hive.stats.autogather를 TRUE로 설정합니다. 보다 고급 쿼리 컬렉션의 경우 analyze table queries를 실행합니다. | TRUE | 
| hive.default.fileformat | CREATE TABLE 문의 기본 파일 형식. CREATE TABLE 명령에서 STORED AS [FORMAT]을 지정하는 경우 이 값을 명시적으로 재정의할 수 있습니다. | TEXTFILE | 
| hive.driver.cores | Hive 드라이버 프로세스에 사용할 코어 수. | 2 | 
| hive.driver.disk | Hive 드라이버의 디스크 크기. | 20G | 
| hive.driver.disk.type | Hive 드라이버의 디스크 유형. | 표준 | 
| hive.tez.disk.type | Tez 작업자의 디스크 크기. | 표준 | 
| hive.driver.memory | Hive 드라이버 프로세스당 사용할 메모리 양. Hive CLI 및 Tez Application Master는 이 메모리를 헤드룸의 20%로 균등하게 공유합니다. | 6G | 
| hive.emr-serverless.launch.env.[{{KEY}}] | Hive 드라이버, Tez AM 및 Tez 태스크와 같은 모든 Hive별 프로세스에서 {{KEY}} 환경 변수를 설정하는 옵션. |  | 
| hive.exec.dynamic.partition | DML/DDL에서 동적 파티션을 켜는 옵션. | TRUE | 
| hive.exec.dynamic.partition.mode | 엄격한 모드 또는 비엄격 모드를 사용할지 여부를 지정하는 옵션. 엄격한 모드에서는 실수로 모든 파티션을 덮어쓰는 경우를 대비하여 하나 이상의 정적 파티션을 지정합니다. 비엄격 모드에서는 모든 파티션이 동적으로 허용됩니다. | strict | 
| hive.exec.max.dynamic.partitions | Hive가 총 생성하는 최대 동적 파티션 수. | 1000 | 
| hive.exec.max.dynamic.partitions.pernode | Hive가 각 매퍼 및 감소기 노드에서 생성하는 최대 동적 파티션 수. | 100 | 
| hive.exec.orc.split.strategy | BI, ETL 또는 HYBRID 값 중 하나가 예상됩니다. 사용자 수준 구성이 아닙니다. BI에서는 쿼리 실행과는 반대로, 분할 생성에 더 적은 시간을 소비하도록 지정합니다. ETL에서는 분할 생성에 더 많은 시간을 소비하도록 지정합니다. HYBRID에서는 휴리스틱을 기반으로 앞서 언급된 전략 중 하나를 지정합니다. | HYBRID | 
| hive.exec.reducers.bytes.per.reducer | 감소기당 크기. 기본값은 256MB입니다. 입력 크기가 1G인 경우 작업은 4개의 감속기를 사용합니다. | 256000000 | 
| hive.exec.reducers.max | 최대 감소기 수. | 256 | 
| hive.exec.stagingdir | Hive가 테이블 위치 내부 및 hive.exec.scratchdir 속성에 지정된 스크래치 디렉터리 위치에서 생성하는 임시 파일을 저장하는 디렉터리의 이름. | .hive-staging | 
| hive.fetch.task.conversion | NONE, MINIMAL 또는 MORE 값 중 하나가 예상됩니다. Hive는 선택한 쿼리를 단일 FETCH 태스크로 변환할 수 있습니다. 이 경우 지연 시간이 최소화됩니다. | MORE | 
| hive.groupby.position.alias | Hive가 GROUP BY 문에서 열 위치 별칭을 사용하도록 하는 옵션. | FALSE | 
| hive.input.format | 기본 입력 형식. CombineHiveInputFormat에 문제가 발생하면 HiveInputFormat으로 설정합니다. | org.apache.hadoop.hive.ql.io.CombineHiveInputFormat | 
| hive.log.explain.output | Hive 로그의 쿼리에 대한 확장 출력에 대한 설명을 켜는 옵션. | FALSE | 
| hive.log.level | Hive 로깅 수준. | INFO | 
| hive.mapred.reduce.tasks.speculative.execution | 감소기에 대한 투기적 시작을 켜는 옵션. Amazon EMR 6.10.x 이하에서만 지원됩니다. | TRUE | 
| hive.max-task-containers | 최대 동시 컨테이너 수. 구성된 매퍼 메모리에 이 값을 곱하여 계산과 태스크 선점에서 사용하는 사용 가능한 메모리를 결정합니다. | 1000 | 
| hive.merge.mapfiles | 맵 전용 작업이 끝날 때 작은 파일이 병합되는 옵션. | TRUE | 
| hive.merge.size.per.task | 작업 종료 시 병합된 파일의 크기. | 256000000 | 
| hive.merge.tezfiles | Tez DAG 끝에서 작은 파일 병합을 켜는 옵션. | FALSE | 
| hive.metastore.client.factory.class | IMetaStoreClient 인터페이스를 구현하는 객체를 생성하는 팩토리 클래스의 이름. | com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory | 
| hive.metastore.glue.catalogid | Glue 데이터 카탈로그가 AWS 메타스토어 역할을 하지만 작업과 다른 AWS 계정 에서 실행되는 경우 AWS 계정 작업이 실행 중인의 ID입니다. | NULL | 
| hive.metastore.uris | 메타스토어 클라이언트가 원격 메타스토어에 연결하는 데 사용하는 Thrift URI. | NULL | 
| hive.optimize.ppd | 조건자 푸시다운을 켜는 옵션. | TRUE | 
| hive.optimize.ppd.storage | 스토리지 핸들러에 대한 조건자 푸시다운을 켜는 옵션. | TRUE | 
| hive.orderby.position.alias | Hive가 ORDER BY 문에서 열 위치 별칭을 사용하도록 하는 옵션. | TRUE | 
| hive.prewarm.enabled | Tez에 대한 컨테이너 예열을 켜는 옵션. | FALSE | 
| hive.prewarm.numcontainers | Tez에 대해 예열할 컨테이너 수. | 10 | 
| hive.stats.autogather | Hive가 INSERT OVERWRITE 명령 중에 기본 통계를 자동으로 수집하도록 하는 옵션. | TRUE | 
| hive.stats.fetch.column.stats | 메타스토어에서 열 통계 가져오기를 끄는 옵션. 열 수가 많으면 열 통계 가져오기 비용이 많이 들 수 있습니다. | FALSE | 
| hive.stats.gather.num.threads | partialscan 및 noscan 분석 명령이 파티션된 테이블에 대해 사용하는 스레드 수. 이는 StatsProvidingRecordReader를 구현하는 파일 형식(예: ORC)에만 적용됩니다. | 10 | 
| hive.strict.checks.cartesian.product | 엄격한 Cartesian 조인 검사를 켜는 옵션. 이러한 검사에서는 카테시안 곱(교차 조인)을 허용하지 않습니다. | FALSE | 
| hive.strict.checks.type.safety | 엄격한 유형의 안전 검사를 켜고 string 및 double과 bigint의 비교를 끄는 옵션. | TRUE | 
| hive.support.quoted.identifiers | NONE 또는 COLUMN의 값이 예상됩니다. NONE은 식별자에 영숫자와 밑줄 문자만 유효함을 의미합니다. COLUMN은 열 이름에 모든 문자가 포함될 수 있음을 의미합니다. | COLUMN | 
| hive.tez.auto.reducer.parallelism | Tez 자동 감소기 병렬 처리 기능을 켜는 옵션. Hive는 여전히 데이터 크기를 예측하고 병렬 처리 예측을 설정합니다. Tez는 소스 버텍스의 출력 크기를 샘플링하고 필요에 따라 런타임 시 예측을 조정합니다. | TRUE | 
| hive.tez.container.size | Tez 태스크 프로세스당 사용할 메모리 양. | 6144 | 
| hive.tez.cpu.vcores | 각 Tez 태스크에 사용할 코어 수. | 2 | 
| hive.tez.disk.size | 각 태스크 컨테이너의 디스크 크기. | 20G | 
| hive.tez.input.format | Tez AM에서 분할 생성을 위한 입력 형식. | org.apache.hadoop.hive.ql.io.HiveInputFormat | 
| hive.tez.min.partition.factor | 자동 감소기 병렬 처리를 켤 때 Tez에서 지정하는 감소기의 하한. | 0.25 | 
| hive.vectorized.execution.enabled | 벡터화된 쿼리 실행 모드를 켜는 옵션. | TRUE | 
| hive.vectorized.execution.reduce.enabled | 쿼리 실행의 감소 측 벡터화 모드를 켜는 옵션. | TRUE | 
| javax.jdo.option.ConnectionDriverName | JDBC 메타스토어의 드라이버 클래스 이름. | org.apache.derby.jdbc.EmbeddedDriver | 
| javax.jdo.option.ConnectionPassword | 메타스토어 데이터베이스와 연결된 암호. | NULL | 
| javax.jdo.option.ConnectionURL | JDBC 메타스토어의 JDBC 연결 문자열. | jdbc:derby:;databaseName=metastore\_db;create=true | 
| javax.jdo.option.ConnectionUserName | 메타스토어 데이터베이스와 연결된 사용자 이름. | NULL | 
| mapreduce.input.fileinputformat.split.maxsize | 입력 형식이 org.apache.hadoop.hive.ql.io.CombineHiveInputFormat인 경우 분할 계산 중 분할의 최대 크기. 값이 0이면 제한이 없음을 나타냅니다. | 0 | 
| tez.am.dag.cleanup.on.completion | DAG가 완료될 때 셔플 데이터 정리를 켜는 옵션. | TRUE | 
| tez.am.emr-serverless.launch.env.[{{KEY}}] | Tez AM 프로세스에서 {{KEY}} 환경 변수를 설정하는 옵션. Tez AM의 경우 이 값은 hive.emr-serverless.launch.env.[{{KEY}}] 값을 재정의합니다. |  | 
| tez.am.log.level | EMR Serverless가 Tez App Primary에 전달하는 루트 로깅 수준. | INFO | 
| tez.am.sleep.time.before.exit.millis | EMR Serverless는 AM 종료 요청 후 이 기간 이후에 ATS 이벤트를 푸시해야 합니다. | 0 | 
| tez.am.speculation.enabled | 느린 태스크의 투기적 시작이 수행되는 옵션. 이 기능은 일부 태스크가 불량 또는 느린 머신으로 인해 느리게 실행될 때 작업 지연 시간을 줄이는 데 도움이 될 수 있습니다. Amazon EMR 6.10.x 이하에서만 지원됩니다. | FALSE | 
| tez.am.task.max.failed.attempts | 태스크에 실패하기 전에 특정 태스크에 대해 실패할 수 있는 최대 시도 횟수. 이 수치는 수동으로 종료된 시도를 계산에 포함하지 않습니다. | 3 | 
| tez.am.vertex.cleanup.height | 모든 종속 버텍스가 완료된 경우 Tez AM에서 버텍스 셔플 데이터를 삭제하는 거리. 값이 0이면 이 기능이 꺼집니다. Amazon EMR 버전 6.8.0 이상에서 이 기능을 지원합니다. | 0 | 
| tez.client.asynchronous-stop | EMR Serverless가 Hive 드라이버를 종료하기 전에 ATS 이벤트를 푸시하도록 하는 옵션. | FALSE | 
| tez.grouping.max-size | 그룹화된 분할의 크기 상한(바이트). 이 제한은 지나치게 큰 분할을 방지합니다. | 1073741824 | 
| tez.grouping.min-size | 그룹화된 분할의 크기 하한(바이트). 이 제한은 너무 많은 작은 분할을 방지합니다. | 16777216 | 
| tez.runtime.io.sort.mb | Tez가 출력을 정렬하는 경우 소프트 버퍼의 크기가 정렬됩니다. | 최적의 값은 Tez 태스크 메모리를 기반으로 계산됩니다. | 
| tez.runtime.unordered.output.buffer.size-mb | Tez에서 디스크에 직접 쓰지 않는 경우 사용할 버퍼의 크기. | 최적의 값은 Tez 태스크 메모리를 기반으로 계산됩니다. | 
| tez.shuffle-vertex-manager.max-src-fraction | EMR Serverless에서 현재 버텍스에 대한 모든 태스크를 예약하기 전에 완료해야 하는 소스 태스크의 비율(ScatterGather 연결의 경우). 현재 버텍스에서 예약할 준비가 된 작업 수는 min-fraction\~max-fraction 사이에서 선형으로 조정됩니다. 이 값은 기본값 또는 tez.shuffle-vertex-manager.min-src-fraction 중 큰 값으로 설정됩니다. | 0.75 | 
| tez.shuffle-vertex-manager.min-src-fraction | EMR Serverless에서 현재 버텍스에 대한 태스크를 예약하기 전에 완료해야 하는 소스 태스크의 비율(ScatterGather 연결의 경우). | 0.25 | 
| tez.task.emr-serverless.launch.env.[{{KEY}}] | Tez 태스크 프로세스에서 {{KEY}} 환경 변수를 설정하는 옵션. Tez 태스크의 경우 이 값은 hive.emr-serverless.launch.env.[{{KEY}}] 값을 재정의합니다. |  | 
| tez.task.log.level | EMR Serverless가 Tez 태스크에 전달하는 루트 로깅 수준. | INFO | 
| tez.yarn.ats.event.flush.timeout.millis | 종료하기 전에 이벤트가 플러시될 때까지 AM에서 기다려야 하는 최대 시간. | 300000 | 

## Hive 작업 예제
<a name="hive-examples"></a>

다음 코드 예제에서는 `StartJobRun` API를 사용하여 Hive 쿼리를 실행하는 방법을 보여줍니다.

```
aws emr-serverless start-job-run \
    --application-id {{application-id}} \
    --execution-role-arn {{job-role-arn}} \
    --job-driver '{
        "hive": {
            "query": "s3://{{amzn-s3-demo-bucket}}/emr-serverless-hive/query/hive-query.ql",
            "parameters": "--hiveconf hive.log.explain.output=false"
        }
    }' \
    --configuration-overrides '{
        "applicationConfiguration": [{
            "classification": "hive-site",
            "properties": {
                "hive.exec.scratchdir": "s3://{{amzn-s3-demo-bucket}}/emr-serverless-hive/hive/scratch",
                "hive.metastore.warehouse.dir": "s3://{{amzn-s3-demo-bucket}}/emr-serverless-hive/hive/warehouse",
                "hive.driver.cores": "2",
                "hive.driver.memory": "4g",
                "hive.tez.container.size": "4096",
                "hive.tez.cpu.vcores": "1"
            }
        }]
    }'
```

[EMR Serverless Samples](https://github.com/aws-samples/emr-serverless-samples/tree/main/examples/hive) GitHub 리포지토리에서 Hive 작업을 실행하는 방법에 대한 추가 예제를 찾을 수 있습니다.