【问题标题】:How to run Elasticsearch 6 on an Apple Silicon Mac?如何在 Apple Silicon Mac 上运行 Elasticsearch 6?
【发布时间】:2021-10-22 22:06:32
【问题描述】:

为了开发应用程序,我需要在 Apple Silicon Mac 上运行 Elasticsearch 6。

我尝试使用 Docker 运行它。阅读Docker Desktop for Apple silicon,我已经安装了Rosetta2:

softwareupdate --install-rosetta

并添加了--platform linux/amd64 命令行选项。

跑步:

docker run -d --platform linux/amd64 --name elasticsearch  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.18

我收到关于AVX instruction set的警告:

OpenJDK 64-Bit Server VM warning: UseAVX=2 is not supported on this CPU, setting it to UseAVX=0

所以我添加了命令行选项:-e "ES_JAVA_OPTS=-XX:UseAVX=0",但我仍然获得:

[2021-08-22T00:06:20,727][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [unknown] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: org.elasticsearch.bootstrap.BootstrapException: java.io.IOException: Cannot run program "/usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller": error=0, Failed to exec spawn helper: pid: 131, exit value: 1
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.8.18.jar:6.8.18]
    at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:116) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.8.18.jar:6.8.18]
Caused by: org.elasticsearch.bootstrap.BootstrapException: java.io.IOException: Cannot run program "/usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller": error=0, Failed to exec spawn helper: pid: 131, exit value: 1
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:167) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-6.8.18.jar:6.8.18]
    ... 6 more
Caused by: java.io.IOException: Cannot run program "/usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller": error=0, Failed to exec spawn helper: pid: 131, exit value: 1
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1142) ~[?:?]
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[?:?]
    at org.elasticsearch.bootstrap.Spawner.spawnNativeController(Spawner.java:118) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Spawner.spawnNativeControllers(Spawner.java:86) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:165) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-6.8.18.jar:6.8.18]
    ... 6 more
Caused by: java.io.IOException: error=0, Failed to exec spawn helper: pid: 131, exit value: 1
    at java.lang.ProcessImpl.forkAndExec(Native Method) ~[?:?]
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:313) ~[?:?]
    at java.lang.ProcessImpl.start(ProcessImpl.java:244) ~[?:?]
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1109) ~[?:?]
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) ~[?:?]
    at org.elasticsearch.bootstrap.Spawner.spawnNativeController(Spawner.java:118) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Spawner.spawnNativeControllers(Spawner.java:86) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:165) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.8.18.jar:6.8.18]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-6.8.18.jar:6.8.18]
    ... 6 more

然后我查看Machine learning settings in Elasticsearchedit ,它指出:

机器学习使用 SSE4.2 指令,因此它仅适用于 CPU 支持 SSE4.2 的机器。如果您在旧硬件上运行 Elasticsearch,则必须禁用机器学习(通过将 xpack.ml.enabled 设置为 false)。

所以我添加了命令行选项:-e"xpack.ml.enabled=false",Elasticsearch 现在启动,但日志中没有任何内容,并且它不响应请求。

我的问题是:如何在 Apple Silicon Mac 上运行 Elasticsearch 6?

【问题讨论】:

    标签: macos docker elasticsearch apple-silicon


    【解决方案1】:

    这通常不受支持,但there is a report https://hub.docker.com/r/webhippie/elasticsearch/ 可能会起作用。

    如果您还没有充分的升级理由,也许在 M1 上运行它可能会有所帮助?原生支持(无 Rosetta)has been added in 7.12.

    【讨论】:

    • webhippie/elasticsearch 为我工作。谢谢!该镜像最新版本的ES是v6.4.0
    【解决方案2】:

    找到这个github issue #81383

    添加-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" 使用7.16.1 修复了崩溃。

    希望对你有所帮助?

    【讨论】:

      【解决方案3】:

      我刚遇到这个问题,我发现你可以使用 curl 指令here 运行 elasticsearch,但想使用 docker。

      为此,我组织了这样的文件:

      .
      ├── Dockerfile-elastic
      └── elasticsearch.yml
      

      Dockerfile:

      # Dockerfile-elastic.yml
      FROM arm64v8/openjdk:8-jdk-buster
      
      WORKDIR /usr
      
      # add a non root user
      RUN useradd -m elasticuser
      
      # Download extras
      RUN apt update
      RUN apt install -y curl nano
      
      # Download elasticsearch
      RUN curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.23.tar.gz
      RUN tar -xvf elasticsearch-6.8.23.tar.gz
      
      # Add config
      ADD elasticsearch.yml /usr/elasticsearch-6.8.23/config/elasticsearch.yml
      
      RUN chown -R elasticuser: .
      USER elasticuser
      
      ENV JAVA_HOME=/usr/local/openjdk-18/bin/java
      ENV discovery.type=single-node
      ENV xpack.security.enabled: false
      ENV xpack.ml.enabled: false
      
      RUN cd elasticsearch-6.8.23/bin
      RUN chown -R elasticuser: elasticsearch-6.8.23
      
      EXPOSE 9200 9300
      CMD cd /usr/elasticsearch-6.8.23/bin/ && ./elasticsearch
      

      elasticsearch.yml:

      # elasticsearch.yml
      xpack.security.enabled: false
      xpack.ml.enabled: false
      
      http.host: 0.0.0.0
      transport.host: 0.0.0.0
      

      命令:

      构建:docker build -f Dockerfile-elastic -t elastic .

      运行:docker run -p 9200:9200 -p 9300:9300 elastic

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-02
        • 1970-01-01
        • 2021-06-04
        • 2021-05-08
        • 2021-03-11
        • 2022-01-06
        • 2021-03-16
        • 2022-09-30
        相关资源
        最近更新 更多