文档章节

java连接elasticsearch

 张欢19933
发布于 2017/09/01 16:18
字数 1363
阅读 63
收藏 1
点赞 0
评论 0

使用 Java API 连接到ElasticSearch集群的方法有两种。

1. 成为ElasticSearch节点

      第一种连接ElasticSearch节点的方式可能会让那些没有接触过ElasticSearch java API的人感到吃惊,即思路是把应用程序当成ElasticSearch集群中的一个节点,并和其他节点一样对待。当然(在绝大多数情况下),我们不希望自己的应用程序被当作数据节点来存储数据,或者被推选为主节点。

我们声明了Client接口、Node接口和NodeBuilder,并用他们来建立到ElasticSearch的连接。下面的代码片段创建了一个到客户端的实例:

Node node = NodeBuilder.nodeBuilder().clusterName(CLUSTERNAME).client(true).node();
Clientclient = node.client();

      我们使用NodeBuilder类创建了一个节点,其中NodeBuilder可根据需要配置并建立节点。集群名称很重要,我们可以通过clusterName( )方法指定它。如果没有提供集群名称,则NodeBuilder会使用默认名称,即(elasticsearch),这时你可能会连接到一个你不希望连接的集群。另一个要点是client()的调用,该方法可以把最终调用的节点指定为客户端节点,而客户端节点不会持有数据。这一点请务必谨慎对待,除非你知道你在做什么,如果忽略了,如果忽略了可能会引发各种奇怪的问题。你的集群可能会丢失部分或者全部的数据。事实上集群可能会把一部分数据迁移到你的电脑上,当你关闭本地的节点实例后,集群会发现一个节点挂了。当可以持有数据的客户端为多个时,索引会更容易丢失。比如说,如果索引没有副本,而部分索引分片又迁移到了你的电脑上,那么关闭客户端肯定会带来集群丢失部分索引。因此,请务必使用client(true),除非你真的知道你在干什么。

      另外需要说明一下local(true)方法。因为它的存在,ElasticSearch可以在当前虚拟机内作为一个独立的节点而存在。这意味着多个ElasticSearch节点可以并存于一个Java虚拟机进程内组成一个集群。这个功能在集成测试时非常好用。有了它我们不需要在其他的地方建立独立的测试节点,并确保了在多个并行测试中互不干扰。

2. 使用传输及连接方式

      本方法允许只连接到集群而不加入集群。你会发现,客户端可以连接到多个节点,并通过轮询调度的方式使用它们。

接下来是使用传输机连接的主要代码:

Settings settings = Settings.settingsBuilder()
    .put("cluster.name", CLUSTERNAME)
    .put("client.transport.sniff", true).build();
client = TransportClient.builder().settings(settings).build()
     .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host1"), PORT))
     .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host2"), PORT));

      这个方法很简单。首先我们使用方法settingsBuilder()来建立合适的配置对象,如在本例中只需设置好集群名称。接着我们使用这个配置对象来建立一个TransportClient的客户端对象,然后把连接点的网络地址传递给他。这可以通过TransportClient类的addTransportAddress()方法并传递InetSocketTransportAddress 对象来实现。为创建InetSocketTransportAddress对象,我们需要提供ElasticSearch节点多在机器的IP地址和节点传输层的监听端口号。注意,这里的端口号不是9200,而是9300。9200端口是用来让HTTP REST API来访问ElasticSearch,而9300端口是传输层监听的默认端口。

参数:

client.transport.sniff

true表示让客户端去嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中,这样做的好处是不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器

client.transport.ping_timeout

连接超时时间

client.transport.nodes_sampler_interval

心跳时间

3. 选择合适的连接方式

      目前你已经掌握了通过Java API方式连接ElasticSearch的两种方式:一种是建立客户端节点,一种是使用传输机客户端。到底哪种方式更好呢?一方面来说,第一种方式让启动顺序复杂化了,即客户端节点必须加入集群并建立与其它节点的连接,而这需要时间和资源。然而,操作可以更快地执行,因为所有关于集群、索引、分片的信息都对客户端节点可见。另一方面,使用TransportClient对象启动速度更快,需要的资源更少,如更少的socket连接。然而发送查询和数据却要消耗更多的资源,TransportClient对象对集群和索引的拓扑结构的信息一无所知,所以他无法把数据直接发送到正确的节点,而是先把数据发送给某个初始传输节点,然后由ElasticSearch来完成剩下的转发工作。此外,TransportClient对象还需要你提供一份待转发节点的网络地址列表。

      在选择合适的连接方式时请记住,第一种方式并不是总是可行的。例如,当要连接的ElasticSearch集群处于另一个局域网中,此时唯一可选的方式就是第二种方式。

© 著作权归作者所有

共有 人打赏支持
粉丝 29
博文 422
码字总数 211998
作品 0
海淀
Centos6搭建elk系统,监控IIS日志

**所需程序: 服务器端:java、elasticsearch、kikbana 客 户 端:IIS、logstash** 一、服务器端(192.168.10.46)操作: 先建立一个ELK专门的目录: [root@Cent65 ~]mkdir /elk/ 上传到elk...

D杀手D ⋅ 04/24 ⋅ 0

ELK 实验(二)安装Elastic Search 单节点

Linux 安装 java -version echo $JAVA_HOME 木有返回,环境没有设置好。。。 vi /etc/profile export JAVAHOME=/usr/java/jdk1.8.0162 export JREHOME=$JAVAHOME/jre export CLASSPATH=$JAV......

pcdog ⋅ 04/15 ⋅ 0

Elasticsearch的配置(1)

配置Elasticsearch Elasticsearch提供良好的默认设置,只需要很少的配置。使用群集更新设置 API,可以在运行的群集上更改大多数设置 。 https://www.elastic.co/guide/en/elasticsearch/refe...

yzy121403725 ⋅ 06/13 ⋅ 0

Spark中hive的使用(hive操作es示例)

配置hive-site.xml <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value> <description>JDBC connect ......

守望者之父 ⋅ 06/15 ⋅ 0

Elasticsearch入门实践

一. 系统环境 操作系统:CentOS release 6.8 (Final) ES版本:6.1.1 二. 安装 先确认安装了Java运行时环境: 解压ES压缩包: 三. 启动 1. 启动ES单节点 当然,对于在后台以守护进程模式运行的...

哲别0 ⋅ 06/06 ⋅ 0

ELK实时日志分析平台部署搭建详细实现过程

原文地址:http://www.linuxidc.com/Linux/2016-09/135137.htm 1、ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段: 日志主要包括系统日志、应用程序日志和安全日志。...

tanga842428 ⋅ 2017/07/27 ⋅ 0

Spring Data Elasticsearch 和 x-pack 用户名/密码验证连接

使用Spring Data Elasticsearch连接elasticsearch时,正常情况下只需要在application.properites文件中添加如下配置即可连接: 以看到Spring Data Elasticsearch连接elasticsearch很简单。 ...

kipeng300 ⋅ 04/24 ⋅ 0

bboss elasticsearch v5.0.7.0 发布

The best elasticsearch highlevel java rest api-----bboss bboss elasticsearch v5.0.7.0发布 v5.0.7.0新增功能特性和改进 1.增加批量索引添加/修改方法,可以为list参数指定文档id 和文档...

bboss ⋅ 06/01 ⋅ 0

Linux 环境下安装 elasticsearch 5.x、6.x 问题汇总

can not run elasticsearch as root [o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException: java.lang.Ru......

BeckJin ⋅ 05/19 ⋅ 0

Elastic Search学习笔记1——安装elasticsearch2.4.6

Elastic Search 简介 1.基于Apache Lucene的开源搜索引擎 2.采用Java编写 RESTful API风格 3.较容易的横向扩展 应用场景 1.海量数据分析引擎 2.数据搜索引擎 3.数据仓库 官网 https://www.el...

晨猫 ⋅ 03/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部