Usar o S3 Select com o Hive para melhorar a performance - Amazon EMR

Usar o S3 Select com o Hive para melhorar a performance

Importante

O Amazon S3 Select não está mais disponível para novos clientes. Os clientes existentes do Amazon S3 Select podem continuar usando o recurso normalmente. Saiba mais

Com as versões 5.18.0 e posteriores do Amazon EMR, você pode usar o S3 Select com o Hive no Amazon EMR. O S3 Select possibilita que as aplicações recuperem apenas um subconjunto dos dados de um objeto. Para o Amazon EMR, o trabalho de computação de filtrar grandes conjuntos de dados para processamento é enviado do cluster para o Amazon S3, o que pode melhorar a performance em algumas aplicações e reduz o volume de dados transferidos entre o Amazon EMR e o Amazon S3.

O S3 Select é compatível com tabelas do Hive com base em arquivos CSV e JSON e definindo a variável de configuração s3select.filter como true durante a sessão do Hive. Para ter mais informações e exemplos, consulte Especificar o S3 Select no código.

O S3 Select é adequado para minha aplicação?

Recomendamos que você avalie seus aplicativos com e sem o S3 Selecione para ver se o uso pode ser adequado para o aplicativo.

Use as seguintes diretrizes para determinar se o seu aplicativo é adequado para o uso do S3 Select:

  • Sua consulta filtra mais de metade do conjunto de dados original.

  • Os predicados do filtro de consulta usam colunas que têm um tipo de dados compatível com o Amazon S3 Select. Para obter mais informações, consulte Tipos de dados no Guia do usuário do Amazon Simple Storage Service.

  • Sua conexão de rede entre o Amazon S3 e o cluster do Amazon EMR tem boa velocidade de transferência e largura de banda disponível. O Amazon S3 não compacta respostas HTTP. Portanto, é provável que o tamanho da resposta aumente para arquivos de entrada compactados.

Considerações e limitações

  • A criptografia do lado do servidor do Amazon S3 com chaves de criptografia fornecidas pelo cliente (SSE-C) e a criptografia do lado do cliente não são compatíveis.

  • A propriedade AllowQuotedRecordDelimiters não é compatível. Se essa propriedade for especificada, a consulta falhará.

  • Somente arquivos CSV e JSON no formato UTF-8 são compatíveis. CSVs e JSON multilinha não são compatíveis.

  • Somente arquivos descompactados, gzip ou bzip2 são compatíveis.

  • Caracteres de comentário na última linha não são compatíveis.

  • Linhas vazias no final de um arquivo não são processadas.

  • O Hive no Amazon EMR oferece suporte a tipos de dados primitivos compatíveis com o S3 Select. Para obter mais informações, consulte Tipos de dados no Guia do usuário do Amazon Simple Storage Service.

Especificar o S3 Select no código

Para usar o S3 Select em uma tabela do Hive, crie a tabela especificando com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat como o nome da classe INPUTFORMAT e especifique um valor para a propriedade s3select.format usando a cláusula TBLPROPERTIES.

Por padrão, o S3 Select está desabilitado quando você executa consultas. Habilite o S3 Select definindo s3select.filter como true em sua sessão do Hive, conforme mostrado a seguir. Os exemplos a seguir demonstram como especificar o S3 Select ao criar uma tabela do CSV subjacente e arquivos JSON e, em seguida, consultar a tabela com uma instrução simples do Select.

exemplo Instrução CREATE TABLE para tabela baseada em CSV
CREATE TABLE mys3selecttable ( col1 string, col2 int, col3 boolean ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS INPUTFORMAT 'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://path/to/mycsvfile/' TBLPROPERTIES ( "s3select.format" = "csv", "s3select.headerInfo" = "ignore" );
exemplo Instrução CREATE TABLE para tabela baseada em JSON
CREATE TABLE mys3selecttable ( col1 string, col2 int, col3 boolean ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://path/to/json/' TBLPROPERTIES ( "s3select.format" = "json" );
exemplo Instrução SELECT TABLE
SET s3select.filter=true; SELECT * FROM mys3selecttable WHERE col2 > 10;