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.
Parâmetros necessários
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
. Para substituir variáveis, passe-as para esse parâmetro comoproperty=value
--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
espark-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.[ |
Opção para definir a variável de ambiente 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.[ |
Opção para definir a variável de ambiente no processo de AM do Tez. Para o AM do Tez, esse valor substitui hive.emr-serverless.launch.env.[ . |
|
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.[ |
Opção para definir a variável de ambiente no processo da tarefa do Tez. Para tarefas do Tez, esse valor substitui hive.emr-serverless.launch.env.[ . |
|
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-arnjob-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