Resolução de problemas IBM Watson® Discovery Cartucho para implementações do IBM Cloud Pak® for Data
Aprenda maneiras de solucionar problemas e abordar assuntos que você pode encontrar enquanto utiliza o produto.
IBM Cloud Pak for Data
Essas informações se aplicam apenas a instâncias de IBM Watson® Discovery que são instaladas em IBM Cloud Pak® for Data. Para obter dicas de resolução de problemas sobre a inclusão de dados em implementações instaladas e gerenciadas, consulte Resolução de problemas de problemas.
As informações neste tópico sugerem passos que você pode tomar para investigar questões que possam ocorrer. Para obter informações sobre questões conhecidas e seus workarounds por versão, veja Problemas Conhecidos.
Pods de Minio entram em um loop de reboot durante a instalação ou atualização
-
Erro:
Cannot find volume "export" to mount into container "ibm-minio"é exibido durante uma instalação ou atualização de Discovery. Ao verificar o status dos pods do Minio usando o comando,oc get pods -l release=wd-minio -o widee, em seguida, verificar os logsMinio operatorusando os comandos,oc get pods -A | grep ibm-minio-operatore, em seguida,oc logs -n <namespace> ibm-minio-operator-XXXXX, você verá um erro semelhante ao seguinte nos logs:ibm-minio/templates/minio-create-bucket-job.yaml failed: jobs.batch "wd-minio-discovery-create-bucket" already exists) and failed rollback: failed to replace object" -
Causa: Um trabalho que cria um balde de armazenamento para Minio e depois é excluído depois que ele se conclui, não está sendo excluído adequadamente.
-
Solução: Complete as etapas a seguir para verificar se um trabalho incompleto de
create-bucketpara Minio existe. Se for assim, exclua o job incompleto para que o trabalho possa ser recriado e possa então executar com sucesso.-
Confira a tarefa do Minio usando o seguinte comando:
oc get jobs | grep 'wd-minio-discovery-create-bucket' -
Se um job existente for listado na resposta, exclua a tarefa usando o seguinte comando:
oc delete job $(oc get jobs -oname | grep 'wd-minio-discovery-create-bucket') -
Verifique se todos os pods do Minio começam com sucesso usando o seguinte comando:
oc get pods -l release=wd-minio -o wide
-
Uma mensagem No space left on device é exibida no log
Se o pod wd-ibm-elasticsearch-es-server-client reiniciar repetidamente e então relatar o estado Crashloopbackoff com a mensagem No space left on device escrita no log para o pod, então a questão pode ser
uma falta de memória no pod. Siga os passos para solucionar problemas de problemas de memória ou entre em contato com o Suporte IBM.
Uma mensagem java.lang.OutOfMemoryError: Java heap space é exibida no log
Ao indexar um grande conjunto de documentos que possuem múltiplos enriquecimentos aplicados a eles, o nó do trabalhador pode ficar sem espaço. Para tratar do assunto, primeiro determine qual pod está fora da memória, completando as seguintes etapas:
Se o status do documento não puder ser promovido a Processing, verifique o status dos pods inlet, outlet e converter.
-
Execute o comando a seguir:
oc get pod -l 'tenant=wd,run in (inlet,outlet,converter)' -
Se qualquer um dos pods não estiver mostrando um status
Running, reinicie o pod com falha usando o seguinte comando:oc delete pod <pod_name> -
Caso contrário, abra a página Gerenciar coleções>{collection name}>Atividade. Verifique a seção Avisos e erros em uma olhada para a mensagem,
OutOfMemory happened during conversion. Please reconsider size of documents.Se mostrada, use o seguinte comando para aumentar o tamanho da memória para o conversor:oc patch wd wd --type=merge \ --patch='{"spec":{"ingestion":{"converter":b{"maxHeapMemory":"10240m","resources":{"limits":{"memory":"10Gi"}}}}}}'Ajuste o valor de
maxHeapMemorye a memória do contêiner de acordo com seus recursos de cluster. -
Após o pod
converterreiniciar com sucesso, clique em Reprocessar a partir da guia Atividade.
Se os documentos estiverem presos no status Processing e não puderem ser promovidos ao status Available para uma coleção, complete as seguintes etapas:
-
Verifique o status de Hadoop usando o seguinte comando:
oc get pod -l 'tenant=wd,run in (hdp-rm,hdp-worker)'onde
lé uma minúslista L para lista. -
Se qualquer um dos pods não estiver mostrando um status
Running, reinicie o pod com falha usando o seguinte comando:oc delete pod <pod_name> -
Verifique se qualquer um dos nós do trabalhador Hadoop tem memória insuficiente usando o seguinte comando para procurar a mensagem
OOM when allocating:oc logs -l tenant=wd,run=hdp-worker -c logger --tail=-1 \ | grep "OOM when allocating" -
Se uma correspondência for encontrada, use o seguinte comando para corrigir o recurso:
oc patch wd wd --type=merge \ --patch='{"spec":{"orchestrator":{"docproc":{"pythonAnalyzerMaxMemory":"8g"}}}}'O valor máximo permitido para
pythonAnalyzerMaxMemoryé12g. O valor padrão é6g. Aumente o valor gradualmente, como em incrementos de 2g em um momento de acordo com seus recursos de cluster. -
Verifique se qualquer um dos nós do trabalhador Hadoop tem memória insuficiente usando o seguinte comando para procurar a mensagem
OutOfMemoryError:oc logs -l tenant=wd,run=hdp-worker -c logger --tail=-1 \ | grep "OutOfMemoryError" -
Se uma correspondência for encontrada, verifique os valores da variável de ambiente atual e os recursos de memória do nó do trabalhador Hadoop usando os seguintes comandos:
-
Para verificar a variável
"DOCPROC_MAX_MEMORY"no contêiner do orquestrador:oc exec `oc get po -l run=orchestrator -o 'jsonpath={.items[0].metadata.name}'` env \ | grep DOCPROC_MAX_MEMORY -
Para verificar a variável
"YARN_NODEMANAGER_RESOURCE_MEMORY_MB"no contêiner do nó do trabalhador Hadoop:oc exec `oc get po -lrun=hdp-worker -o 'jsonpath={.items[0].metadata.name}'` \ -c hdp-worker -- env | grep YARN_NODEMANAGER_RESOURCE_MEMORY_MB -
Para verificar o recurso de memória do contêiner
hdp-worker:oc get po -l run=hdp-worker -o 'jsonpath=requests are \ {.items[*].spec.containers[?(.name=="hdp-worker")].resources.requests.memory}, \ limits are {.items[*].spec.containers[?(.name=="hdp-worker")].resources.limits.memory}'
-
-
Patch os recursos de variáveis de ambiente gradualmente usando o seguinte comando:
oc patch wd `oc get wd -o 'jsonpath={.items[0].metadata.name}'` \ --type=merge --patch='{"spec":{"orchestrator":{"docproc":{"maxMemory":"4g"}}, \ "hdp":{"worker":{"nm":{"memoryMB":12000}, "resources":{"limits":{"memory":"20Gi"}, \ "requests":{"memory":"20Gi"}}}}}}'Os valores padrão para os recursos são os seguintes:
-
docproc.maxMemory: 2gAumento de incrementos de 2g de cada vez.
-
nm.memoryMB: 10,240Comece a partir de 12.000 e aumente em incrementos de 2.000 de cada vez.
-
memory requests/limits: 13Gi/18GiAumento de incrementos de 2Gi de cada vez.
-
-
Verifique se os pods do Hadoop reiniciam com sucesso usando o seguinte comando:
oc get pods -l 'tenant=wd,run in (orchestrator,hdp-worker)' -
Confirme se as novas configurações foram aplicadas depois que você patchou o cluster.
-
Se o pod não for reiniciado, verifique se o recurso foi atualizado utilizando-se o seguinte comando:
oc get wd wd -o yaml -
Verifique o status de Elasticsearch verificando separadamente o cliente e os nós de dados.
-
No nó cliente, execute o seguinte comando para verificar se ocorreu uma exceção fora de memória:
oc logs -l tenant=wd,ibm-es-data=False,ibm-es-master=False \ -c elasticsearch --tail=-1 | grep "OutOfMemoryError" -
Se uma mensagem de erro for encontrada, excluindo as mensagens INFO, aumente o recurso de memória usando o seguinte comando:
oc patch wd wd --type=merge \ --patch='{"spec":{"elasticsearch":{"clientNode":{"maxHeap":"896m","resources":{"limits":{"memory":"1792Mi"}}}}}}' -
Depois de executar este comando, o pod do cliente Elasticsearch é reiniciado cerca de 20 minutes minutos depois. Monitore a "AGE" do pod usando o seguinte comando:
oc get pod -l tenant=wd,ibm-es-data=False,ibm-es-master=False -
Depois que o pod for reiniciado com sucesso, verifique o novo valor de
ES_JAVA_OPTSe o limite de memória do contêiner usando o seguinte comando:oc describe $(oc get po -l tenant=wd,ibm-es-data=False,ibm-es-master=False -o name) -
No nó de dados, execute o seguinte comando para verificar se ocorreu uma exceção de memória de saída de memória:
oc logs -l tenant=wd,ibm-es-data=True,ibm-es-master=False \ -c elasticsearch --tail=-1 | grep "OutOfMemoryError" -
Se uma mensagem de erro for encontrada, excluindo as mensagens INFO, aumente o recurso de memória usando o seguinte comando:
oc patch wd wd --type=merge \ --patch='{"spec":{"elasticsearch":{"dataNode":{"maxHeap":"6g","resources":{"limits":{"memory":"10Gi"},"requests":{"memory":"8Gi"}}}}}}' -
Depois de executar este comando, o pod do cliente Elasticsearch é reiniciado cerca de 20 minutes minutos depois. Monitore a "AGE" do pod usando o seguinte comando:
oc get pod -l tenant=wd,ibm-es-data=True,ibm-es-master=False -
Após o pod ser reiniciado com sucesso, verifique o novo valor de
ES_JAVA_OPTSe os pedidos / limite de memória do contêiner usando o seguinte comando:oc describe $(oc get po -l tenant=wd,ibm-es-data=True,ibm-es-master=False -o name)Para ambos os nós (cliente e dados), configure o
resources.limits.memoryigual a2 * maxHeap.Se o pod não puder ser reiniciado após 30 mins minutos aplicando o comando
oc patch, colete logs para compartilhar com o Suporte IBM usando o seguinte comando:oc logs -l control-plane=ibm-es-controller-manager --tail=-1
Para ambos os problemas, em que o status do documento não pode ser promovido a Processing e onde os documentos estão presos no status Processing, se você estiver usando o armazenamento Portworx, você poderá verificar
se o disco Elasticsearch está cheio.
-
Execute o seguinte comando para verificar se o disco Elasticsearch está cheio:
oc logs -l tenant=wd,run=elastic,ibm-es-master=True \ -c elasticsearch --tail=100000|grep 'disk watermark' -
Se o log mostrar uma mensagem como
watermark exceeded on x-data-1, significa que o disco no nó que está especificado está cheio e você precisa aumentar o tamanho do disco, usando o seguinte comando:oc patch pvc $(oc get pvc -l tenant=wd,run=elastic,ibm-es-data=True,ibm-es-master=False \ -o jsonpath='{.items[N].metadata.name}') \ -p '{"spec": {"resources": {"requests":{"storage": "60Gi"}}}}'onde
Ndenota o número do nó de dados que foi informado a partir do log.Por exemplo, se o log menciona
data-1no nome do nó, então o comando a utilizar é:oc patch pvc $(oc get pvc -l tenant=wd,run=elastic,ibm-es-data=True,ibm-es-master=False \ -o jsonpath='{.items[1].metadata.name}') -p '{"spec": {"resources": {"requests":{"storage": "60Gi"}}}}'
Configurando o limite de shard no Discovery para o Cloud Pak for Data
Na versão Discovery 4.0, há um limite para o número de fragmentos que podem permanecer abertos em um cluster. Nas instâncias de desenvolvimento, o limite é de 1.000 shards abertos e, nas instâncias de produção, o limite é dois nós de dados, o que é igual a 2.000 shards abertos ou 1.000 shards abertos por nó de dados. Depois de atingir qualquer limite, não será possível criar mais nenhum projeto e coleções em seu cluster e, se tentar criar um novo projeto e uma coleção, você receberá uma mensagem de erro.
Esse limite se deve ao fato de que, ao instalar a versão Discovery 4.0, a versão Elasticsearch 7.10.2 é executada automaticamente em seus clusters. Como essa versão do Elasticsearch é executada em seus clusters, uma nova configuração de estabilidade do cluster torna-se disponível, que limita a 1.000 shards abertos para cada nó de dados do Elasticsearch.
Se não for possível criar novos projetos e coleções e receber erros, primeiro verifique o status de seu cluster do Elasticsearch e o número de shards nesse cluster. Considere aumentar o número de nós de dados em seu cluster para suportar mais shards. Esse método é ideal para maximizar o desempenho. No entanto, um número aumentado de nós usa mais memória. Se o número de shards atingir o limite, também é possível aumentar o limite em um nó de dados. Para obter mais informações sobre como aumentar o limite de shard em um nó, consulte Aumentando o limite de shard.
Esse limite de 1.000 shards se aplica a versões do Discovery que são 4.0 ou superior.
Aumentando o limite de shard
-
Efetue login em seu cluster do Discovery.
-
Acesse seu nó de dados.
-
Insira o comando a seguir:
oc exec -it $(oc get pod \ -l app=elastic,ibm-es-data=True -o jsonpath='{.items[0].metadata.name}') -- bash -
Digite o seguinte comando, substituindo o endereço
<>e o conteúdo interno pelo número da porta:curl -X POST http://localhost:<port_number>/_cluster/health?prettySe você não souber qual é o número da sua porta, insira o comando a seguir para localizá-lo:
oc get pod -l app=elastic,ibm-es-data=True -o json \ | jq .items[].spec.containers[].ports[0].containerPort | head -n 1`O comando
POSTde curl retorna um valor paraactive_primary_shards. Se você tiver um nó de dados que tenha um valor maior que 1.000 ou se tiver dois nós de dados que tenham um valor maior que 2.000, deverá aumentar o limite de shard para criar novos projetos e coleções em seu cluster.Se aumentar esse limite, o cluster se tornará menos estável, porque ele contém um número maior de shards.
-
Digite o seguinte comando para aumentar o número de shards, substituindo
<port_number>pelo número da porta e<total_shards_per_node>e<max_shards_per_node>pelo novo limite de shards que você deseja atribuir a um nó:curl -X POST http://localhost:<port_number>/_cluster/settings \ -d '{"persistent": {"cluster.routing.allocation.total_shards_per_node":<total_shards_per_node>, \ "cluster.max_shards_per_node":<max_shards_per_node>} }' \ -XPUT -H 'Content-Type:application/json'Depois de aumentar o limite de shard, será possível criar mais projetos e coleções em seu cluster.
Limpando um estado de bloqueio
IBM Cloud Pak for Data Somente instalado: Quando o pod gateway é reiniciado, ele executa um plug-in de validação de banco de dados que verifica se há alterações
e aplica os conjuntos de alterações mais recentes ao banco de dados compartilhado. Se o pod for reiniciado enquanto essa verificação estiver em andamento, o plug-in poderá permanecer em um estado de bloqueio, impedindo a inicialização do serviço.
Pode ser necessária uma intervenção manual no banco de dados para limpar o bloqueio.
Se a API do Discovery não ficar on-line ou se o pod gateway-0 parecer estar em um loop de falha constante, você pode tentar verificar os logs do servidor do Liberty para o serviço de API localizado aqui: /opt/ibm/wlp/output/wdapi/logs/messages.log
Os registros indicariam se o Liquibase está falhando e não consegue ser executado. Se o sistema estiver bloqueado, você poderá ver algo semelhante ao seguinte:
[11/7/19 5:07:51:491 UTC] 0000002f liquibase.executor.jvm.JdbcExecutor I SELECT LOCKED FROM public.databasechangeloglock WHERE ID=1
[11/7/19 5:07:51:593 UTC] 0000002f liquibase.lockservice.StandardLockService I Waiting for changelog lock....
[11/7/19 5:08:01:601 UTC] 0000002f liquibase.executor.jvm.JdbcExecutor I SELECT LOCKED FROM public.databasechangeloglock WHERE ID=1
[11/7/19 5:08:02:091 UTC] 0000002f liquibase.lockservice.StandardLockService I Waiting for changelog lock....
[11/7/19 5:08:12:097 UTC] 0000002f liquibase.executor.jvm.JdbcExecutor I SELECT LOCKED FROM public.databasechangeloglock WHERE ID=1
[11/7/19 5:08:12:197 UTC] 0000002f liquibase.lockservice.StandardLockService I Waiting for changelog lock....
[11/7/19 5:08:22:203 UTC] 0000002f liquibase.executor.jvm.JdbcExecutor I SELECT ID,LOCKED,LOCKGRANTED,LOCKEDBY FROM public.databasechangeloglock WHERE ID=1
[11/7/19 5:08:22:613 UTC] 0000002f com.ibm.ws.logging.internal.impl.IncidentImpl I FFDC1015I: An FFDC Incident has been created: "org.jboss.weld.exceptions.DeploymentException: WELD-000049: Unable to invoke public void liquibase.integration.cdi.CDILiquibase.onStartup() on liquibase.integration.cdi.CDILiquibase@7f02a07 com.ibm.ws.container.service.state.internal.ApplicationStateManager 31" at ffdc\_19.11.07\_05.08.22.0.log
É possível desbloquear manualmente o plug-in. Se você tiver Discovery 2.1.4 ou mais cedo, digite o seguinte comando no banco de dados postgres que o pod gateway-0 está olhando:
psql dadmin
UPDATE DATABASECHANGELOGLOCK SET LOCKED=FALSE, LOCKGRANTED=null, LOCKEDBY=null where ID=1;
Se você tiver Discovery 2.2.0 ou posterior, digite o seguinte comando no banco de dados postgres que o pod gateway-0 está olhando para:
oc exec -it wd-discovery-postgres-0 -- bash -c 'env PGPASSWORD="$PG_PASSWORD" psql "postgresql://$PG_USER@$STKEEPER_CLUSTER_NAME-proxy-service:$STKEEPER_PG_PORT/dadmin" -c "UPDATE DATABASECHANGELOGLOCK SET LOCKE
D=FALSE, LOCKGRANTED=null, LOCKEDBY=null where ID=1"'
Se você puder reiniciar o pod gateway, tudo deverá ser retomado normalmente.
Configurações de variáveis de ambiente para o Smart Document Understanding
Há duas variáveis de ambiente que precisam ser ajustadas para o Smart Document Understanding no IBM Watson® Discovery versão 2.1.0. Isso foi resolvido na versão 2.1.1. Consulte Liberação 2.1.1, de 24 de janeiro de 2020.
SDU_PYTHON_REST_RESPONSE_TIMEOUT_MS
SDU_YOLO_TIMEOUT_SEC
Ambas devem ser configuradas para seu respectivo valor hour. Esses valores devem ser definidos no site <release-name>-watson-discovery-hdp ConfigMap.
Os valores devem ser:
SDU_PYTHON_REST_RESPONSE_TIMEOUT_MS Deve ser configurado para 3600000
SDU_YOLO_TIMEOUT_SEC Deve ser configurado para 3600
Esses valores devem ser configurados quando o software é instalado ou reinstalado.
Mensagens de erro de resolução de problemas
Se você receber as mensagens de erro que estão relacionadas a tempos limite e à memória insuficiente para seus enriquecimentos, será possível inserir os comandos a seguir para mudar o as configurações de tempo limite e de memória para resolver potencialmente essas mensagens de erro:
-
Mensagem de aviso:
<enrichment_name>: Document enrichment timed outAção sugerida: aumentar o tempo limite de processamento do documento. Insira o comando a seguir para aumentar o tempo limite padrão de 10 para 20 minutos:
oc patch wd wd --type=merge \ --patch='{"spec": {"orchestrator": {"docproc": {"defaultTimeoutSeconds": 1200 } } } }' -
Mensagem de aviso:
<enrichment_name>: Document enrichment failed due to lack of memoryAção sugerida: aumentar o limite de memória do contêiner do orquestrador. Insira o comando a seguir para aumentar o limite de memória de 4 Gi para 6 Gi:
oc patch wd wd --type=merge \ --patch='{"spec": {"orchestrator": {"resources": {"limits": {"memory": "6Gi"} } } } }' -
Mensagem de aviso:
Indexing request timed outAção sugerida: aumente o tempo limite para enviar por push os documentos para o Elasticsearch. Insira o comando a seguir para aumentar o tempo limite padrão de 10 para 20 minutos:
oc patch wd wd --type=merge \ --patch='{"spec": {"shared": {"elastic": {"publishTimeoutSeconds": 1200 } } } }'