docker - 在树莓派 3 上安装 elasticsearch 7

标签 docker elasticsearch installation raspberry-pi3

我正在尝试按照 installation tutorial 在我的 Raspberry Pi 3 上安装最新的 Elasticsearch ,但是我发现绝对

关于我的系统的一些信息:

$ sudo apt-get update
$ sudo apt-get upgrade

$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian

$ java -version
openjdk version "9-Raspbian"
OpenJDK Runtime Environment (build 9-Raspbian+0-9b181-4bpo9rpt1)
OpenJDK Server VM (build 9-Raspbian+0-9b181-4bpo9rpt1, mixed mode)

// I tried also with openjdk-java-8

我试过的
  • 通过 sudo-apt
  • 安装
    $ sudo apt-get install elasticsearch
    ....
    Preparing to unpack .../elasticsearch_1.7.5-1_all.deb .
    ....
    
    $ ./usr/share/elasticsearch/bin/elasticsearch
    
    xception in thread "main" java.lang.NoClassDefFoundError: org/elasticsearch/common/jackson/dataformat/yaml/snakeyaml/error/YAMLException
        at org.elasticsearch.common.jackson.dataformat.yaml.YAMLFactory._createParser(YAMLFactory.java:426)
        at org.elasticsearch.common.jackson.dataformat.yaml.YAMLFactory.createParser(YAMLFactory.java:327)
        at org.elasticsearch.common.xcontent.yaml.YamlXContent.createParser(YamlXContent.java:90)
        at org.elasticsearch.common.settings.loader.XContentSettingsLoader.load(XContentSettingsLoader.java:45)
        at org.elasticsearch.common.settings.loader.YamlSettingsLoader.load(YamlSettingsLoader.java:46)
        at org.elasticsearch.common.settings.ImmutableSettings$Builder.loadFromStream(ImmutableSettings.java:982)
        at org.elasticsearch.common.settings.ImmutableSettings$Builder.loadFromUrl(ImmutableSettings.java:969)
        at org.elasticsearch.node.internal.InternalSettingsPreparer.prepareSettings(InternalSettingsPreparer.java:110)
        at org.elasticsearch.bootstrap.Bootstrap.initialSettings(Bootstrap.java:144)
        at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:215)
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32)
    Caused by: java.lang.ClassNotFoundException: org.elasticsearch.common.jackson.dataformat.yaml.snakeyaml.error.YAMLException
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
        ... 11 more
    
    
  • elasticsearch downloads并获取 tar 文件
  • /elasticsearch-7.1.1/bin/elasticsearch
    
    ./elasticsearch-7.1.1/bin/elasticsearch-env: line 69: /home/pi/elasticsearch-7.1.1/jdk/bin/java: cannot execute binary file: Exec format error
    
  • docker 路径
  • $ docker --version
    Docker version 18.04.0-ce, build 3d479c0
    
    $ docker image ls
    REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
    docker.elastic.co/elasticsearch/elasticsearch   7.1.1               b0e9f9f047e6        4 weeks ago         894MB
    
    $ docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.1.1
    standard_init_linux.go:190: exec user process caused "exec format error"
    

    有没有人设法在 Raspberry Pi 3 上安装 Elasticsearch 7?有没有办法解决上面列出的问题?

    最佳答案

    不幸的是,与所有以前的版本不同,ElasticSearch 7 的 deb 包是 only packaged for Intel architectures .我相信依赖项是 JVM 和机器学习模块,它们可以关闭,但必须从 deb 包中的文件手动重新打包或安装。 (如果我不做这件事,我敢肯定,其他人最终会这样做)。

    除非您特别需要 ES7 功能,否则最简单的方法是安装最后一个版本 6,它将安装在 Raspbian 上。在这里:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.0.deb

    您需要在/etc/elasticsearch/jvm.options 中将使用的默认内存从 1G 更改为 512M,并在/etc/elasticsearch/elasticsearch.yml ( xpack.ml.enabled: false ) 中关闭机器学习。

    虽然它将使用 Raspbian 上的默认 Java 运行时 openjre 运行,但它的运行速度比同等 Intel 上慢约 30 倍。我从来没有深入了解原因,但是如果您安装 Oracle JRE 就可以了:
    apt-get install oracle-java8-jdk
    请注意 Raspbian/Debian 存储库(如 apt-get install 中)是版本 1 而不是 v7 - 古老,避免使用。

    在 Raspberry Pi 上广泛使用 ES6(及其前身)时,我没有发现任何与英特尔不同的工作方式,尽管他们声明他们不支持英特尔以外的任何东西。

    然而,RPi 难以运行整个 ELK(Elasticsearch、Logstatsh、Kibana)堆栈(我确实尝试过):它确实没有足够的内存。具有 4GB 的 RPi 4 可能会做得更好,我没有尝试过,或者分布在三个独立的 Pi 上。我确实让 ELK 5 运行,但在使用几天后它耗尽了内存,我根本无法让 ELK 6 运行。

    关于docker - 在树莓派 3 上安装 elasticsearch 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56704124/

    相关文章:

    docker-compose 规模容器警告

    docker - 如何使用 gitlab-ci 在 docker 内构建 archlinux pkgbuild

    docker - 容器中的 MLFlow 未映射到主机端口

    docker - java -jar lib/kvstore.jar ping-使用IPAddress时出现ConnectException

    windows - Inno Setup 在安装时在目标目录中创建的临时 tmp 文件

    elasticsearch - 丢失的数据节点返回后,ElasticSearch会做什么

    elasticsearch - 德鲁伊与 Elasticsearch

    elasticsearch - 在 Elasticsearch 中使用带有bool的query_string查询导致解析异常

    windows - NSIS 安装程序 - 定义安装程序和系统 x32/x64

    mysql - 通过命令行在 MySQL (Windows 8.1) 上安装 'Employees Sample Database'