2015-12-29 5 views
2

Je suis en train d'exécuter un travail USQL dans Azure Data Lake Analytics à partir de Visual Studio et d'obtenir une erreur de script en dessous. Le but de mon travail est de lire le fichier xml à partir du blob Azure en utilisant Azure blob REST api et d'extraire les données, puis de produire le fichier csv dans Azure Data Lake Store. Je ne vois aucune aide par erreur. Quelqu'un peut-il m'aider à comprendre ce problème?Vertex réessayé trop de fois une erreur s'est produite lors de l'exécution du travail analytique Azure Data Lake

DIAGNOSTICCODE: 223412289

SEVERITY: Error

COMPONENT: JobManager_User

SOURCE: User

ERRORID: VertexRetriedTooMany

MESSAGE: Vertex retried too many times

DESCRIPTION: Vertex SV1_Extract[0][0] retried 24 times.

RESOLUTION: N/A

HELPLINK: N/A

DETAILS: Vertex SV1_Extract[0][0].v23 {B0AF5C27-21A5-4011-8044-09A4AB0642C4} failed Error: Incorrect function.

MISE À JOUR - Plus d'informations sur mon cas d'utilisation:

Je suis en train d'utiliser « opérateurs définis par l'utilisateur personnalisés » dans mon travail de USQL parce que je pense que mon cas d'utilisation peut être facilement résolu en utilisant cette fonction .

Mon fichier CSV d'entrée est placé dans le magasin de données lacustres qui contient des valeurs et des chemins pour les fichiers XML placés sur le blob Azure. Dans le job USQL, je lis des chemins de fichiers XML à partir de CSV (en utilisant USQL) puis je lis ces fichiers XML à partir du stockage blob Azure et j'extrais des valeurs (en utilisant le code derrière C#) et fusionne mon fichier d'entrée avec des valeurs XML. Fichier CSV dans Azure Data Lake Store (à nouveau avec USQL).

Update 2

J'ai aussi essayé d'utiliser sdk de stockage Windows Azure insted de l'API REST pour accéder blob dans le code derrière et a obtenu l'erreur suivante sur l'emploi en cours d'exécution:

"errorId": "E_RUNTIME_USER_UNHANDLED_EXCEPTION_FROM_USER_CODE", 
    "message": "An unhandled exception from user code has been reported", 
    "description": "Unhandled exception from user code: \"The remote name could not be resolved: 'xxxxx.blob.core.windows.net'\"\nThe details includes more information including any inner exceptions and the stack trace where the exception was raised.", 
    "resolution": "Make sure the bug in the user code is fixed.", 
    "helpLink": "", 
    "details": "==== Caught exception Microsoft.WindowsAzure.Storage.StorageException\n\n at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext)\r\n\n at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.DownloadRangeToStream(Stream target, Nullable`1 offset, Nullable`1 length, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext)\r\n\n at USQLAppForLogs.LogTable.GetValuesFromBlob(String bloburi)\r\n\n at USQLAppForLogs.LogTable.Process(IRow input, IUpdatableRow output)\r\n\n at ScopeEngine.SqlIpProcessor<Extract_0_Data0,SV1_Extract_out0>.GetNextRow(SqlIpProcessor<Extract_0_Data0\\,SV1_Extract_out0>* , SV1_Extract_out0* output) in d:\\data\\ccs\\jobs\\f030ffdf-fc4a-4780-aec5-9067dde49e85_v0\\sqlmanaged.h:line 1821\r\n\n at RunAndHandleClrExceptions(function<void __cdecl(void)>* code)\n\n==== Inner exception System.Net.WebException\n\nThe remote name could not be resolved: 'xxxxx.blob.core.windows.net'\n\n at System.Net.HttpWebRequest.GetResponse()\r\n\n at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext)" 

Notez que même code fonctionne bien localement donc je ne pense pas qu'il y ait un problème dans le code où j'accède blob.

Répondre

2

Ce message d'erreur se produit normalement si le sommet échoue en raison d'une erreur du système ou de l'utilisateur. Dans ce cas, le message d'erreur n'est pas très utile (fonction incorrecte).

Comment lisez-vous le fichier XML? Vous mentionnez que vous utilisez l'API Azure Blob REST. C'est probablement la cause. Si vous voulez lire un fichier à partir de Windows Azure Blob Stores, vous pouvez enregistrer le magasin avec votre compte ADLA (par exemple, à travers le portail Azure, dans le compte ADLA, vous pouvez ajouter plus de magasins). Ensuite, vous pouvez utiliser le schéma URI wasb. Un exemple est ici: https://github.com/MicrosoftBigData/usql/blob/master/Examples/AmbulanceDemos/AmbulanceDemos/1-Ambulance-Unstructured%20Data/1.2-CopyDriversFromWASBToADL.usql

Vous pouvez par exemple utiliser les extracteurs XML dans nos XML/exemples de bibliothèques JSON disponibles ici: https://github.com/MicrosoftBigData/usql/tree/master/Examples/DataFormats

Ne hésitez pas à me faire parvenir des commentaires sur l'échantillon une fois que vous l'utilisiez.

Si cela ne résout pas votre problème, s'il vous plaît faites le moi savoir.

+0

Merci pour votre réponse. C'est une nouvelle information pour moi; Cependant, j'essaie d'utiliser des "opérateurs personnalisés définis par l'utilisateur" dans mon travail USQL parce que je pense que mon cas d'utilisation peut facilement être résolu en utilisant cette fonctionnalité. S'il vous plaît voir ma question avec plus de détails sur mon cas d'utilisation. – Jamil

2

Répondre à l'information mise à jour.

La raison pour laquelle votre code fonctionne localement est que l'exécution locale n'impose pas actuellement les restrictions d'appels externes que la couche YARN du service impose actuellement.

La couche YARN ne permet pas à votre code d'atteindre via les appels http ou REST. Les conteneurs ne sont pas autorisés à accéder aux ressources externes pour des raisons de sécurité.

Donc, ma suggestion est de faire l'une des deux choses (à la fois exiger que vous enregistrez le compte magasin de blob en tant que source de données supplémentaires):

  1. écrire un script de génération de script (en utilisant U-SQL, Powershell, Python, ou votre langage de génération de script préféré) qui utilisera l'EXTRACT sur le wasb: URI pour vos données de magasin de blob. Si les fichiers ont le même schéma et sont organisés en fonction d'un modèle de chemin, vous pouvez également utiliser des modèles de fichiers pour faire référence à un ensemble de fichiers dont vous ne connaissez pas le nom de fichier exact.

Notez que U-SQL s'attend actuellement à pouvoir résoudre tous les noms de fichiers au moment de la compilation.

Je vais cependant signaler quelques bogues sur les messages d'erreur inutiles. Et si vous souhaitez demander une fonctionnalité qui vous donne plus de flexibilité dans la lecture des fichiers, je vous encourage à aller au http://aka.ms/adlfeedback pour déposer une requête avec un scénario de cas d'utilisation. De cette façon, d'autres peuvent donner leur vote à votre suggestion et cela nous aide à prioriser la fonctionnalité dans notre planification.

+0

Donc, c'était un problème. J'ai déjà ajouté mon magasin blob dans le compte analytique Data Lake. Je pense que votre première solution ne fonctionnera pas car U-SQL ne résout pas les noms de fichiers lors de l'exécution. Pourriez-vous s'il vous plaît expliquer votre deuxième solution? J'ai également ajouté une suggestion sur votre page de commentaires. [link] (https://feedback.azure.com/forums/327234-azure-data-lake/suggestions/11265501-usql-doit- être-pour-résoudre-fichier-names-at-run-t) – Jamil

+0

La première solution suggère de lire les fichiers et d'utiliser les noms de fichiers pour créer le script. Ainsi, le script connaîtra les noms des fichiers lors de la compilation du second script. Vous devez soumettre deux scripts ou écrire un script PowerShell (ou un autre programme) qui crée le script contenant les noms de fichiers, puis soumettre le script généré. –

+0

Je pense que ce n'est pas une meilleure solution, car j'ai une énorme collection de fichiers XML stockés sur Azure blob. Mon fichier CSV contenant des noms de fichiers a une taille supérieure à 1 Go. La solution suggérée produira un script énorme (quelques Go) qui ne semble pas être un choix approprié. Qu'est-ce que tu penses? – Jamil