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

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

猜你喜欢

转载自blog.csdn.net/FV8023/article/details/96427911