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:
Conete-se ao banco de dados do metastore do Hive para o cluster.
Faça o backup das tabelas
TBLS
eTABLE_PARAMS
usando o seguinte comando:select * into tbls_bak from tbls; select * into table_params_bak from table_params;
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
Em Hive-site avançado e Hivemetastore-site avançado, exclua o valor
org.apache.hive.hcatalog.listener.DbNotificationListener
dehive.metastore.transactional.event.listeners
.Se
hive.metastore.event.listeners
tiver um valor, remova-o.DbNotificationListener é necessário apenas se você usar comandos REPL. Caso contrário, é seguro removê-lo.
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:
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.
- 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:
- 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
. - Descarte a tabela gerenciada usando
drop table m_t1
. - Desabilite o ACID usando as configurações sugeridas.
- Crie m_t1 novamente e copie os dados da tabela externa usando o comando CTAS
create table m_t1 select * from e_t1
. - Remova a tabela externa usando
drop table e_t1
.
- Crie uma tabela externa com o mesmo esquema e copie os dados da tabela gerenciada original usando o comando CTAS
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:
Defina manualmente a permissão de pasta como 757 ou 777 para permitir que o usuário do Hive grave no diretório.
Altere o "Gerenciador de autorização do Hive" de
org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider
paraorg.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
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
aCustom 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.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de