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:
Conecte-se ao banco de dados de metastore do hive para seu cluster.
Faça o backup de
TBLS
eTABLE_PARAMS
tabelas 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;
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
Em Advanced hive-site e Advanced hivemetastore-site, 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 e, se não, é seguro removê-lo.
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:
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.
- 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:
- 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_t1
CTAS. - Solte a tabela gerenciada usando
drop table m_t1
. - Desative o ACID usando as configurações sugeridas.
- Crie m_t1 novamente e copie dados da tabela externa usando o comando
create table m_t1 select * from e_t1
CTAS . - Solte 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
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:
Defina manualmente a permissão de pasta como 757 ou 777, para permitir que o usuário hive grave no diretório.
Altere o "Hive Authorization Manager" de
org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider
paraorg.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
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
viaCustom hive-site
Ambari UIReinicie 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.