動作環境:centos7の下のdocker
Elasticsearchバージョン:6.5.1(最新バージョンは使用されません。最新バージョンは7.Xです)
jdkバージョン:1.8(長すぎる、約8バージョン)
イメージをインストールします:docker pull docker.io/elasticsearch:6.5.1
esコンテナを起動します。
docker run -d -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms512M -Xmx512M" --name es6.5.1 docker.io/elasticsearch:6.5.1
esコンテナを起動する傾向がある問題:
問題1:メモリオーバーフロー、マウント後に出口(1)が表示されます。このステータスは、メモリの問題である可能性があります。
解決:
ミラーを起動するときに、-e ES_JAVA_OPTS = "-Xms512M -Xmx512M"を追加して、メモリサイズを指定します。上記の正しいステートメントなど。
问题二:最大仮想メモリ領域vm.max_map_count [xxx]が低すぎるため、少なくとも[xxxx]に増やしてください
この問題はログから取得されます。これは基本的に、elasticsearchユーザーが所有するメモリ権限が小さすぎることを意味します。少なくともxxxxが必要です。
解決:
最初に:rootユーザーに切り替えて、構成sysctl.confを変更します
vi /etc/sysctl.conf
2番目:ファイルの最後に次の構成を追加します。
vm.max_map_count=xxxx(此处的xxxx是你自己要填写的数值)
3番目:sysctl -p(指定されたファイルからシステムパラメータをロードします。指定されていない場合は、/ etc / sysctl.confからロードします)
次に、elasticsearchを再起動して正常に開始します
问题三:初期ヒープサイズ[268435456]が最大ヒープサイズ[1073741824]と等しくない; これにより、サイズ変更が一時停止し、mlockallがヒープ全体をロックできなくなる可能性があります
一般的に、メモリサイズに一貫性がなく、いくつかの問題が発生します。
解決策: -e ES_JAVA_OPTS = "-Xms512M -Xmx512M"コマンドを使用する場合は、-Xmsパラメーターと-Xmxパラメーターを同じサイズに設定します。
ESとJAVAを使用してクラスター、インデックス、その他のデータを作成する:
IDEAツールを使用してmavenプロジェクトを作成します(mavenプロジェクトの作成方法、mavenのインストールと構成、これらは2つのリンクです)。
dockerのESのelasticsearch.ymlファイルには、network.host:0.0.0.0、cluster.name:xxxx(クラスター名)構成が必要です。
mavenのpom.xmlファイル
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kakatadage</groupId>
<artifactId>esdemo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.5.1</version>
</dependency>
</dependencies>
<build>
<finalName>esdemo</finalName>
<plugins>
<plugin>
<!-- 设置javac编译器的版本和编码字符 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf8</encoding><!-- 编译器编码 -->
</configuration>
</plugin>
</plugins>
</build>
</project>
テストファイル:
package com.java.es.test;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;
import java.io.IOException;
import java.net.InetAddress;
public class EsDemo {
//从ES中查询数据
@Test
public void test1() throws IOException {
//指定ES集群,es的yml配置文件里面要有这个集群
Settings setting = Settings.builder().put("cluster.name", "docker-cluster").build();
//创建访问ES服务器的客户端,这里host为服务器对外IP,或者本地IP,取决于环境搭建在服务器还是本地
TransportClient client = new PreBuiltTransportClient(setting)
.addTransportAddress(
new TransportAddress(
InetAddress.getByName("host"),9300));
IndexResponse response = client.prepareIndex("mfz", "mfz_tab", "1").setSource(XContentFactory.jsonBuilder()
.startObject().field("name", "mfz")
.field("sex", "男")
.field("age", "22")
.endObject()).get();
System.out.println("索引名称:" + response.getIndex() + "\n类型:" + response.getType()
+ "\n文档ID:" + response.getId() + "\n当前实例状态:" + response.status());
client.close();
}
}
詳細については、https://www.cnblogs.com/kakatadage/p/10021957.htmlを参照してください。ただし、彼のテストクラスはここで合格できません。理由は、彼のテストクラスがesクラスターを指定しているが、以下は役に立たないためです。 (以下に示すように)、私のテストクラスはローカルでテストされています。鉱山はサーバーに接続されており、彼はローカルです。esとJAVAの追加、削除、変更について:elasticsearchとJAVAの追加、削除、変更をご覧ください。