Compartilhar via


Guia de solução de problemas de migração de cargas de trabalho do Hive do HDInsight 3.6 ao HDInsight 4.0

Este artigo fornece respostas a alguns dos problemas mais comuns enfrentados pelos clientes ao migrar cargas de trabalho do Hive do HDInsight 3.6 para o HDInsight 4.0.

Reduzir a latência durante a execução de DESCRIBE TABLE_NAME

Solução alternativa:

  • Aumente o número máximo de objetos (tabelas/partições) que podem ser recuperados do metastore em um lote. Defina um número grande para ele (o padrão é 300) até atingir os níveis de latência satisfatórios. Quanto maior o número, menos viagens de ida e volta o servidor de metastore do Hive precisará fazer, mas isso também pode exigir maior requisito de memória no lado do cliente.

    hive.metastore.batch.retrieve.max=2000

  • Reinicie o Hive e todos os serviços obsoletos.

Não é possível consultar o arquivo de texto gzip se skip.header.line.count e skip.footer.line.count estiverem definidos para a tabela

O problema foi corrigido na Interactive Query 4.0, mas não na Interactive Query 3.1.0

Solução alternativa:

  • Crie uma tabela sem usar "skip.header.line.count"="1" e "skip.footer.line.count"="1" e depois crie a exibição da tabela original que exclui a linha de cabeçalho/rodapé na consulta.

Não é possível usar caracteres Unicode

Solução alternativa:

  1. Conete-se ao banco de dados do metastore do Hive para o cluster.

  2. Faça o backup das tabelas TBLS e TABLE_PARAMS usando o seguinte comando:

        select * into tbls_bak from tbls;
        select * into table_params_bak from table_params;
    
  3. Altere manualmente os tipos de coluna afetados para nvarchar(max).

        alter table TABLE_PARAMS alter column PARAM_VALUE nvarchar(max);
        alter table TBLS alter column VIEW_EXPANDED_TEXT nvarchar(max) null;    
        alter table TBLS alter column VIEW_ORIGINAL_TEXT nvarchar(max) null;
    

CTAS (Create Table As Select) cria uma nova tabela com o mesmo UUID

O Hive 3.1 (HDInsight 4.0) oferece um UDF interno para gerar UUIDs exclusivos. O método UUID () do Hive gera IDs exclusivas mesmo com CTAS. Use conforme mostrado a seguir.

create table rhive as
select uuid() as UUID
from uuid_test

O formato de saída do trabalho do Hive é diferente do HDInsight 3.6

Isso é causado pela diferença do WebHCat(Templeton) no HDInsight 3.6 e no HDInsight 4.0.

  • API do REST do Hive - adicionar arg=--showHeader=false -d arg=--outputformat=tsv2 -d

  • SDK do .NET - inicializar argumentos de HiveJobSubmissionParameters

    List<string> args = new List<string> { { "--showHeader=false" }, { "--outputformat=tsv2" } };
                var parameters = new HiveJobSubmissionParameters
                {
                    Query = "SELECT clientid,market from hivesampletable LIMIT 10",
                    Defines = defines,
                    Arguments = args
                };
    

Reduzir a latência de criação de tabela interna do Hive

  1. Em Hive-site avançado e Hivemetastore-site avançado, exclua o valor org.apache.hive.hcatalog.listener.DbNotificationListener de hive.metastore.transactional.event.listeners.

  2. Se hive.metastore.event.listeners tiver um valor, remova-o.

  3. DbNotificationListener é necessário apenas se você usar comandos REPL. Caso contrário, é seguro removê-lo.

    Reduza a latência da tabela interna no HDInsight 4.0.

Alterar local da tabela padrão do Hive

Essa alteração de comportamento é intencional no HDInsight 4.0 (Hive 3.1). O principal motivo dessa alteração é o controle de permissão de arquivo.

Para criar tabelas externas em um local personalizado, especifique o local na instrução CREATE TABLE.

Desabilitar o ACID no HDInsight 4.0

É recomendável habilitar o ACID no HDInsight 4.0. A maioria dos aprimoramentos recentes no Hive, tanto de funcionamento quanto de desempenho, são disponibilizados apenas para tabelas ACID.

Etapas para desabilitar o ACID no HDInsight 4.0:

  1. Altere as seguintes configurações de Hive em Ambari:

    hive.strict.managed.tables=false
    hive.support.concurrency=false; 
    hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;
    hive.enforce.bucketing=false;
    hive.compactor.initiator.on=false;
    hive.compactor.worker.threads=0;
    hive.create.as.insert.only=false;
    metastore.create.as.acid=false;
    

Observação

Se hive.strict.managed.tables for definido como o <Valor padrão> verdadeiro, a criação de tabelas gerenciadas e de não transação falhará com o seguinte erro:

java.lang.Exception: java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. Table <Table name> failed strict managed table checks due to the following reason: Table is marked as a managed table but is not transactional.
  1. Reinicie o serviço Hive.

Importante

A Microsoft recomenda o compartilhamento do mesmo armazenamento/dados entre as tabelas gerenciadas pelo Hive HDInsight 3.6 e HDInsight 4.0. Esse cenário não tem suporte.

  • Normalmente, as configurações acima devem ser definidas antes de criar tabelas do Hive no cluster do HDInsight 4.0. Não é recomendado desabilitar o ACID após a criação de tabelas gerenciadas. Isso pode causar perda de dados ou resultados inconsistentes. Portanto, é recomendável definir as configurações uma vez quando você criar um novo cluster e não as alterar depois.

  • Desabilitar o ACID depois de criar as tabelas é arriscado. Mas, caso você queira fazer isso, siga as etapas abaixo para evitar uma possível perda de dados ou inconsistência:

    1. Crie uma tabela externa com o mesmo esquema e copie os dados da tabela gerenciada original usando o comando CTAS create external table e_t1 select * from m_t1.
    2. Descarte a tabela gerenciada usando drop table m_t1.
    3. Desabilite o ACID usando as configurações sugeridas.
    4. Crie m_t1 novamente e copie os dados da tabela externa usando o comando CTAS create table m_t1 select * from e_t1.
    5. Remova a tabela externa usando drop table e_t1.

Verifique se todas as tabelas gerenciadas estão convertidas em tabelas externas e removidas antes de desabilitar o ACID. Além disso, compare o esquema e os dados após cada etapa para evitar discrepâncias.

Criar tabela externa do Hive com a permissão 755

Esse problema pode ser resolvido com uma das duas opções a seguir:

  1. Defina manualmente a permissão de pasta como 757 ou 777 para permitir que o usuário do Hive grave no diretório.

  2. Altere o "Gerenciador de autorização do Hive" de org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider para org.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnly.

O MetaStoreAuthzAPIAuthorizerEmbedOnly desabilita efetivamente as verificações de segurança porque o metastore do Hive não está integrado ao HDInsight 4.0. No entanto, isso pode levar a outros problemas. Use essa opção com cuidado.

Erros de permissão no trabalho do Hive após a atualização para o HDInsight 4.0

  • No HDInsight 4,0, todas as formas de cluster com componentes do Hive são configuradas com um novo provedor de autorização:

    org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider

  • As permissões de arquivo HDFS devem ser atribuídas ao usuário do Hive para o arquivo que está sendo acessado. A mensagem de erro fornece os detalhes necessários para resolver o problema.

  • Você também pode alternar para o provedor MetaStoreAuthzAPIAuthorizerEmbedOnly usado em clusters do Hive do HDInsight 3.6.

    org.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnly

    Defina a autorização como MetaStoreAuthzAPIAuthorizerEmbedOnly.

Não é possível consultar a tabela com OpenCSVSerde

A leitura de dados da tabela com formato csv pode gerar uma exceção, como:

MetaException(message:java.lang.UnsupportedOperationException: Storage schema reading not supported)

Solução alternativa:

  • Adicione a configuração metastore.storage.schema.reader.impl=org.apache.hadoop.hive.metastore.SerDeStorageSchemaReader a Custom hive-site por meio da interface do usuário do Ambari.

  • Reinicie todos os serviços obsoletos do Hive.

Próximas etapas

Se você não encontrou seu problema ou não conseguiu resolver seu problema, visite um dos seguintes canais para obter mais suporte:

  • Obtenha respostas de especialistas do Azure por meio do Suporte da Comunidade do Azure.

  • Conecte-se com @AzureSupport – a conta oficial do Microsoft Azure para aprimorar a experiência do cliente. Como se conectar à comunidade do Azure para os recursos certos: respostas, suporte e especialistas.

  • Se precisar de mais ajuda, poderá enviar uma solicitação de suporte do portal do Azure. Selecione Suporte na barra de menus ou abra o hub Ajuda + suporte. Para obter informações mais detalhadas, consulte Como criar uma solicitação de Suporte do Azure. O acesso ao Gerenciamento de assinaturas e ao suporte de cobrança está incluído na sua assinatura do Microsoft Azure, e o suporte técnico é fornecido por meio de um dos Planos de suporte do Azure.