Hive 작업 - Amazon EMR

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

Hive 작업

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

Hive 작업 파라미터

StartJobRun API 를 사용하여 Hive 작업을 실행할 때 다음 파라미터를 지정해야 합니다.

Hive 작업 런타임 역할

executionRoleArn 를 사용하여 애플리케이션이 Hive 작업을 실행하는 데 사용하는 IAM 역할에 ARN 대한 를 지정합니다. 이 역할에는 다음 권한이 포함되어야 합니다.

  • 데이터가 있는 S3 버킷 또는 기타 데이터 소스에서 읽기

  • Hive 쿼리 파일 및 init 쿼리 파일이 있는 S3 버킷 또는 접두사에서 읽기

  • Hive Scratch 디렉터리와 Hive Metastore 웨어하우스 디렉터리가 있는 S3 버킷에 읽기 및 쓰기

  • 최종 출력을 작성할 S3 버킷에 쓰기

  • S3MonitoringConfiguration 지정하는 S3 버킷 또는 접두사에 로그 쓰기

  • KMS 키를 사용하여 S3 버킷의 데이터를 암호화하는 경우 KMS 키에 대한 액세스

  • AWS Glue 데이터 카탈로그에 대한 액세스

Hive 작업이 다른 데이터 소스에서 데이터를 읽거나 쓰는 경우 이 IAM 역할에서 적절한 권한을 지정합니다. IAM 역할에 이러한 권한을 제공하지 않으면 작업이 실패할 수 있습니다. 자세한 내용은 Amazon EMR Serverless의 작업 런타임 역할 단원을 참조하십시오.

Hive 작업 드라이버 파라미터

jobDriver 를 사용하여 작업에 대한 입력을 제공합니다. 작업 드라이버 파라미터는 실행하려는 작업 유형에 대해 하나의 값만 허용합니다. 작업 유형hive으로 를 지정하면 EMR Serverless는 Hive 쿼리를 jobDriver 파라미터에 전달합니다. Hive 작업의 파라미터는 다음과 같습니다.

  • query - 실행하려는 Hive 쿼리 파일에 대한 Amazon S3의 참조입니다.

  • parameters - 재정의하려는 추가 Hive 구성 속성입니다. 속성을 재정의하려면 속성을 이 파라미터에 로 전달합니다--hiveconf property=value. 변수를 재정의하려면 변수를 이 파라미터에 로 전달합니다--hivevar key=value.

  • initQueryFile - init Hive 쿼리 파일입니다. Hive는 쿼리 전에 이 파일을 실행하고 이를 사용하여 테이블을 초기화할 수 있습니다.

Hive 구성 재정의 파라미터

모니터링 수준 및 애플리케이션 수준 구성 속성을 재정의configurationOverrides하는 데 사용합니다. 이 파라미터는 다음 두 필드가 있는 JSON 객체를 허용합니다.

  • monitoringConfiguration - 이 필드를 사용하여 EMR Serverless 작업이 Hive 작업의 로그를 저장할 Amazon S3URL(s3MonitoringConfiguration)를 지정합니다. 애플리케이션을 호스팅 AWS 계정 하는 버킷과 작업이 실행되는 버킷을 동일하게 생성해야 AWS 리전 합니다.

  • applicationConfiguration - 이 필드에 구성 객체를 제공하여 애플리케이션의 기본 구성을 재정의할 수 있습니다. 간략 구문을 사용하여 구성을 제공하거나 JSON 파일에서 구성 객체를 참조할 수 있습니다. 구성 객체는 분류, 속성 및 선택적 중첩 구성으로 이루어져 있습니다. 속성은 해당 파일에서 재정의하려는 설정으로 구성됩니다. 단일 JSON 객체에서 여러 애플리케이션에 대해 여러 분류를 지정할 수 있습니다.

    참고

    사용 가능한 구성 분류는 특정 EMR Serverless 릴리스에 따라 다릅니다. 예를 들어 사용자 지정 Log4j spark-driver-log4j2 및 에 대한 분류spark-executor-log4j2는 릴리스 6.8.0 이상에서만 사용할 수 있습니다.

애플리케이션 재정의 및 Hive 파라미터에서 동일한 구성을 전달하면 Hive 파라미터가 우선합니다. 다음 목록은 구성을 가장 높은 우선 순위에서 가장 낮은 우선 순위로 순위를 매깁니다.

  • 를 사용하여 Hive 파라미터의 일부로 제공하는 구성입니다--hiveconf property=value.

  • 애플리케이션의 일부로 제공하는 구성은 작업을 시작할 때 재정의됩니다.

  • 애플리케이션을 생성할 runtimeConfiguration 때 의 일부로 제공하는 구성입니다.

  • Amazon이 릴리스에 EMR 할당하는 최적화된 구성입니다.

  • 애플리케이션에 대한 기본 오픈 소스 구성입니다.

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

Hive 작업 속성

다음 표에는 Hive 작업을 제출할 때 구성해야 하는 필수 속성이 나열되어 있습니다.

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

다음 표에는 선택적 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 세션을 시작하는 옵션입니다. 로 설정하면 Hive 쿼리가 컴파일된 후 falseTez 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 기본 입력 형식입니다. 에 문제가 HiveInputFormat 발생하면 를 로 설정합니다CombineHiveInputFormat. 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 AWS Glue 데이터 카탈로그가 메타스토어 역할을 하지만 작업과 다른 AWS 계정 에서 실행되는 경우 작업이 실행 중인 AWS 계정 의 ID입니다. NULL
hive.metastore.uris 메타스토어 클라이언트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 partialscannoscan 분석 명령이 파티션된 테이블에 사용하는 스레드 수입니다. 이는 StatsProvidingRecordReader 를 구현하는 파일 형식(예: )에만 적용됩니다ORC. 10
hive.strict.checks.cartesian.product 엄격한 Cartesian 조인 검사를 활성화하는 옵션입니다. 이러한 검사는 Cartesian 제품(교차 조인)을 허용하지 않습니다. FALSE
hive.strict.checks.type.safety 엄격한 유형 안전 검사를 켜고 stringbigint와의 비교를 끄는 옵션입니다double. TRUE
hive.support.quoted.identifiers NONE 또는 의 값을 예상합니다COLUMN. NONE 는 식별자에 영숫자와 밑줄 문자만 유효함을 나타냅니다. COLUMN 는 열 이름에 문자가 포함될 수 있음을 나타냅니다. COLUMN
hive.tez.auto.reducer.parallelism Tez Auto-Rucer 병렬 처리 기능을 켜는 옵션입니다. 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 앱 마스터에 전달하는 루트 로깅 수준입니다. 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 작업 예제

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

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 샘플 GitHub 리포지토리에서 Hive 작업을 실행하는 방법에 대한 추가 예제를 찾을 수 있습니다.