【大数据实战】Logstash采集->Kafka->ElasticSearch检索
1. Logstash概述
Logstash的官网地址为:https://www.elastic.co/cn/products/logstash,以下是官方对Logstash的描述。

Logstash是与Flume类似,也是一种数据采集工具,区别在于组件和特性两大方面。常用的数据采集工具有Sqoop、Flume、Logstash,计划将单独写一篇博文论述它们之间的区别,所以这里就不赘述,感兴趣可关注后期的博文。
2. Kafka概述
Kafka的官网是:http://kafka.apache.org/,官方的介绍如下图:

总结来说,Kafka是一个分布式消息队列,具有生产者和消费者的功能,它依赖Zookeeper集群来保存meta数据,根据Topic来归类存储的消息,Kafka集群由多个实例组成,每个实例称为broker。
3. ElasticSearch概述
ElasticSearch是一个分布式的搜索和数据分析引擎。它的官网是:https://www.elastic.co/cn/products/elasticsearch,官方对ElasticSearch的描述如下,通过官方的描述能够对ElasticSearch有一个整体的了解。

3. 编程实战
3.1 小项目介绍
在VM的linux本地logserver目录下存有模拟数据data.log,启动一个logstash监视Linux的logserver目录的data.log日志文件,当日志文件发生了修改,将日志文件采集到Kafka消息队列的名为logs的Topic中,另启动一个logstash将Kafka的消息采集到ElashticSearch,使用ElasticSearch检索数据。

3.2 开发环境
系统环境: VM中存在三台Linux机器(bigdata12,bigdata14,bigdata15)
软件环境:kafka_2.11-0.9.0.1、zookeeper-3.4.10、elasticsearch-2.4.4、logstash-2.3.1
3.3 环境准备
1. 首先在三台机器开启zookeeper,各机器运行zkServer.sh start,Linux下查看是否有然后使用zkServer.sh status查看zookeeper的状态,如果看到leader和follower角色的出现就代表运行正常。
2. 三台启动Kafka,到kafka目录下,运行 nohup bin/kafka-server-start.sh conf/serverproperties.conf。使用
3. 使用非root用户启动elasticsearch,使用非root用户进入elasticsearch目录执行: bin/elasticsearch -d
【注意】,必须是非root用户,否则会报错。如果没有,就创建一个用户。
例如创建一个用户为zhou的话,执行:
(1) 添加用户:useradd bigdata,
(2) 为用户添加密码 :echo 123456 | passwd --stdin zhou,
(3) 将zhou添加到sudoers: echo "bigdata ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/zhou
(4) 修改权限: chmod 0440 /etc/sudoers.d/zhou
(5) 从root切换成zhou: su - zhou
(6) 然后再执行启动elasticsearch命令
4. 检查进程运行情况
在Linux环境下执行jps命令查看进程是否正常启动,每台机器查看是否有以下进程

在elasticsearch安装了head的前提下,在windows环境开启浏览器,在地址栏输入http://ip地址:9200/_plugin/head ,例如,根据我的配置,输入了http://192.168.243.11:9200/_plugin/head。出现以下界面,表示Elasticsearch启动正常

在以上环节确认后,就代表环境启动运行正常,可以进行正常开发程序。
3.4 开发
3.4.1 编写logstash配置
在bigdata12机器中进入logstash的conf目录:
vi dataTokafka.conf
input {
file {
codec => plain {
charset => "UTF-8"
}
path => "/root/logserver/supernova.log"
discover_interval => 5
start_position => "beginning"
}
}
output {
kafka {
topic_id => "supernova"
codec => plain {
format => "%{message}"
charset => "UTF-8"
}
bootstrap_servers => "bigdata12:9092,bigdata14:9092,bigdata15:9092"
}
}
在bigdata14机器中进入logstash的conf目录:
vi dataToElastic.conf
input {
kafka {
type => "supernova"
auto_offset_reset => "smallest"
codec => "plain"
group_id => "elas2"
topic_id => "supernova"
zk_connect => "bigdata12:2181,bigdata14:2181,bigdata15:2181"
}
}
filter {
if [type] == "supernova" {
mutate {
split => { "message" => "|" }
add_field => {
"id" => "%{message[0]}"
"time" => "%{message[1]}"
"ip" => "%{message[2]}"
"user" => "%{message[3]}"
}
remove_field => [ "message" ]
}
}
}
output {
if [type] == "supernova" {
elasticsearch {
index => "supernova"
codec => plain {
charset => "UTF-16BE"
}
hosts => ["bigdata12:9200", "bigdata14:9200", "bigdata15:9200"]
}
}
}
3.4.2 运行
(1) 在bigdata12机器中,使用3.4.1中的dataTokakfa.conf启动logstash。执行:bin/logstash -f conf/dataTokakfa.conf,监听supernova.log文件
(2) 在bigdata14机器中,使用3.4.1中的dataToElastic.conf启动logstach。执行:bin/logstash -f conf/dataToElastic.conf,将Kafka数据采集到Elasticsearch。
(3) 为了便于观察,在bigdata15机器中,启动kafka消费者,查看Topic中的数据。执行:bin/kafka-console-consumer.sh --zookeeper bigdata11:2181 --from-beginning --topic logs,用于消费Kafka中Topic名为logs的消息。
(4) 编辑修改Logstash监听的supernova.log文件。
启动】:

【修改】在bigdata15中修改了数据(右下角窗口)

【监视过程】:bigdata15中(右上),kafka的consumer消费到了supernova.log文件中的数据,在bigdata14中,可以看到将数据传至ElasticSearch的数据(左下)

【ElasticSeach结果】
可以看到Elastic集群中,产生了一个supernova的type(类似关系数据库中的table)

【查看ElasticSearch数据】

3.4.2 ElasticSearch检索
使用Junit单元测试的方法来编写测试方法,代码如下:
EalsticSearch.java
package novaself; import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.junit.Before;
import org.junit.Test; import java.net.InetAddress;
import java.util.Iterator; /**
* @author Supernova
* @date 2018/06/22
*/
public class ElasticSearch { private Client client; /**
* 获取客户端
*/
@Before
public void getClient() throws Exception {
// ElasticSearch服务默认端口9300
Settings settings = Settings.settingsBuilder()
.put("cluster.name", "bigdata").build();
client = TransportClient.builder().settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName("bigdata12"), 9300))
.addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName("bigdata14"), 9300))
.addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName("bigdata15"), 9300));
} /**
* 词条查询: 用户名中有"新"字的数据
*/
@Test
public void testTermQuery(){
/*
* termQuery词条查询: 只匹配指定字段中含有该词条的文档
* 查询user字段为超新星的记录
*/
SearchResponse response = client.prepareSearch("supernova")
.setTypes("supernova")
.setQuery(QueryBuilders.termQuery("user","新"))
.get(); // 获取结果集对象、命中数
SearchHits hits = response.getHits();
// 使用迭代器遍历数据
Iterator<SearchHit> iter = hits.iterator();
while(iter.hasNext()){
SearchHit hit = iter.next();
// 以Json格式输出
String result = hit.getSourceAsString();
System.out.println(result);
} //关闭客户端
client.close();
}
/**
* 模糊查询: 星期四的数据
*/
@Test
public void testWildcardQuery() throws Exception{
/*
* wildcardQuery模糊查询,time字段中包含"四"的数据
*/
SearchResponse response = client.prepareSearch("supernova")
.setTypes("supernova")
.setQuery(QueryBuilders.wildcardQuery("time","四"))
.get(); // 获取结果集对象、命中数
SearchHits hits = response.getHits();
// 使用迭代器遍历数据
Iterator<SearchHit> iter = hits.iterator();
while(iter.hasNext()){
SearchHit hit = iter.next();
// 以Json格式输出
String result = hit.getSourceAsString();
System.out.println(result);
} //关闭客户端
client.close();
}
}
【检索结果】:
词条查询:testTermQuery( )方法的运行结果:

模糊查询:testWildcardQuery ( )方法的运行结果:

【大数据实战】Logstash采集->Kafka->ElasticSearch检索的更多相关文章
- 《OD大数据实战》驴妈妈旅游网大型离线数据电商分析平台
一.环境搭建 1. <OD大数据实战>Hadoop伪分布式环境搭建 2. <OD大数据实战>Hive环境搭建 3. <OD大数据实战>Sqoop入门实例 4. &l ...
- 《OD大数据实战》HDFS入门实例
一.环境搭建 1. 下载安装配置 <OD大数据实战>Hadoop伪分布式环境搭建 2. Hadoop配置信息 1)${HADOOP_HOME}/libexec:存储hadoop的默认环境 ...
- 《OD大数据实战》Hive环境搭建
一.搭建hadoop环境 <OD大数据实战>hadoop伪分布式环境搭建 二.Hive环境搭建 1. 准备安装文件 下载地址: http://archive.cloudera.com/cd ...
- 大数据应用日志采集之Scribe演示实例完全解析
大数据应用日志采集之Scribe演示实例完全解析 引子: Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到大量的应用.它能够从各种日志源上收集日志,存储到一个中央存储系 ...
- 大数据应用日志采集之Scribe 安装配置指南
大数据应用日志采集之Scribe 安装配置指南 大数据应用日志采集之Scribe 安装配置指南 1.概述 Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到大量的应用.它 ...
- SparkSQL大数据实战:揭开Join的神秘面纱
本文来自 网易云社区 . Join操作是数据库和大数据计算中的高级特性,大多数场景都需要进行复杂的Join操作,本文从原理层面介绍了SparkSQL支持的常见Join算法及其适用场景. Join背景介 ...
- 大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合
http://www.aboutyun.com/thread-6855-1-1.html 个人观点:大数据我们都知道hadoop,但并不都是hadoop.我们该如何构建大数据库项目.对于离线处理,ha ...
- 大数据抓取采集框架(摘抄至http://blog.jobbole.com/46673/)
摘抄至http://blog.jobbole.com/46673/ 随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前.如何能够做到所见即所得的无阻拦式采集.如 ...
- 大数据系列之Flume+kafka 整合
相关文章: 大数据系列之Kafka安装 大数据系列之Flume--几种不同的Sources 大数据系列之Flume+HDFS 关于Flume 的 一些核心概念: 组件名称 功能介绍 Agent ...
随机推荐
- Python初学者第十三天 三级菜单程序小作业
13day 作业题目: 三级菜单 作业需求: 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村' ...
- 第一课 PPT 所学内容总结
制作PPT时要注意三要素即:图形,颜色搭配,字数适当. 感悟:制作一个好的PPT也并不需要华丽的画面.只需清晰的表达出自己想要表达的,就是一个好PPT.
- Linux 下Shell的学习
1.Shell学习 1.什么是Shell shell是一个命令解析器,在操作系统的最外层,负责和用户对话,将用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果.2.什么是shell脚本 ...
- 无法用Put方式请求发布在IIS中的WebAPI
WebApi程序发布到IIS上后,无法使用Put的方式进行请求,错误信息如下: 原因和解决方案: 在IIS中默认不支持Put请求和Delete请求,因为IIS中注册的Web ...
- 乘风破浪:LeetCode真题_009_Palindrome Number
乘风破浪:LeetCode真题_009_Palindrome Number 一.前言 如何判断一个整型数字是回文呢,我们可能会转换成String来做,但是还有更简单的方法. 二.Palindrome ...
- Dictionary<Tkey.TValue>与SortedList
一.概述 表示Key/Value集合,可以添加删除元素,允许按Key来访问元素.是Hashtable的泛型等效类. 它需要一个相等实现来确定键是否相等,可以使用实现了IEqualityComparer ...
- socket的双重属性
1)api属性: 2)通信链路的端点属性.
- Linux 循环遍历文件目录
操作系统: Unbuntu 问题域:在一个文件目录下,嵌套有多个子目录,需要遍历这些子目录,并在子目录下进行相关操作,譬如:批量重命名,目录下的文件:又或者需要,设定工程目录(mvn versions ...
- 用firefox的插件下载网页中的视频
对于网页中的一些视频,直接下载不了,可以用专用下载软件下载,也可以用firefox的NetVideohunter Video Downloader插件下载网页中的视频,方便快捷. 工具/原料 fi ...
- 组合测试(Combinatorial Test)/配对测试 (pairwise)
组合测试方法:配对测试实践 实施组合测试 常用的Pairwise工具集:http://www.pairwise.org/tools.asp 成对测试(Pairwise Testing)又称结对测试.两 ...