我正在尝试按照 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-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-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 --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/