Este tópico descreve as causas e soluções do erro Reached timeout que pode ocorrer ao usar o JindoSDK para acessar o Object Storage Service (OSS).
Mensagem de timeout
[ErrorCode] : 25201 , [ErrorType]: OSS Op Error. [ErrorMessage]: [E1008]Reached timeout=30000ms
Métodos para identificar a causa
Não é possível identificar a causa com base apenas na mensagem de timeout. Se o servidor OSS não retornar uma resposta dentro do período de timeout especificado, verifique os logs de contexto ou a pilha de exceções.
Verifique os logs de contexto com base na pilha de exceções:
O erro Reached timeout pode ocorrer ao executar os seguintes comandos para acessar o OSS:
rename aparece na mensagem de erro da pilha de exceções
-
Exemplo de mensagem de erro
java.io.IOException: rename src:oss://bucket.oss-cn-xxxx-internal.aliyuncs.com/user/hive/warehouse/tmp/hive/xxxx/c185ce78-f843-4104-8dca-f5b96fc9****/hive_xxxx_00-07-51_265_5593904247532586093-47957/_tmp.-mr-10006, dst:oss://bucket.oss-cn-xxxx-internal.aliyuncs.com/user/hive/warehouse/tmp/hive/xxx/c185ce78-f843-4104-8dca-f5b96fc9****/hive_xxxx-07-21_00-07-51_265_5593904247532586093-47957/_tmp.-mr-10006.moved ,java.io.IOException: [ErrorCode] : 25201 , [ErrorType]: OSS Op Error. [ErrorMessage]: [E1008]Reached timeout=30000ms @100.118.xx.xx:80 ERROR_CODE : 1008 -
Causa
A operação Rename do JindoSDK é implementada com base na operação CopyObject do OSS. O erro ocorre porque a otimização de fastcopy do OSS não é concluída para a operação CopyObject, fazendo com que a operação Rename do JindoSDK expire.
-
Solução
Entre em contato com o suporte técnico do OSS para confirme os requisitos de configuração de
bucket.oss-cn-xxx-internal.aliyuncs.come investigar a causa da falha na otimização interna de fastcopy.A otimização de fastcopy se aplica apenas à maioria dos objetos comuns cuja classe de armazenamento é Standard. Se a classe de armazenamento dos seus objetos OSS não for Standard ou se os objetos forem de tipos especiais, a otimização de fastcopy pode falhar, resultando em timeout da operação rename. Recomenda-se usar o JindoSDK para carregar apenas objetos comuns no OSS com a classe de armazenamento Standard. A otimização de fastcopy pode falhar nos seguintes objetos:
Objetos cuja classe de armazenamento não é Standard, como objetos com classe de armazenamento IA, Archive ou Cold Archive
Objetos do tipo AppendableObject no OSS
Objetos pequenos carregados por meio de uma operação diferente de MultiPart
Objetos que utilizam recursos como criptografia no lado do servidor
Objetos especiais, como objetos dos tipos LINK, SYMLINK e DELETEMARKER
InputStream ou Read aparece na mensagem de erro da pilha de exceções
-
Exemplo de mensagem de erro
Read from oss://xxxx with error message: [HostId]: oss-cn-zhangjiakou-internal.aliyuncs.com [ErrorMessage]: [E1008]Reached timeout=30000ms -
Causa e solução
A operação SeekRead do JindoData 4.0.0 possui um defeito que pode causar o erro Reached timeout. Se você estiver usando o JindoData 4.0.0, atualize o JindoData para a versão 4,3.X ou uma versão posterior. Para mais informações, consulte Upgrade JindoSDK in EMR clusters in the new EMR console.
O throttling de largura de banda do OSS foi ativado. Entre em contato com o suporte técnico do OSS para identificar o motivo do throttling.
OutputStream, write ou Close aparece na mensagem de erro da pilha de exceções
-
Exemplo de mensagem de erro
com.aliyun.emr.fs.oss.commit.magic.JindoOssMagicOutputStream.write(JindoOssMagicOutputStream.java:146) ... 14 more Caused by: java.io.IOException: ErrorCode : 25201 , ErrorMsg: OSS Op Error. [HostId]: oss-cn-beijing-internal.aliyuncs.com [ErrorMessage]: [E1008]Reached timeout=30000ms @100.118.xx.xx:80 ERROR_CODE : 1008 at com.alibaba.jboot.JbootFuture.get(JbootFuture.java:179) at com.alibaba.jboot.JbootOssWriter.write(JbootOssWriter.java:85)Ou
Caused by: java.io.IOException: Close stream oss://xxx error java.io.IOException: [ErrorCode] : 25201 , [ErrorType]: OSS Op Error. [HostId]: xxx [ErrorMessage]: [E1008]Reached timeout=30000ms @xxx ERROR_CODE : 1008 -
Causa e solução
Esse erro geralmente ocorre porque o throttling de largura de banda do OSS foi ativado. Entre em contato com o suporte técnico do OSS para identificar o motivo do throttling.
getFileStatus aparece na mensagem de erro da pilha de exceções
-
Causa
O versionamento está ativado para o bucket OSS.
-
Solução
Confirme se o versionamento está ou já esteve ativado para o bucket. No OSS Management Console, acesse o bucket de destino. No painel de navegação à esquerda, escolha Data Security e clique em Versioning para visualize o status do versionamento. Se o status for Enabled ou Suspended, isso indica que o versionamento foi ativado para o bucket.
Entre em contato com o suporte técnico do OSS para verificar se existem mais de 100.000 delete markers no bucket ou no caminho especificado. Se houver, limpe esses markers.
Comando rm
-
Comando rm com skipTrash
O comando rm com a opção skipTrash é executado em duas etapas: a operação getFileStatus é chamada e, em seguida, a operação exclua é chamada. Se ocorrer um erro de timeout ao executar o comando rm com a opção skipTrash, o erro se origina na chamada da operação getFileStatus. Para corrigir o erro de timeout, siga as instruções descritas em getFileStatus appears in the error message of the exception stack.
-
Comando rm sem skipTrash
O comando rm sem a opção skipTrash também é executado em duas etapas: a operação getFileStatus é chamada e, em seguida, a operação Rename é chamada. Se ocorrer um erro de timeout ao execute o comando rm sem a opção skipTrash, siga as instruções descritas em getFileStatus appears in the error message of the exception stack e rename appears in the error message of the exception stack para corrigir o erro.
skipTrash é uma opção do comando rm. Por exemplo, execute o comando hadoop fs -rm -skipTrash oss://bucket/path para excluir objetos OSS. Os objetos excluídos não são movidos para a lixeira.
Comando ls
O comando ls é executado em duas etapas: a operação getFileStatus é chamada e, em seguida, a operação listDirectory é chamada. Se ocorrer um erro de timeout ao executar o comando ls, o erro se origina na chamada da operação getFileStatus. Para corrigir o erro de timeout, siga as instruções descritas em getFileStatus appears in the error message of the exception stack.