如何作为 Azure 数据工厂的一部分解压缩和执行批处理服务作业
How do I Unzip and Execute a Batch Service job as part of Azure Data Factory
Azure 数据工厂可以将自定义活动作为批处理服务作业执行。这些作业可以 运行 来自存储帐户中的 .exe(和关联的依赖项),这些文件在执行之前被复制。
存储帐户中可以使用的文件有限制:
Total size of resourceFiles cannot be more than 32768 characters
解决方案似乎是将文件压缩到存储帐户中并作为命令的一部分解压缩。 This post 建议 运行 将 Azure 数据工厂中的批处理服务命令设置为:
Unzip.exe [myZipFilename] && MyExeName.exe [cmdLineArgs]
运行 这在 Windows 10 机器上本地工作正常。将此设置为批处理服务自定义 activity 上的命令参数(使用云服务 Windows Server 2019 OS Image App Pool)会导致:
caution: filename not matched: &&
感觉像是缺少一些基本的东西,但我尝试了各种排列组合,但无法让它发挥作用。
分享一些可能发生的可能性,我同意缺少一些小东西,如果您想分享您正在尝试的确切命令行,请随时分享。
可能导致此行为的一些想法:
请从批处理的角度在引号下尝试您的命令行,例如:cmd /c "Unzip.exe [myZipFilename] && MyExeName.exe [cmdLineArgs]"
确保您的文件存在,即一种可能性是:最后命令试图 运行 一个带有 &&
的空字符串,即 cmd /c "unzip.exe "empty" && ...
希望以上 2 个修复之一,或者随时添加更多细节等。其他
在不完全了解 ADF 在 Windows 批处理服务节点上运行自定义 Activity 命令的上下文的情况下,我更改了我的设置以避免期望 Unzip.exe 存在(看起来不要在 cmd /c "Unzip.exe"
下 运行 而不是仅使用 Unzip.exe
作为命令)。
现在我支持自定义 activity 的存储帐户内容有:
- executable.zip(我的 .NET Core 控制台应用程序为 windows 发布了所有依赖项)
- unzip.exe(取自我本地机器上的 Git Bash)
- 包括 msys-2.0.dll 和 msys-bz2-1.dll 依赖项
那么ADF中的命令是:
cmd /c "Unzip.exe executable-with-deps.zip && executable.exe"
我遇到了同样的问题并用一个简短的 powershell 脚本解决了它,它提取了我的 zip 并启动了我的程序。通用脚本看起来像(称为 unzipandrun.ps1):
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)][String]$zipFile,
[Parameter(Mandatory = $true)][String]$executable,
[Parameter(Mandatory = $true)][String]$prm
)
#######
# Unzip
#######
Add-Type -AssemblyName System.IO.Compression.FileSystem
function Unzip
{
param([string]$zipfile, [string]$outpath)
[System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}
"Start Unzip $zipFile" | Write-Host
Unzip $zipFile $pwd
###########
# Start exe
###########
"Start $executable $prm" | Write-Host
$cmd = "& $executable $prm"
Invoke-Expression $cmd
因此,如果我想在 azure 批处理上使用参数 /t 123 启动 myapp.exe,我将开始:
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "unzipandrun.ps1 '/t 123'"
另一个选项,它不需要随 zip 文件一起复制其他文件:
cmd /c "tar -xf MyExe.zip & MyExe.exe"
tar -xf MyExe.zip & MyExe.exe
给出错误,但 cmd /c "tar -xf MyExe.zip & MyExe.exe"
在 windows 10
上工作正常
Azure 数据工厂可以将自定义活动作为批处理服务作业执行。这些作业可以 运行 来自存储帐户中的 .exe(和关联的依赖项),这些文件在执行之前被复制。
存储帐户中可以使用的文件有限制:
Total size of resourceFiles cannot be more than 32768 characters
解决方案似乎是将文件压缩到存储帐户中并作为命令的一部分解压缩。 This post 建议 运行 将 Azure 数据工厂中的批处理服务命令设置为:
Unzip.exe [myZipFilename] && MyExeName.exe [cmdLineArgs]
运行 这在 Windows 10 机器上本地工作正常。将此设置为批处理服务自定义 activity 上的命令参数(使用云服务 Windows Server 2019 OS Image App Pool)会导致:
caution: filename not matched: &&
感觉像是缺少一些基本的东西,但我尝试了各种排列组合,但无法让它发挥作用。
分享一些可能发生的可能性,我同意缺少一些小东西,如果您想分享您正在尝试的确切命令行,请随时分享。
可能导致此行为的一些想法:
请从批处理的角度在引号下尝试您的命令行,例如:
cmd /c "Unzip.exe [myZipFilename] && MyExeName.exe [cmdLineArgs]"
确保您的文件存在,即一种可能性是:最后命令试图 运行 一个带有
&&
的空字符串,即cmd /c "unzip.exe "empty" && ...
希望以上 2 个修复之一,或者随时添加更多细节等。其他
在不完全了解 ADF 在 Windows 批处理服务节点上运行自定义 Activity 命令的上下文的情况下,我更改了我的设置以避免期望 Unzip.exe 存在(看起来不要在 cmd /c "Unzip.exe"
下 运行 而不是仅使用 Unzip.exe
作为命令)。
现在我支持自定义 activity 的存储帐户内容有:
- executable.zip(我的 .NET Core 控制台应用程序为 windows 发布了所有依赖项)
- unzip.exe(取自我本地机器上的 Git Bash)
- 包括 msys-2.0.dll 和 msys-bz2-1.dll 依赖项
那么ADF中的命令是:
cmd /c "Unzip.exe executable-with-deps.zip && executable.exe"
我遇到了同样的问题并用一个简短的 powershell 脚本解决了它,它提取了我的 zip 并启动了我的程序。通用脚本看起来像(称为 unzipandrun.ps1):
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)][String]$zipFile,
[Parameter(Mandatory = $true)][String]$executable,
[Parameter(Mandatory = $true)][String]$prm
)
#######
# Unzip
#######
Add-Type -AssemblyName System.IO.Compression.FileSystem
function Unzip
{
param([string]$zipfile, [string]$outpath)
[System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}
"Start Unzip $zipFile" | Write-Host
Unzip $zipFile $pwd
###########
# Start exe
###########
"Start $executable $prm" | Write-Host
$cmd = "& $executable $prm"
Invoke-Expression $cmd
因此,如果我想在 azure 批处理上使用参数 /t 123 启动 myapp.exe,我将开始:
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "unzipandrun.ps1 '/t 123'"
另一个选项,它不需要随 zip 文件一起复制其他文件:
cmd /c "tar -xf MyExe.zip & MyExe.exe"
tar -xf MyExe.zip & MyExe.exe
给出错误,但 cmd /c "tar -xf MyExe.zip & MyExe.exe"
在 windows 10