M1苹果硅mac上的Dynamodb本地设置

Posted

技术标签:

【中文标题】M1苹果硅mac上的Dynamodb本地设置【英文标题】:Dynamodb local setup on M1 apple silicon mac 【发布时间】:2021-06-12 13:37:50 【问题描述】:

我使用 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.DownloadingAndRunning.html 进行了 dynamodb 的本地设置

我可以使用以下命令 java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb 启动实例,但是当我尝试执行其他任何操作时,会出现以下错误。

2021 年 3 月 15 日下午 2:10:28 com.almworks.sqlite4java.Internal 日志 警告:[sqlite] 无法打开 DB[15]:com.almworks.sqlite4java.SQLiteException:[-91] 无法加载库:java.lang.UnsatisfiedLinkError:/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib :dlopen(/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib,1):找不到合适的图像。发现: /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 2021 年 3 月 15 日 2:10:28 PM com.almworks.sqlite4java.Internal 日志 严重:[sqlite] SQLiteQueue [shared-local-instance.db]:错误运行作业队列 com.almworks.sqlite4java.SQLiteException:[-91] 无法加载库:java.lang.UnsatisfiedLinkError:/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:dlopen(/Users/ahsanejaz/Downloads/dynamodb_local_latest/ DynamoDBLocal_lib/libsqlite4java-osx.dylib, 1):找不到合适的图像。发现: /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 在 com.almworks.sqlite4java.SQLite.loadLibrary(SQLite.java:97) 在 com.almworks.sqlite4java.SQLiteConnection.open0(SQLiteConnection.java:1441) 在 com.almworks.sqlite4java.SQLiteConnection.open(SQLiteConnection.java:282) 在 com.almworks.sqlite4java.SQLiteConnection.open(SQLiteConnection.java:293) 在 com.almworks.sqlite4java.SQLiteQueue.openConnection(SQLiteQueue.java:464) 在 com.almworks.sqlite4java.SQLiteQueue.queueFunction(SQLiteQueue.java:641) 在 com.almworks.sqlite4java.SQLiteQueue.runQueue(SQLiteQueue.java:623) 在 com.almworks.sqlite4java.SQLiteQueue.access$000(SQLiteQueue.java:77) 在 com.almworks.sqlite4java.SQLiteQueue$1.run(SQLiteQueue.java:205) 在 java.base/java.lang.Thread.run(未知来源) 引起:java.lang.UnsatisfiedLinkError: /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib: dlopen(/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib, 1): 没有合适的找到的图像。发现: /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 在 java.base/java.lang.ClassLoader$NativeLibrary.load0(本机方法) 在 java.base/java.lang.ClassLoader$NativeLibrary.load(未知来源) 在 java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(未知来源) 在 java.base/java.lang.ClassLoader.loadLibrary0(未知来源) 在 java.base/java.lang.ClassLoader.loadLibrary(未知来源) 在 java.base/java.lang.Runtime.load0(未知来源) 在 java.base/java.lang.System.load(未知来源) 在 com.almworks.sqlite4java.Internal.tryLoadFromPath(Internal.java:340) 在 com.almworks.sqlite4java.Internal.loadLibraryX(Internal.java:117) 在 com.almworks.sqlite4java.SQLite.loadLibrary(SQLite.java:95) ... 9 更多 2021 年 3 月 15 日 2:10:28 PM com.almworks.sqlite4java.Internal 日志 警告:[sqlite] SQLiteQueue[shared-local-instance.db]:异常停止,重生 在 3000 毫秒内

这个问题是否与新的 M1 Apple Silicon 架构有关?有什么解决方法吗?

【问题讨论】:

【参考方案1】:

我能够运行 DynamoDB,安装 java 版本 x86-64 架构而不是 arm64,并从 Rosetta 终端启动它

java --version 
openjdk 16.0.1 2021-04-20
OpenJDK Runtime Environment Zulu16.30+15-CA (build 16.0.1+9)
OpenJDK 64-Bit Server VM Zulu16.30+15-CA (build 16.0.1+9, mixed mode, sharing)

https://www.azul.com/downloads/zulu-community/?version=java-16-sts&os=macos&architecture=x86-64-bit&package=jre

【讨论】:

基本上你创建了一个 Rosetta 终端 osxdaily.com/2020/11/18/…。然后你安装x86 64-bitJava。然后您使用 x86 Java 在 Rosetta 终端内运行您的 DynamoDB Local。您可以通过常规的arm 终端连接到它。 当我安装英特尔x86 64-bit 时也可以在本地使用。使用 ARM 64 位我不能。 我刚刚在 M1 macbook 上遇到了这个问题。为 MacOS x64 安装官方 Java JDK 解决了这个问题。 与用户@C.D. 相同。 .将 Mac M1 与无服务器一起使用并且出现上述错误。为 MacOX x64 安装的 Java JDK 修复了它。【参考方案2】:

我在通过 brew 安装 dynamodb-local 时遇到了同样的问题。显然,正在使用的 sqlite4java 库中没有 arm 版本。例如我得到:

Caused by: java.lang.UnsatisfiedLinkError: /opt/homebrew/Caskroom/dynamodb-local/latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib: dlopen(/opt/homebrew/Caskroom/dynamodb-local/latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib, 1): no suitable image found.  Did find:
    /opt/homebrew/Caskroom/dynamodb-local/latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib: no matching architecture in universal wrapper

有趣的是,使用 docker preview version 的 docker 映像对我来说工作正常,例如使用来自 Deploying DynamoDB Locally on Your Computer 的 docker compose 文件(在 Docker 选项卡上)。

【讨论】:

谢谢,docker 镜像也对我有用。【参考方案3】:

您可以使用新发布的 Apple Silicon (M1) 库。将其复制到您正在查看的文件夹中应该可以修复错误:

io.github.ganadist.sqlite4java:libsqlite4java-osx-aarch64:1.0.392

您可以使用sqlite4java.library.path 系统属性指定自定义本机库路径:

System.setProperty("sqlite4java.library.path", "./native-libs")

【讨论】:

以上是关于M1苹果硅mac上的Dynamodb本地设置的主要内容,如果未能解决你的问题,请参考以下文章

苹果M1/M2 Mac正式支持运行Win11

M1 mac 上的 Android 平台工具

微软统一所有平台的Edge代码库;大学教授向Linux提交漏洞代码致学校被拉黑;苹果M1版Mac的销量超过英特尔版 | 前端周报

黑苹果折腾失败,M1芯来了

解决苹果 M1 Mac 安装系统后创建用户失败的方法

矿工杀红眼!苹果M1 Mac被破解:能挖币了