es(elasticsearch)初步学习总结(一)

it2022-05-05  192

运行环境: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增删改查


最新回复(0)