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

Este artigo fornece respostas para alguns dos problemas mais comuns que os clientes enfrentam ao migrar cargas de trabalho do Hive do HDInsight 3.6 para o HDInsight 4.0.

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

Solução:

  • Aumente o número máximo de objetos (tabelas/partições) que podem ser recuperados do metastore em um lote. Defina-o para um grande número (o padrão é 300) até que níveis de latência satisfatórios sejam atingidos. Quanto maior o número, menos viagens de ida e volta são necessárias para o servidor de metastore do Hive, mas também pode causar maior exigência 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 compactado se skip.header.line.count e skip.footer.line.count estiverem definidos para a tabela

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

Solução:

  • Crie uma tabela sem usar "skip.header.line.count"="1" e "skip.footer.line.count"="1"e, em seguida, crie uma vista a partir da tabela original que exclui a linha de cabeçalho/rodapé na consulta.

Não é possível utilizar carateres Unicode

Solução:

  1. Conecte-se ao banco de dados de metastore do hive para seu cluster.

  2. Faça o backup de TBLS e TABLE_PARAMS tabelas 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;
    

Criar tabela como selecionar (CTAS) cria uma nova tabela com o mesmo UUID

O Hive 3.1 (HDInsight 4.0) oferece um UDF integrado para gerar UUIDs exclusivos. O método Hive UUID() gera IDs exclusivas mesmo com CTAS. Você pode usá-lo da seguinte maneira.

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

O formato de saída do trabalho do Hive difere do HDInsight 3.6

É causada pela diferença do WebHCat(Templeton) entre o HDInsight 3.6 e o HDInsight 4.0.

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

  • SDK do .NET - inicializar args 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 tabelas internas do Hive

  1. Em Advanced hive-site e Advanced hivemetastore-site, 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 e, se não, é seguro removê-lo.

    Reduce internal table latency in HDInsight 4.0.

Alterar o local da tabela padrão do Hive

Essa alteração de comportamento é por design no HDInsight 4.0 (Hive 3.1). A principal razão dessa alteração é para fins de controle de permissão de arquivo.

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

Desativar o ACID no HDInsight 4.0

Recomendamos ativar o ACID no HDInsight 4.0. A maioria dos aprimoramentos recentes, funcionais e de desempenho, no Hive são disponibilizados apenas para tabelas ACID.

Passos para desativar o ACID no HDInsight 4.0:

  1. Altere as seguintes configurações de hive no 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;
    

Nota

Se hive.strict.managed.tables estiver definido como true <Default value>, a criação de uma tabela gerenciada e não transacionável 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 não compartilhar os mesmos dados/armazenamento com tabelas gerenciadas pelo HDInsight 3.6 e HDInsight 4.0 Hive. É um cenário sem suporte.

  • Normalmente, as configurações acima devem ser definidas antes mesmo de criar qualquer tabela do Hive no cluster HDInsight 4.0. Não devemos desativar o ACID depois que as tabelas gerenciadas forem criadas. Isso poderia causar perda de dados ou resultados inconsistentes. Portanto, é recomendável defini-lo uma vez quando você criar um novo cluster e não alterá-lo mais tarde.

  • Desativar o ACID depois de criar tabelas é arriscado, no entanto, caso você queira fazê-lo, siga as etapas abaixo para evitar possíveis perdas ou inconsistências de dados:

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

Certifique-se de que todas as tabelas gerenciadas sejam convertidas em tabelas externas e descartadas antes de desativar o ACID. Além disso, compare o esquema e os dados após cada etapa para evitar qualquer discrepância.

Criar tabela externa do Hive com permissão 755

Esse problema pode ser resolvido por 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 hive grave no diretório.

  2. Altere o "Hive Authorization Manager" de org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider para org.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnly.

MetaStoreAuthzAPIAuthorizerEmbedOnly desativa efetivamente as verificações de segurança porque o metastore do Hive não está incorporado no HDInsight 4.0. No entanto, pode trazer outros problemas potenciais. Tenha cuidado ao usar esta opção.

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 MetaStoreAuthzAPIAuthorizerEmbedOnly provedor usado em clusters Hive do HDInsight 3.6.

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

    Set authorization to MetaStoreAuthzAPIAuthorizerEmbedOnly.

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

A leitura de dados da tabela de csv formato pode gerar exceções como:

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

Solução:

  • Adicionar configuração metastore.storage.schema.reader.impl=org.apache.hadoop.hive.metastore.SerDeStorageSchemaReader via Custom hive-site Ambari UI

  • Reinicie todos os serviços de colmeia obsoletos

Próximos passos

Se não viu o problema ou não conseguiu resolvê-lo, visite um dos seguintes canais para obter mais suporte:

  • Obtenha respostas de especialistas do Azure através do Suporte da Comunidade do Azure.

  • Conecte-se com o @AzureSupport - a conta oficial do Microsoft Azure para melhorar a experiência do cliente. Ligar a comunidade do Azure aos recursos certos: respostas, suporte e especialistas.

  • Se precisar de mais ajuda, você pode 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 suporte para Gestão de Subscrições e faturação está incluído na sua subscrição do Microsoft Azure e o Suporte Técnico é disponibilizado através de um dos Planos de Suporte do Azure.