2

我正在 Visual Studio 中的 Azure 数据湖分析中运行 USQL 作业,并出现以下脚本错误。我工作的目的是使用 Azure blob REST api 从 Azure blob 读取 xml 文件并提取数据,然后在 azure 数据湖存储中生成 csv 文件。我没有看到任何错误帮助。谁能帮助我理解这个问题?

诊断代码:223412289

严重性:错误

组件:JobManager_User

来源:用户

ERRORID: VertexRetriedTooMany

消息:顶点重试次数过多

描述:顶点 SV1_Extract[0][0] 重试了 24 次。

分辨率:不适用

帮助链接:不适用

详细信息:顶点 SV1_Extract[0][0].v23 {B0AF5C27-21A5-4011-8044-09A4AB0642C4} 失败错误:函数不正确。

更新 - 有关我的用例的更多信息:

我正在尝试在我的 USQL 作业中使用“自定义用户定义的运算符”,因为我认为使用此功能可以轻松解决我的用例。

我的输入 CSV 文件放置在数据湖存储中,其中包含放置在 Azure blob 上的 XML 文件的一些值和路径。

在 USQL 作业中,我正在从 CSV 读取 XML 文件路径(使用 USQL),然后从 Azure blob 存储读取这些 XML 文件并提取值(使用 c# 后面的代码)并将我的输入文件与 XML 值合并并在 Azure 中生成新的 CSV 文件数据湖存储(再次使用 USQL)。

更新 2

我还尝试使用安装了 REST API 的 Windows Azure 存储 sdk 来访问后面代码中的 blob,并在运行作业时出现以下错误:

  "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)"

请注意,相同的代码在本地运行良好,所以我认为我访问 blob 的代码没有任何问题。

4

2 回答 2

2

回答更新的信息。

您的代码在本地工作的原因是本地执行当前没有施加服务的 YARN 层当前施加的外部调用限制。

YARN 层不允许您的代码通过 http 或 REST 调用进行访问。出于安全原因,不允许容器访问外部资源。

所以我的建议是做两件事之一(两者都要求您将 blob 存储帐户注册为附加数据源):

  1. 编写一个脚本生成脚本(使用 U-SQL、Powershell、Python 或您最喜欢的脚本生成语言),该脚本将在 wasb: URI 上使用您的 blob 存储数据的 EXTRACT。

  2. 如果文件具有相同的架构并根据某种路径模式组织,您还可以使用文件集模式来引用一组您不知道确切文件名的文件。

请注意,U-SQL 当前希望能够在编译时解析所有文件名。

不过,我会在无用的错误消息上提交一些错误。如果您想请求一个功能,让您在读取文件时更加灵活,我鼓励您前往http://aka.ms/adlfeedback提交带有用例场景的请求。这样,其他人就可以对您的建议进行投票,这有助于我们在规划中优先考虑该功能。

于 2015-12-30T20:38:01.940 回答
2

如果顶点由于某些系统或用户错误而失败,通常会出现此错误消息。在这种情况下,错误消息不是很有帮助(功能不正确)。

您如何阅读 XML 文件?您提到您正在使用 Azure Blob REST API。这大概就是原因。

如果您想从 Windows Azure Blob Stores 中读取文件,您可以使用您的 ADLA 帐户注册该存储(例如,通过 Azure 门户,您可以在 ADLA 帐户中添加更多存储)。然后您可以使用 wasb URI 方案。一个例子在这里: https ://github.com/MicrosoftBigData/usql/blob/master/Examples/AmbulanceDemos/AmbulanceDemos/1-Ambulance-Unstructured%20Data/1.2-CopyDriversFromWASBToADL.usql

然后,您可以在此处使用我们的 XML/JSON 示例库中的 XML 提取器:https ://github.com/MicrosoftBigData/usql/tree/master/Examples/DataFormats

使用后,请随时向我发送有关示例的反馈。

如果这不能解决您的问题,请告诉我。

于 2015-12-30T01:40:44.220 回答