Uso das configurações do Hive ao executar trabalhos do EMR Sem Servidor - Amazon EMR

Uso das configurações do Hive ao executar trabalhos do EMR Sem Servidor

Você pode executar trabalhos do Hive em uma aplicação com o parâmetro type definido como HIVE. Os trabalhos devem ser compatíveis com a versão do Hive compatível com a versão de lançamento do Amazon EMR. Por exemplo, quando você executa trabalhos em uma aplicação com o Amazon EMR versão 6.6.0, o trabalho deve ser compatível com o Apache Hive 3.1.2. Para obter informações sobre as versões da aplicação para cada versão, consulte Versões de lançamento do Amazon EMR Sem Servidor.

Parâmetros de trabalho do Hive

Ao usar a API StartJobRun para executar um trabalho do Hive, você deve especificar os parâmetros a seguir.

Perfil de runtime do trabalho do Hive

Use executionRoleArn para especificar o ARN do perfil do IAM que a aplicação usa para executar trabalhos do Hive. Esse perfil deve conter as seguintes permissões:

  • Leitura dos buckets do S3 ou de outras fontes de dados em que os dados residem

  • Leitura dos buckets ou prefixos do S3 em que residem o arquivo de consulta do Hive e o arquivo de consulta inicial

  • Leitura e gravação nos buckets do S3 onde residem o diretório temporário do Hive e o diretório do warehouse do Hive Metastore

  • Gravação nos buckets do S3 onde você pretende gravar a saída final

  • Gravação de logs em um bucket ou prefixo do S3 especificado por S3MonitoringConfiguration

  • Acesso às chaves do KMS se você usá-las para criptografar dados no bucket do S3

  • Acesso ao AWS Glue Data Catalog

Se o trabalho do Hive ler ou gravar dados entre outras fontes de dados, especifique as permissões apropriadas nesse perfil do IAM. Se você não fornecer essas permissões ao perfil do IAM, seu trabalho poderá falhar. Para ter mais informações, consulte Perfis de runtime do trabalho para o Amazon EMR Sem Servidor.

Parâmetro do driver de trabalho do Hive

Use jobDriver para fornecer entradas ao trabalho. O parâmetro do driver do trabalho aceita somente um valor para o tipo de trabalho que você deseja executar. Quando você especifica hive como o tipo de trabalho, o EMR Sem Servidor passa uma consulta do Hive para o parâmetro jobDriver. Os trabalhos do Hive têm os seguintes parâmetros:

  • query: essa é a referência no Amazon S3 ao arquivo de consulta do Hive que você deseja executar.

  • parameters: essas são as propriedades adicionais de configuração do Hive que você deseja substituir. Para substituir propriedades, passe-as para esse parâmetro como --hiveconf property=value. Para substituir variáveis, passe-as para esse parâmetro como --hivevar key=value.

  • initQueryFile: esse é o arquivo de consulta de inicialização do Hive. O Hive executa esse arquivo antes da consulta e pode usá-lo para inicializar tabelas.

Parâmetro de substituição da configuração do Hive

Use configurationOverrides para substituir as propriedades de configuração no nível de monitoramento e no nível de aplicação. Esse parâmetro aceita um objeto JSON com os seguintes dois campos:

  • monitoringConfiguration: use esse campo para especificar o URL do Amazon S3 (s3MonitoringConfiguration) no qual você deseja que o trabalho do EMR Sem Servidor armazene os logs do trabalho do Hive. Certifique-se de criar esse bucket com a mesma Conta da AWS que hospeda a aplicação e na mesma Região da AWS em que o trabalho está sendo executado.

  • applicationConfiguration: Você pode fornecer um objeto de configuração neste campo para substituir as configurações padrão das aplicações. Você pode usar uma sintaxe abreviada para fornecer a configuração ou fazer referência ao objeto de configuração em um arquivo JSON. Os objetos de configuração consistem em uma classificação, propriedades e configurações opcionais aninhadas As propriedades consistem nas configurações que você deseja substituir neste arquivo. Você pode especificar várias classificações para diversas aplicações em um único objeto JSON.

    nota

    As classificações de configuração disponíveis variam de acordo com a versão específica do EMR Sem Servidor. Por exemplo, classificações para Log4j personalizado spark-driver-log4j2 e spark-executor-log4j2 estão disponíveis somente nas versões 6.8.0 e superiores.

Se você transferir a mesma configuração em uma substituição de aplicação e nos parâmetros do Hive, os parâmetros do Hive terão prioridade. A lista a seguir classifica as configurações da prioridade mais alta para a mais baixa.

  • Configuração fornecida como parte dos parâmetros do Hive com --hiveconf property=value.

  • A configuração que você fornece como parte da aplicação é substituída ao iniciar um trabalho.

  • Configuração fornecida como parte da runtimeConfiguration ao criar uma aplicação.

  • Configurações otimizadas que o Amazon EMR atribui para a versão.

  • Configurações padrão de código aberto da aplicação.

Para obter mais informações sobre como declarar configurações no nível da aplicação e substituir configurações durante a execução do trabalho, consulte Configuração padrão de aplicações do EMR Sem Servidor.

Propriedades do trabalho do Hive

A tabela a seguir lista as propriedades obrigatórias que você deve configurar ao enviar um trabalho do Hive.

Configuração Descrição
hive.exec.scratchdir A localização do Amazon S3 em que o EMR Sem Servidor cria arquivos temporários durante a execução do trabalho do Hive.
hive.metastore.warehouse.dir A localização dos bancos de dados do Amazon S3 para tabelas gerenciadas no Hive.

A tabela a seguir lista as propriedades opcionais do Hive e seus valores padrão que você pode substituir ao enviar um trabalho do Hive.

Configuração Descrição Valor padrão
fs.s3.customAWSCredentialsProvider O provedor de credenciais da AWS que você deseja usar. com.amazonaws.auth.DefaultAWSCredentialsProviderChain
fs.s3a.aws.credentials.provider O provedor de credenciais da AWS que você deseja usar com um sistema de arquivos do S3A. com.amazonaws.auth.DefaultAWSCredentialsProviderChain
hive.auto.convert.join Opção que ativa a conversão automática de junções comuns em junções de mapas, com base no tamanho do arquivo de entrada. TRUE
hive.auto.convert.join.noconditionaltask Opção que ativa a otimização quando o Hive converte uma junção comum em uma junção de mapa com base no tamanho do arquivo de entrada. TRUE
hive.auto.convert.join.noconditionaltask.size Uma junção é convertida diretamente em uma junção de mapa abaixo desse tamanho. O valor ideal é calculado com base na memória de tarefas do Tez
hive.cbo.enable Opção que ativa otimizações baseadas em custos com a estrutura Calcite. TRUE
hive.cli.tez.session.async Opção para iniciar uma sessão em segundo plano do Tez enquanto sua consulta do Hive é compilada. Quando definido como false, o AM do Tez é iniciado após a compilação da consulta do Hive. TRUE
hive.compute.query.using.stats Opção que ativa o Hive para responder a determinadas consultas com estatísticas armazenadas na metastore. Para estatísticas básicas, defina hive.stats.autogather como TRUE. Para uma coleção mais avançada de consultas, execute analyze table queries. TRUE
hive.default.fileformat O formato de arquivo padrão para instruções CREATE TABLE. Você pode substituir isso explicitamente se especificar STORED AS [FORMAT] no comando CREATE TABLE. TEXTFILE
hive.driver.cores O número de núcleos a serem usados para o processo do driver do Hive. 2
hive.driver.disk O tamanho do disco para o driver do Hive. 20G
hive.driver.disk.type O tipo de disco para o driver do Hive. Padrão
hive.tez.disk.type O tamanho do disco para os trabalhadores do Tez. Padrão
hive.driver.memory A quantidade de memória a ser usada por processo de driver do Hive. A CLI do Hive e o mestre de aplicação do Tez compartilham essa memória igualmente com 20% do espaço livre. 6G
hive.emr-serverless.launch.env.[KEY] Opção para definir a variável de ambiente KEY em todos os processos específicos do Hive, como o driver do Hive, o AM do Tez e o trabalho do Tez.
hive.exec.dynamic.partition Opções que ativam partições dinâmicas em DML/DDL. TRUE
hive.exec.dynamic.partition.mode Opção que especifica se você deseja usar o modo estrito ou o modo não estrito. No modo estrito, você deve especificar pelo menos uma partição estática para o caso de substituir acidentalmente todas as partições. No modo não estrito, todas as partições podem ser dinâmicas. strict
hive.exec.max.dynamic.partitions O número máximo de partições dinâmicas que o Hive cria no total. 1000
hive.exec.max.dynamic.partitions.pernode O número máximo de partições dinâmicas que o Hive cria em cada nó mapeador e redutor. 100
hive.exec.orc.split.strategy Espera um dos seguintes valores: BI, ETL ou HYBRID. Essa não é uma configuração em nível de usuário. BI especifica que você deseja gastar menos tempo na geração dividida do que na execução da consulta. ETL especifica que você deseja passar mais tempo na geração dividida. HYBRID especifica uma escolha das estratégias acima com base na heurística. HYBRID
hive.exec.reducers.bytes.per.reducer O tamanho por redutor. O padrão é 256 MB. Se o tamanho da entrada for 1G, o trabalho usa 4 redutores. 256.000.000
hive.exec.reducers.max O número máximo de redutores. 256
hive.exec.stagingdir O nome do diretório que armazena os arquivos temporários que o Hive cria dentro dos locais das tabelas e no local do diretório temporário especificado na propriedade hive.exec.scratchdir. .hive-staging
hive.fetch.task.conversion Espera um dos seguintes valores: NONE, MINIMAL ou MORE. O Hive pode converter consultas selecionadas em uma única tarefa de FETCH. Isso minimiza a latência. MORE
hive.groupby.position.alias Opção que faz com que o Hive use um alias de posição da coluna em instruções GROUP BY. FALSE
hive.input.format O formato de entrada padrão. Defina como HiveInputFormat se encontrar problemas com CombineHiveInputFormat. org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
hive.log.explain.output Opção que ativa explicações sobre a saída estendida de qualquer consulta no log do Hive. FALSE
hive.log.level O nível de registro em log do Hive. INFO
hive.mapred.reduce.tasks.speculative.execution Opção que ativa o lançamento especulativo de redutores. Compatível somente com o Amazon EMR 6.10.x e versões anteriores. TRUE
hive.max-task-containers O número máximo de contêineres simultâneos. A memória do mapeador configurada é multiplicada por esse valor para determinar a memória disponível que divide o uso da computação e da preempção de tarefas. 1000
hive.merge.mapfiles Opção que faz com que arquivos pequenos sejam mesclados no final de um trabalho somente de mapa. TRUE
hive.merge.size.per.task O tamanho dos arquivos mesclados no final do trabalho. 256.000.000
hive.merge.tezfiles Opção que ativa a mesclagem de arquivos pequenos no final de um DAG do Tez. FALSE
hive.metastore.client.factory.class O nome da classe de fábrica que produz objetos que implementam a interface IMetaStoreClient. com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
hive.metastore.glue.catalogid Se o AWS Glue Data Catalog funcionar como uma metastore, mas for executado em uma Conta da AWS diferente dos trabalhos, o ID da Conta da AWS em que os trabalhos estão sendo executados. NULL
hive.metastore.uris O URI do Thrift que o cliente da metastore usa para se conectar à metastore remota. NULL
hive.optimize.ppd Opção que ativa o pushdown do predicado. TRUE
hive.optimize.ppd.storage Opção que ativa o pushdown de predicados para manipuladores de armazenamento. TRUE
hive.orderby.position.alias Opção que faz com que o Hive use um alias de posição da coluna em instruções ORDER BY. TRUE
hive.prewarm.enabled Opção que ativa o pré-aquecimento de contêineres do Tez. FALSE
hive.prewarm.numcontainers O número de contêineres a serem pré-aquecidos para o Tez. 10
hive.stats.autogather Opção que faz com que o Hive colete estatísticas básicas automaticamente durante o comando INSERT OVERWRITE. TRUE
hive.stats.fetch.column.stats Opção que desativa a busca de estatísticas de colunas da metastore. Uma busca de estatísticas de colunas pode ser cara quando o número de colunas é alto. FALSE
hive.stats.gather.num.threads O número de threads que os comandos de análise partialscan e noscan usam para tabelas particionadas. Isso se aplica somente aos formatos de arquivo que implementam StatsProvidingRecordReader (como ORC). 10
hive.strict.checks.cartesian.product Opções que ativam verificações estritas de junção cartesiana. Essas verificações não permitem um produto cartesiano (uma junção cruzada). FALSE
hive.strict.checks.type.safety Opção que ativa verificações de segurança de tipo estritas e desativa a comparação de bigint com string e double. TRUE
hive.support.quoted.identifiers Espera um valor de NONE ou COLUMN. NONE implica que somente caracteres alfanuméricos e sublinhados são válidos nos identificadores. COLUMN implica que os nomes das colunas podem conter qualquer caractere. COLUMN
hive.tez.auto.reducer.parallelism Opção que ativa o recurso de paralelismo do redutor automático do Tez. O Hive ainda estima os tamanhos dos dados e define estimativas de paralelismo. O Tez coleta amostras dos tamanhos de saída dos vértices de origem e ajusta as estimativas no runtime conforme necessário. TRUE
hive.tez.container.size A quantidade de memória a ser usada por processo de tarefa do Tez. 6144
hive.tez.cpu.vcores O número de núcleos a serem usados em cada tarefa do Tez. 2
hive.tez.disk.size O tamanho do disco para cada contêiner de tarefas. 20G
hive.tez.input.format O formato de entrada para geração de divisões no AM do Tez. org.apache.hadoop.hive.ql.io.HiveInputFormat
hive.tez.min.partition.factor Limite inferior de redutores que o Tez especifica quando você ativa o paralelismo do redutor automático. 0.25
hive.vectorized.execution.enabled Opção que ativa o modo vetorizado de execução da consulta. TRUE
hive.vectorized.execution.reduce.enabled Opção que ativa o modo vetorizado do lado reduzido da execução de uma consulta. TRUE
javax.jdo.option.ConnectionDriverName O nome da classe de driver para uma metastore JDBC. org.apache.derby.jdbc.EmbeddedDriver
javax.jdo.option.ConnectionPassword A senha associada a um banco de dados da metastore. NULL
javax.jdo.option.ConnectionURL A string de conexão JDBC para uma metastore JDBC. jdbc:derby:;databaseName=metastore_db;create=true
javax.jdo.option.ConnectionUserName O nome de usuário associado a um banco de dados da metastore. NULL
mapreduce.input.fileinputformat.split.maxsize O tamanho máximo de uma divisão durante o cálculo da divisão quando o formato de entrada é org.apache.hadoop.hive.ql.io.CombineHiveInputFormat. O valor de 0 indica que não há limite. 0
tez.am.dag.cleanup.on.completion Opção que ativa a limpeza de dados embaralhados quando o DAG é concluído. TRUE
tez.am.emr-serverless.launch.env.[KEY] Opção para definir a variável de ambiente KEY no processo de AM do Tez. Para o AM do Tez, esse valor substitui hive.emr-serverless.launch.env.[KEY].
tez.am.log.level O nível de registro em log raiz que o EMR Sem Servidor passa para o mestre de aplicação do Tez. INFO
tez.am.sleep.time.before.exit.millis O EMR Sem Servidor deve enviar eventos de ATS após esse período, depois da solicitação de desligamento do AM. 0
tez.am.speculation.enabled Opção que causa o lançamento especulativo de tarefas mais lentas. Isso pode ajudar a reduzir a latência do trabalho quando algumas tarefas estão sendo executadas mais lentamente devido a máquinas defeituosas ou lentas. Compatível somente com o Amazon EMR 6.10.x e versões anteriores. FALSE
tez.am.task.max.failed.attempts O número máximo de tentativas que podem falhar em uma tarefa específica antes que a tarefa falhe. Esse número não conta as tentativas encerradas manualmente. 3
tez.am.vertex.cleanup.height Uma distância na qual, se todos os vértices dependentes estiverem completos, o AM do Tez excluirá os dados de embaralhamento de vértices. Esse recurso é desativado quando o valor é 0. O Amazon EMR 6.8.0 e versões posteriores oferecem suporte a esse recurso. 0
tez.client.asynchronous-stop Opção que faz com que o EMR Sem Servidor envie eventos de ATS antes de encerrar o driver do Hive. FALSE
tez.grouping.max-size O limite superior de tamanho de uma divisão agrupada (em bytes). Esse limite evita divisões excessivamente grandes. 1073741824
tez.grouping.min-size O limite inferior de tamanho de uma divisão agrupada (em bytes). Esse limite evita muitas divisões pequenas. 16777216
tez.runtime.io.sort.mb O tamanho do buffer flexível quando o Tez classifica a saída é classificado. O valor ideal é calculado com base na memória de tarefas do Tez
tez.runtime.unordered.output.buffer.size-mb O tamanho do buffer a ser usado se o Tez não gravar diretamente no disco. O valor ideal é calculado com base na memória de tarefas do Tez
tez.shuffle-vertex-manager.max-src-fraction A fração das tarefas de origem que devem ser concluídas antes que o EMR Sem Servidor programe todas as tarefas para o vértice atual (no caso de uma conexão ScatterGather). O número de tarefas prontas para programação no vértice atual é escalado linearmente entre min-fraction e max-fraction. Isso padroniza o valor padrão ou tez.shuffle-vertex-manager.min-src-fraction, o que for maior. 0.75
tez.shuffle-vertex-manager.min-src-fraction A fração das tarefas de origem que devem ser concluídas antes que o EMR Sem Servidor programe tarefas para o vértice atual (no caso de uma conexão ScatterGather). 0.25
tez.task.emr-serverless.launch.env.[KEY] Opção para definir a variável de ambiente KEY no processo da tarefa do Tez. Para tarefas do Tez, esse valor substitui hive.emr-serverless.launch.env.[KEY].
tez.task.log.level O nível de registro em log raiz que o EMR Sem Servidor passa para as tarefas do Tez. INFO
tez.yarn.ats.event.flush.timeout.millis A quantidade máxima de tempo que o AM deve esperar até que os eventos sejam descarregados antes do encerramento. 300000

Exemplos de trabalho do Hive

O exemplo de código a seguir mostra como executar uma consulta do Hive com a API StartJobRun.

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" } }] }'

Você encontra exemplos adicionais de como executar trabalhos do Hive no repositório do GitHub EMR Serverless Samples.