Diferenças e considerações sobre o Hive na Amazon EMR - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Diferenças e considerações sobre o Hive na Amazon EMR

Diferenças entre o Apache Hive na Amazon EMR e o Apache Hive

Esta seção descreve as diferenças entre o Hive na Amazon EMR e as versões padrão do Hive disponíveis em http://svn.apache.org/viewvc/hive/branches/.

Autorização do Hive

A Amazon EMR suporta a autorização do Hive paraHDFS, mas não paraEMRFS, o Amazon S3. EMROs clusters da Amazon são executados com a autorização desativada por padrão.

Comportamento de mesclagem de arquivos do Hive com o Amazon S3

O Apache Hive mesclará arquivos pequenos no final de um trabalho somente mapa se hive.merge.mapfiles for "true", e a mesclagem apenas será acionada se o tamanho médio de saída do trabalho for menor do que a configuração hive.merge.smallfiles.avgsize. O Amazon EMR Hive tem exatamente o mesmo comportamento se o caminho de saída final estiver ativado. HDFS Se o caminho de saída estiver no Amazon S3, o parâmetro hive.merge.smallfiles.avgsize será ignorado. Nessa situação, a tarefa de mesclagem sempre será acionada se hive.merge.mapfiles estiver definido como true.

ACIDtransações e Amazon S3

O Amazon EMR 6.1.0 e versões posteriores oferecem suporte às transações do Hive ACID (atomicidade, consistência, isolamento, durabilidade) para que esteja em conformidade com as ACID propriedades de um banco de dados. Com esse recurso, você pode executarINSERT,, UPDATEDELETE, e MERGE operações em tabelas gerenciadas do Hive com dados no Amazon Simple Storage Service (Amazon S3).

Hive Live Long and Process () LLAP

LLAPa funcionalidade adicionada na versão 2.0 do Apache Hive padrão não é suportada no Hive 2.1.0 na Amazon EMR versão 5.0.

A EMR versão 6.0.0 e posterior da Amazon oferece suporte à funcionalidade Live Long and Process (LLAP) para o Hive. Para obter mais informações, consulte Usando o Hive. LLAP

Diferenças no Hive entre as EMR versões 4.x e 5.x da Amazon

Esta seção aborda as diferenças a serem consideradas antes de migrar uma implementação do Hive do Hive versão 1.0.0 na Amazon versão 4.x para o Hive 2.x na EMR Amazon versão 5.x. EMR

Considerações e diferenças operacionais

  • Support adicionado para transações ACID (atomicidade, consistência, isolamento e durabilidade): essa diferença entre o Hive 1.0.0 no Amazon EMR 4.x e o Apache Hive padrão foi eliminada.

  • As gravações diretas no Amazon S3 foram eliminadas: essa diferença entre o Hive 1.0.0 na EMR Amazon e o Apache Hive padrão foi eliminada. O Hive 2.1.0 na Amazon EMR versão 5.x agora cria, lê e grava em arquivos temporários armazenados no Amazon S3. Como resultado, para ler e gravar na mesma tabela, você não precisa mais criar uma tabela temporária no sistema de HDFS arquivos local do cluster como solução alternativa. Se você usar buckets com versionamento, certifique-se de gerenciar esses arquivos temporários conforme descrito abaixo.

  • Gerenciar arquivos temporários ao serem usados buckets do Amazon S3 com versionamento: quando você executa consultas do Hive em que o destino dos dados gerados é o Amazon S3, muitos arquivos e diretórios e temporários são criados. Este é o novo comportamento, conforme descrito anteriormente. Se você usar buckets do S3 com versionamento, esses arquivos temporários sobrecarregarão o Amazon S3 e resultarão em custos caso não sejam excluídos. Ajuste suas regras de ciclo de vida para que os dados com um prefixo /_tmp sejam excluídos após um curto período, como cinco dias. Consulte Especificar uma configuração de ciclo de vida para obter mais informações.

  • Log4j atualizado para log4j 2: se você usa log4j, talvez precise alterar sua configuração de registro em log devido a este upgrade. Para obter detalhes, consulte Apache log4j 2.

Diferenças e considerações de desempenho

  • Diferenças de desempenho com o Tez: com a EMR versão 5.x da Amazon, o Tez é o mecanismo de execução padrão para o Hive, em vez de. MapReduce O Tez fornece melhor desempenho para a maioria dos fluxos de trabalho.

  • Tabelas com muitas partições: consultas que geram um grande número de partições dinâmicas podem falhar e consultas que selecionam tabelas com muitas partições podem demorar mais do que o esperado para serem executadas. Por exemplo, um seleção de 100.000 partições pode demorar 10 minutos ou mais.

Recursos adicionais do Hive na Amazon EMR

A Amazon EMR amplia o Hive com novos recursos que oferecem suporte à integração do Hive com outros AWS serviços, como a capacidade de ler e gravar no Amazon Simple Storage Service (Amazon S3) e no DynamoDB.

Variáveis no Hive

Você pode incluir variáveis nos seus scripts usando o sinal de cifrão e chaves.

add jar ${LIB}/jsonserde.jar

Você transmite os valores dessas variáveis ao Hive na linha de comando usando o parâmetro -d, como no exemplo a seguir:

-d LIB=s3://elasticmapreduce/samples/hive-ads/lib

Você também pode transmitir os valores em etapas que executam scripts Hive.

Para transmitir valores variáveis em etapas do Hive usando o console
  1. Abra o EMR console da Amazon em https://console.aws.amazon.com/emr.

  2. Selecione Criar cluster.

  3. Na seção Steps (Etapas), para Add Step (Adicionar etapa), escolha Hive Program (Programa Hive) na lista e depois Configure and add (Configurar e adicionar).

  4. Na caixa de diálogo Add Step (Adicionar etapa), especifique os parâmetros usando a tabela a seguir como guia e escolha Add (Adicionar).

    Campo Ação
    Localização do script no S3* Especifique URI onde seu script reside no Amazon S3. O valor deve estar no formato BucketName/path/ScriptName. Por exemplo:s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q.
    Localização do S3 de entrada Opcionalmente, especifique URI onde seus arquivos de entrada residem no Amazon S3. O valor deve estar no formato BucketName/path/. Se especificado, isso será passado para o script do Hive como um parâmetro chamadoINPUT. Por exemplo: s3://elasticmapreduce/samples/hive-ads/tables/.
    Local do S3 de saída Opcionalmente, especifique URI onde você deseja que a saída seja armazenada no Amazon S3. O valor deve estar no formato BucketName/path. Se especificado, isso será passado para o script do Hive como um parâmetro chamadoOUTPUT. Por exemplo: s3://mybucket/hive-ads/output/.
    Argumentos Opcionalmente, insira uma lista de argumentos (strings separadas por espaços) para transmitir ao Hive. Se você definiu uma variável de caminho em seu script do Hive chamada $ {SAMPLE}, por exemplo:
    CREATE EXTERNAL TABLE logs (requestBeginTime STRING, requestEndTime STRING, hostname STRING) PARTITIONED BY (dt STRING) \ ROW FORMAT serde 'com.amazon.elasticmapreduce.JsonSerde' WITH SERDEPROPERTIES ( 'paths'='requestBeginTime, requestEndTime, hostname' ) LOCATION '${SAMPLE}/tables/impressions';

    Para transmitir um valor para a variável, digite o seguinte na janela Arguments (Argumentos):

    -d SAMPLE=s3://elasticmapreduce/samples/hive-ads/.

    Ação em caso de falha

    Isso determina o que faz o cluster em resposta a qualquer erro. Os valores possíveis para essa configuração são:

    • Terminate cluster (Encerrar o cluster): se a etapa falhar, encerrar o cluster. Se o cluster tiver a proteção de encerramento ativada, o AND keep alive habilitado, ele não será encerrado.

    • Cancel and wait (Cancelar e aguardar): se a etapa falhar, cancele as etapas restantes. Se o cluster tiver o keep alive habilitado, ele não será encerrado.

    • Continue (Continuar): se a etapa falhar, continue na próxima etapa.

  5. Selecione os valores conforme necessário e escolha Create cluster (Criar cluster).

Para passar valores variáveis para as etapas do Hive usando o AWS CLI

Para passar valores variáveis para as etapas do Hive usando o AWS CLI, use o --steps parâmetro e inclua uma lista de argumentos.

  • nota

    Os caracteres de continuação de linha do Linux (\) são incluídos para facilitar a leitura. Eles podem ser removidos ou usados ​​em comandos do Linux. No Windows, remova-os ou substitua-os por um sinal de interpolação (^).

    aws emr create-cluster --name "Test cluster" --release-label emr-7.2.0 \ --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \ --steps Type=Hive,Name="Hive Program",ActionOnFailure=CONTINUE,Args=[-f,s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q,-d,INPUT=s3://elasticmapreduce/samples/hive-ads/tables,-d,OUTPUT=s3://mybucket/hive-ads/output/,-d,SAMPLE=s3://elasticmapreduce/samples/hive-ads/]

    Para obter mais informações sobre o uso dos EMR comandos da Amazon no AWS CLI, consultehttps://docs.aws.amazon.com/cli/latest/reference/emr.

Para passar valores variáveis para as etapas do Hive usando o Java SDK
  • O exemplo a seguir demonstra como passar variáveis em etapas usando o. SDK Para obter mais informações, consulte Classe StepFactory na AWS SDK for Java APIreferência.

    StepFactory stepFactory = new StepFactory(); StepConfig runHive = new StepConfig() .withName("Run Hive Script") .withActionOnFailure("TERMINATE_JOB_FLOW") .withHadoopJarStep(stepFactory.newRunHiveScriptStep(“s3://mybucket/script.q”, Lists.newArrayList(“-d”,”LIB= s3://elasticmapreduce/samples/hive-ads/lib”));

Consultas do Amazon EMR Hive para acomodar esquemas parciais do DynamoDB

O Amazon EMR Hive fornece flexibilidade máxima ao consultar tabelas do DynamoDB, permitindo que você especifique um subconjunto de colunas nas quais você pode filtrar dados, em vez de exigir que sua consulta inclua todas as colunas. Essa técnica de consulta de esquema parcial é eficaz quando você tem uma esquema de banco de dados esparso e deseja filtrar registros com base em algumas colunas, por exemplo, em carimbos de data/hora.

O exemplo a seguir mostra como usar uma consulta do Hive para:

  • Crie uma tabela do DynamoDB.

  • Selecione um subconjunto de itens (linhas) no DynamoDB e restrinja ainda mais os dados para determinadas colunas.

  • Copie os dados resultantes para o Amazon S3.

DROP TABLE dynamodb; DROP TABLE s3; CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, fullColumn map<String, String>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ( "dynamodb.table.name" = "myTable", "dynamodb.throughput.read.percent" = ".1000", "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey"); CREATE EXTERNAL TABLE s3(map<String, String>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://bucketname/path/subpath/'; INSERT OVERWRITE TABLE s3 SELECT item fullColumn FROM dynamodb WHERE recordTimeStamp < "2012-01-01";

A tabela a seguir mostra a sintaxe de consulta para a seleção de qualquer combinação de itens do DynamoDB.

Exemplo de consulta Descrição do resultado
SELECT * FROM table_name; Seleciona todos os itens (linhas) de uma determinada tabela e inclui dados de todas as colunas disponíveis para esses itens.
SELECT * FROM table_name WHERE field_name =value; Seleciona alguns itens (linhas) de uma determinada tabela e inclui dados de todas as colunas disponíveis para esses itens.
SELECT column1_name, column2_name, column3_name FROM table_name; Seleciona todos os itens (linhas) de uma determinada tabela e inclui dados de algumas colunas disponíveis para esses itens.
SELECT column1_name, column2_name, column3_name FROM table_name WHERE field_name =value; Seleciona alguns itens (linhas) de uma determinada tabela e inclui dados de algumas colunas disponíveis para esses itens.

Copiar dados entre tabelas do DynamoDB em diferentes regiões da AWS

O Amazon EMR Hive fornece uma dynamodb.region propriedade que você pode definir por tabela do DynamoDB. Quando dynamodb.region é definido de forma diferente em duas tabelas, quaisquer dados copiados entre as tabelas ocorrem automaticamente entre as regiões especificadas.

O exemplo a seguir mostra como criar uma tabela do DynamoDB com um script do Hive que define a propriedade dynamodb.region:

nota

As propriedades da região por tabela substituem as propriedades globais do Hive.

CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, map<String, String> fullColumn) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ( "dynamodb.table.name" = "myTable", "dynamodb.region" = "eu-west-1", "dynamodb.throughput.read.percent" = ".1000", "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey");

Definir valores de throughput do DynamoDB por tabela

O Amazon EMR Hive permite que você defina o readThroughputPercent DynamoDB writeThroughputPercent e as configurações por tabela na definição da tabela. O script do Amazon EMR Hive a seguir mostra como definir os valores de taxa de transferência. Para obter mais informações sobre valores de throughput do DynamoDB, consulte Especificar requisitos de leitura e gravação para tabelas.

CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, map<String, String> fullColumn) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ( "dynamodb.table.name" = "myTable", "dynamodb.throughput.read.percent" = ".4", "dynamodb.throughput.write.percent" = "1.0", "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey");