运行环境: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容器容易出现的问题:
问题一:内存溢出,挂载后显示Exited(1),这个状态有可能是内存的问题。
解决方法:
在启动镜像时,加入-e ES_JAVA_OPTS="-Xms512M -Xmx512M",规定内存大小。如上面的正确语句。
问题二:max virtual memory areas vm.max_map_count [xxx] is too low, increase to at least[xxxx]
这个问题是通过日志得到的,大体意思是elasticsearch用户拥有的内存权限太小,至少需要xxxx
解决方法:
第一:切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf
第二:文件最后添加下面配置:
vm.max_map_count=xxxx(此处的xxxx是你自己要填写的数值)
第三:sysctl -p(从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载)
然后重启elasticsearch,即可启动成功
问题三:initial heap size [268435456] not equal to maximum heap size [1073741824]; this can cause resize pauses and prevents mlockall from locking the entire heap
大体意思内存大小不一致,导致了一些问题。
解决办法:使用 -e ES_JAVA_OPTS="-Xms512M -Xmx512M"命令时,将-Xms、-Xmx参数设置为一致的大小。
ES与JAVA相关联的使用,创建集群、索引以及其他数据:
使用IDEA工具,创建maven项目(如何创建maven项目,maven的安装与配置,这是两个链接)。
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增删改查