ElasticSearch学习(一)

        ElasticSearch是一款基于Lucene的功能强大的开源分布式搜索与数据分析引擎,它具有高性能、易于扩展的优点,不仅可以从海量数据中快速找到相关信息,还被广泛运用于大数据近实时的分析,包括日志分析、指标监控、信息安全等多个领域。

        相关链接:

        ElasticSearch官网

        Elastic公司技术博客

        Elastic中文社区

        常听的ELK,即ElasticSearch、Logstash、Kibana,可以搭建一个完整的数据采集、存储、可视化的平台,这里来先动手实践,对其流程有一个感官的理解,后面再慢慢去深入了解ElasticSearch的各种高级用法。首先,需要下载ELK三件套,注意,这三者的版本必须一致,否则无法正常进行数据采集,我这里采用的是7.5.0版本的:

        

        另外还需要注意的是,安装之前需要JDK环境的支持,JAVA_HOME的配置这里就不多说了。

安装ElasticSsearch

        下载ES压缩包,解压后目录结构如下所示:

        

        目录说明:    

bin ES的各种功能的脚本文件
config elasticsearch.yml文件重点关注,配置ES的,另外还有登录用户的配置文件
data ES节点存储数据文件的目录
jdk 7.x版本后自带JDK依赖,方便配置环境
lib Java类库
logs 运行日志输出的目录
modules 包含的ES模块
plugins 包含ES已安装的插件

        配置elasticsearch.yml:

        

        配置jvm.options:

        

        还有一点要注意,上面值得设置不要超过30GB大小。

        配置完成后,运行bin目录下的脚本文件:        

        检查确认启动成功:

        

        注意这里,cluster_name,是ES集群的名称,这里只是单机的一个实例,单一个集群有多个节点时,需要确保集群名称一样,可以通过如下方式在本机启动一个集群的多个节点:

        elasticsearch.bat -E node.name=linjk_1 -E cluster.name=linjk -E path.data=xxx -E http.port=3358

        elasticsearch.bat -E node.name=linjk_2 -E cluster.name=linjk -E path.data=xxx -E http.port=3359

        elasticsearch.bat -E node.name=linjk_3 -E cluster.name=linjk -E path.data=xxx -E http.port=3360

        然后可通过URL查看当前集群有多少个节点:

       

        为了后面方便,这里安装了IK中文分词器:

       elasticsearch-plugin.bat install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.0/elasticsearch-analysis-ik-7.5.0.zip           

        安装完成后,重启ES,查看安装的插件:

        

      ES配置用户名密码:      

      提示需要配置X-Pack,配置如下:

      

      重启ES,重新配置密码:(这里我都用了一个密码`ljk121`)      

      这是再访问http://localhost:3358,就会弹出登录对话框了:

     

安装Kibana

        上面是通过浏览器去调用ES提供的一些API,但是只能发GET请求,后面需要发POST请求去查询一些数据就不方便了,这里可以借助Kibana这个工具,启动Kibana很简单,修改其配置文件,然后执行bin目录下的bat或sh脚本即可,注意,ES首先需要启动,在这里ES是服务端,Kibana是客户端。

        修改配置文件kibana.yml:

        

        

        启动:        

        验证:【http://localhost:5601

        

        圈住的Dev Tools很有用,如下所示:

       

        可以很方便运行ES提供的一些API函数。这里暂时就用到Kibana的Dev Tools,其他功能后面再慢慢探索。

安装Logstash

        有了存储数据的ES和可视化工具Kibana,现在就需要从数据库导入数据到ES了,这里从MySQL导入数据到ES,以借助ES强大的搜索和分析能力去进一步实现后面的业务功能。

        新建一个测试库和测试表:

        

        

        新建Logstash导入数据的配置文件:        

input {
	jdbc {
		jdbc_driver_library => "D:\\usr\\pathvar\\kettle\\lib\\mysql-connector-java-5.1.47.jar"
		jdbc_driver_class => "com.mysql.jdbc.Driver"
		jdbc_connection_string => "jdbc:mysql://localhost:3308/es_test"
		jdbc_user => "root"
		jdbc_password => "xxxxx"
		schedule => "* * * * *"
		statement => "SELECT * FROM t_user_account WHERE update_time >= :sql_last_value"
        # statement_filepath => "./config/jdbc.sql"
		use_column_value => true
		tracking_column_type => "timestamp"
		tracking_column => "update_time"
		last_run_metadata_path => "syncpoint_table"
	}
}

output {
	elasticsearch {
		# ES的IP地址及端口
		# hosts => ["localhost:3358", "localhost:3359"]
		hosts => "http://localhost:3358"
		# 索引名称
		index => "es_test"
		# 关联的数据库中有一个id字段,对应类型中的id,无则ES自己生成
		document_id => "%{id}"
		document_type => "user"
		}
	stdout {
		# JSON格式输出
		codec => json_lines
	}
}

        编写后最好测试一下配置文件是否有语法问题:        

        没问题,启动:        

        报错:        

        解决:

    

        下载安装插件:

       https://github.com/logstash-plugins/logstash-input-jdbc/releases/tag/v4.3.19       

        然后安装:(生成gem文件这一步需要先安装Ruby)        

        再次启动,可以看到,在执行数据同步了:        

        去ES查询验证一下:        

        可以看到,在ES可以看到了,接下来,在MySQL修改这条数据,看是否也能同步更新ES的数据,同步的时间最小粒度是1分钟,可以看到,数据也变化了。

        好了,从采集数据到存储到ES的链路走通了,后面学习再记录了。

        

 

发布了209 篇原创文章 · 获赞 48 · 访问量 34万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章