使用Logstash,JDBC将数据聚合并索引到Elasticsearch中

介绍

在我以前的帖子在这里和这里我展示了如何使用JDBC和Elasticsearch JDBC进口商库从SQL数据库索引数据到Elasticsearch。 在这里的第一篇文章中,我提到了使用导入程序库的一些缺点,这些缺点我已在此处复制:

  • 不支持ES版本5及更高版本
  • 嵌套对象数组中可能存在重复的对象。 但是重复数据删除可以在应用程序层进行处理。
  • 对最新ES版本的支持可能会延迟。

使用Logstash及其以下插件可以克服以上所有缺点:

  • JDBC Input插件 –用于使用JDBC从SQL DB读取数据
  • 聚合过滤器插件 –用于将SQL DB中的行聚合到嵌套对象中。

我将使用最新的ES版,即5.63可以从Elasticsearch网站下载这里 。 我们将使用此处可用的映射创建索引world_v2。

$ curl -XPUT --header "Content-Type: application/json" http://localhost:9200/world_v2 -d @world-index.json

或使用Postman REST客户端,如下所示:

要确认索引已成功创建,请在浏览器中打开此URL http:// localhost:9200 / world_v2,以得到类似于以下内容的内容:

创建Logstash配置文件

我们应该选择等效的logstash版本,即5.6.3,可以从此处下载。 然后,我们需要使用以下命令安装JDBC输入插件,聚合过滤器插件和Elasticsearch输出插件:

bin/logstash-plugin install logstash-input-jdbc
bin/logstash-plugin install logstash-filter-aggregate
bin/logstash-plugin install logstash-output-elasticsearch

我们需要将以下内容复制到bin目录中,以便能够运行我们将在接下来定义的配置:

  1. 从此处下载MySQL JDBC jar。
  2. 从此处下载包含用于获取数据的SQL查询的文件。

我们将上述内容复制到Logstash的bin目录或您将拥有logstash配置文件的任何目录中,这是因为我们在配置中使用这两个文件的相对路径来引用这两个文件。 下面是Logstash配置文件:

input {jdbc {jdbc_connection_string => "jdbc:mysql://localhost:3306/world"jdbc_user => "root"jdbc_password => "mohamed"# The path to downloaded jdbc driverjdbc_driver_library => "mysql-connector-java-5.1.6.jar"jdbc_driver_class => "Java::com.mysql.jdbc.Driver"# The path to the file containing the querystatement_filepath => "world-logstash.sql"}
}
filter {aggregate {task_id => "%{code}"code => "map['code'] = event.get('code')map['name'] = event.get('name')map['continent'] = event.get('continent')map['region'] = event.get('region')map['surface_area'] = event.get('surface_area')map['year_of_independence'] = event.get('year_of_independence')map['population'] = event.get('population')map['life_expectancy'] = event.get('life_expectancy')map['government_form'] = event.get('government_form')map['iso_code'] = event.get('iso_code')map['capital'] = {'id' => event.get('capital_id'), 'name' => event.get('capital_name'),'district' => event.get('capital_district'),'population' => event.get('capital_population')}map['cities_list'] ||= []map['cities'] ||= []if (event.get('cities_id') != nil)if !( map['cities_list'].include? event.get('cities_id') ) map['cities_list'] << event.get('cities_id')map['cities'] << {'id' => event.get('cities_id'), 'name' => event.get('cities_name'),'district' => event.get('cities_district'),'population' => event.get('cities_population')}endendmap['languages_list'] ||= []map['languages'] ||= []if (event.get('languages_language') != nil)if !( map['languages_list'].include? event.get('languages_language') )map['languages_list'] << event.get('languages_language')map['languages'] << {'language' => event.get('languages_language'), 'official' => event.get('languages_official'),'percentage' => event.get('languages_percentage')}endendevent.cancel()"push_previous_map_as_event => truetimeout => 5}mutate { remove_field => ["cities_list", "languages_list"]}
}
output {elasticsearch {document_id => "%{code}"document_type => "world"index => "world_v2"codec => "json"hosts => ["127.0.0.1:9200"]}
}

我们将配置文件放置在logstash的bin目录中。 我们使用以下命令运行logstash管道:

$ logstash -w 1 -f world-logstash.conf

我们使用1个工作程序,因为当汇总发生时,多个工作人员可能会破坏汇总,这是基于具有共同国家/地区代码的事件序列。 成功完成Logstash管道后,我们将看到以下输出:

在浏览器中打开以下URL http:// localhost:9200 / world_v2 / world / IND ,以查看在Elasticsearch中索引的印度的信息,如下所示:

翻译自: https://www.javacodegeeks.com/2017/10/aggregate-index-data-elasticsearch-using-logstash-jdbc.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql ssd tps 上不去_转【案例分享】压测TPS上不去

1.问题描述&#xff1a;客户新上的一个关键业务系统&#xff0c;在做上线前的压力测试时&#xff0c;应用的并发无法达到上线前的并发指标和响应时间指标要求。压测时TPS的曲线很不稳定&#xff0c;如下所示&#xff1a;2.分析过程&#xff1a;从上述知识点可以知道&#xff1a…

棋牌类游戏算法–牌分类_快速分类–三向和双枢轴

棋牌类游戏算法–牌分类毫无疑问&#xff0c;Quicksort被认为是本世纪最重要的算法之一&#xff0c;并且它是许多语言的事实上的系统排序&#xff0c;包括Java中的Arrays.sort 。 那么&#xff0c;quicksort有何新功能&#xff1f; 好吧&#xff0c;除了我刚刚&#xff08;在J…

真实收货地址大全2016_中国古典诗词大全汇集了诗经、唐诗、宋词、元曲以及纳兰词,12册精美套装。...

↑点击上方“诗画天地”关注我们诗词也如人生&#xff0c;你驻足便是驿站&#xff0c;你前行便是风景。任由时光无尽幻变&#xff0c;回眸处星孤月洁&#xff0c;阅读诗词能让人生变得清明透彻&#xff0c;仿佛与古人走在同一条道上&#xff0c;俯仰之间&#xff0c;人生皆是诗…

python可以帮机器人编程吗_Python如何实现机器人聊天

今天午休的时候&#xff0c;无意之中看了一篇博客&#xff0c;名字叫Python实现机器人&#xff0c;感觉挺有的意思的。于是用其写了一个简单的Python聊天&#xff0c;源码如下所示:# -*- coding: utf-8 -*-import aimlimport sysimport osdef get_module_dir(name):print("…

测试案例6种编写方法_一种编写测试的好方法

测试案例6种编写方法测试。 我最近一直在考虑测试。 作为我对各种项目所做的代码审查的一部分&#xff0c;我已经看到了数千行未经测试的代码。 这不仅是测试覆盖率统计数据指出这一点的情况&#xff0c;更是该项目中根本没有任何测试的情况 。 我一直听到这种悲惨状况的两个原…

python字符串查找匹配_说说在 Python 中,如何找出所有字符串匹配

Regex 对象有一个 findall() 方法&#xff0c;它会返回包含所查找字符串的所有匹配。这与 search() 方法明显不同&#xff0c;search() 将返回一个 Match 对象&#xff0c;其中包含被查找字符串中的 “ 第一次 ” 匹配文本。请看以下示例&#xff0c;注意区分&#xff1a;phone…

使用Spring MVC应用程序配置嵌入式H2控制台

在上一篇文章中&#xff0c;我们使用嵌入式H2数据库将Spring MVC应用程序部署到Tomcat。 在嵌入式数据库中浏览数据非常困难&#xff0c;因为我们无法连接外部客户端来查看数据。 H2提供了一个Web控制台&#xff0c;我们可以启用它并使用它来浏览数据&#xff0c;如下所示&…

Hashcat从入门到入土(二)

使用hashcat破解word密码 昨天的文章里给自己挖了一个坑&#xff0c;使用公司电脑显卡还是GT705古董级别的&#xff0c;显卡驱动也没设置好&#xff0c;导致使用hashcat的时候出现了exhausted的问题&#xff0c;导致密码没有算出来&#xff0c;今天我用自己电脑算一下&#xf…

将SQL server2019数据库部署在虚拟机上

下载Windows.iso 前段时间由于数据库文件丢失&#xff0c;导致项目再转入新的环境以后需要重新安装SQL server&#xff0c;但是由于win11对SQL server2019支持非常差&#xff0c;申请的SQL server2022的试用资格又迟迟没有批准导致我的数据库始终连不上&#xff0c;于是只能打…

sqoop mysql 安装_Sqoop安装及验证_MySQL

Sqoop安装及验证环境&#xff1a;系统Red Hatlinux 6.4Hadoop版本1.2.1Sqoop版本1.4.4Mysql数据库版本5.6.15通过Sqoop实现Mysql /Oracle与HDFS / Hbase互导数据http://www.linuxidc.com/Linux/2013-06/85817.htm[Hadoop] Sqoop安装过程详解http://www.linuxidc.com/Linux/2013…

restful web_泽西岛的RESTful Web服务

restful web我已经讨论了有关体系结构考虑事项<< link >>的早期文章&#xff0c;以成为可在我的系统/机器上使用的分布式环境上的RESTful系统。 本文我们将讨论如何基于REST体系结构考虑来构建Web服务。 本教程说明了如何使用Tomcat 6&#xff0c;Eclipse和Jersey …

常见操作系统调度算法研究(1)

FIFO FIFO全称是first in first out&#xff0c;是操作系统里面常见的一种算法&#xff0c;他就好比是一堆人在排一个队伍&#xff0c;按照先进先出的规则&#xff0c;谁首先排队谁就可以第一个出去。 它的缺点显而易见&#xff0c;如果第一个进去的家伙任务量过大&#xff0c…

常见操作系统调度算法研究(2)

轮转策略 轮转策略&#xff08;Round-Robin&#xff09;简称为RR&#xff0c;在RR里面&#xff0c;每个准备就绪的任务只能在有限的时间内运行&#xff0c;也就是说不管这个任务完成与否&#xff0c;都会切换任务到下一个。 由于它要频繁的切换队列&#xff0c;我们可以把准备…

使用Apache Ignite优化Spark作业性能(第1部分)

快来看看他们是如何工作的&#xff01; 本文的某些部分摘自我的书《 Apache Ignite的高性能内存计算》 。 如果您对这篇文章感兴趣&#xff0c;请查看本书的其余部分&#xff0c;以获取更多有用的信息。 Apache Ignite提供了几种提高Spark作业性能的方法&#xff1a;Ignite RD…

mysql查看索引创建进度_SQL Server查看索引重建、重组索引进度

相信很多SQL Server DBA或开发人员在重建或重组大表索引时&#xff0c;都会相当郁闷&#xff0c;不知道索引重建的进度&#xff0c;这个对于DBA完全是一个黑盒子&#xff0c;对于系统负载非常大的系统或维护窗口较短的系统&#xff0c;你会遇到一些挑战。例如&#xff0c;你创建…

使用Eclipse Deeplearning4j构建简单的神经网络

神经网络导论 深度学习既包含深度神经网络又包含深度强化学习&#xff0c;这是机器学习的子集&#xff0c;而机器学习本身就是人工智能的子集。 广义上讲&#xff0c;深度神经网络执行机器感知&#xff0c;该机器感知从原始数据中提取重要特征&#xff0c;并对每个观察结果做出…

mysql 注入 绕过防火墙_绕过阿里云防火墙继续扫描探测和SQL注入

前言如今的互联网&#xff0c;WAF泛滥的年代&#xff0c;实在让我等脚本小子苦恼ing&#xff0c;尤其是阿里云服务器的自带防护&#xff0c;那不是一般的叫人牙疼&#xff0c;十个站8个站都是阿里云....最近遇到几个站都是阿里云的服务器&#xff0c;比如&#xff1a;泛微e-col…

java创建类的三个步骤_3个简单步骤即可测试Java 8

java创建类的三个步骤即将发布的Java 8版本为Java开发人员带来了许多新功能&#xff0c;但是升级时始终存在代码破裂的风险。 我们都记得Java 7出厂时有一系列非常严重的错误 。 当然&#xff0c;我们所有人都可以帮助避免在Java 8中出现相同的问题。我今天要介绍的方法是使用…

mybatis嵌套查询和嵌套结果有什么区别_Java面试专题之九:Mybatis面试5个大概率被问到的问题...

1、为什么说 Mybatis 是半自动 ORM 映射工具&#xff1f;它与全自动的区别在哪里&#xff1f;Hibernate 属于全自动 ORM 映射工具&#xff0c;使用 Hibernate 查询关联对象或者关联集合对象时&#xff0c;可以根据对象关系模型直接获取&#xff0c;所以它是全自动的。而 Mybati…

使用Pargon-neo进行5G sync相关的测试

前言 Paragon-neo是Calnex旗下的一款测试仪器&#xff0c;主要用于5G的高精度场景下的PTP与SyncE的测试&#xff0c;它可以提供高达100GbE的测试速度&#xff0c;可以用在ITU-T G.8273.2 C/D类边界时钟测试&#xff0c;符合O-RAN的O-DU和O-RU设备&#xff0c;以及设计和部署5G…