自承载集成运行时 Windows 容器中缺少 jvm.dll

And*_*osa 1 java windows azure-data-factory windows-container

我正在启动一个包含自托管集成运行时的 Windows 容器映像(在此处提供我的 MS ),以便能够在本地情况下使用 ADF。它运行得很顺利,直到我需要使用 Parquet 文件。

当我将输出指向 .parquet 时,出现数据工厂任务失败,指出集成运行时容器中缺少 Java。

ErrorCode=JreNotFound,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Java Runtime Environment cannot be found on the Self-hosted Integration Runtime machine. It is required for parsing or writing to Parquet/ORC files. Make sure Java Runtime Environment has been installed on the Self-hosted Integration Runtime machine.,Source=Microsoft.DataTransfer.Common,''Type=System.DllNotFoundException,Message=Unable to load DLL 'jvm.dll': The specified module could not be found.

我采取了修改build.ps1文件的方式来在容器镜像创建过程中安装和配置依赖项。以下是采取的步骤:

  • 安装 Microsoft Visual C++ 2010 Service Pack 1(此处

  • 安装 Microsoft OpenJDK 17.0.6 LTS - 64 位 MSI 提供的 JDK(此处

  • 手动设置 JAVA_HOME 环境变量:(setx -m JAVA_HOME "C:\Program Files\Microsoft\jdk-17.0.6.10-hotspot"就我而言,SHIR 将在注册表中查找 JRE 位置,如果找不到,它将查找 JAVA_HOME 环境变量)。

Java 似乎运行良好,因为当我运行时java -version它会返回以下输出。

openjdk version "17.0.6" 2023-01-17 LTS
OpenJDK Runtime Environment Microsoft-7209853 (build 17.0.6+10-LTS)
OpenJDK 64-Bit Server VM Microsoft-7209853 (build 17.0.6+10-LTS, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好,但我不断收到上面提到的错误。我尝试安装 JRE7、JRE8、配置注册表项,但似乎没有任何效果。

小智 5

到目前为止,我们一直在使用 Java 17 (Microsoft OpenJDK),不幸的是,最新的自动更新破坏了该发行版中 jvm.dll 的加载。

对于我们来说,以下组合有效:

集成运行时:5.26.8431.1 + Java(采用):jdk8u362-b09

确保在安装时选择“设置 JAVA_HOME 变量”和/或“JavaSoft 注册表项”功能。另外不要忘记之后重新启动 IR:

C:\Program Files\Microsoft Integration Runtime\5.0\Shared\diacmd.exe -r
Run Code Online (Sandbox Code Playgroud)

微软声明:

解决方法:受此问题影响的客户可以使用以下替代方案之一:

选项 1:降级到 SHIR 版本 5.25.8410.1,其中适用 Microsoft 版本的 OpenJDK。 选项 2:如果您希望保留较新版本的 SHIR,请改用 Oracle JDK(例如 jdk-8u341-windows-x64)或其他提供商(如 Eclipse Temurin)的 OpenJDK 实现。