博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES学习笔记之---从源码启动ES
阅读量:6225 次
发布时间:2019-06-21

本文共 1815 字,大约阅读时间需要 6 分钟。

开发中需要用到ES的插件, 开发ES插件需要了解ES的内部结构, 于是再次开始学习ES的源码。一方面了解插件开发的套路,一方面了解get接口的实现细节。

了解ES的原理,源码是文档最好的补充。源码甚至比文档更有助于了解ES的内部核心。

首先从git上clone下源码:

git clone https://github.com/elastic/elasticsearch.gitcd elasticsearchgit tag -lgit checkout v2.4.5sh run.sh

如果使用run.sh没有成功,再试一次, 有可能是maven的jar包没有下载到。

这里使用v2.4.5是由于在编译es的过程中会用到相关的jar包,而https://oss.sonatype.org/content/repositories/snapshots/org/elasticsearch/rest-api-spec/并不是所有版本的jar包都有, 所以从中选取了v2.4.5, 这跟手机选号一样,纯属个人主观。

这里JDK要换成1.8, 1.7的jdk maven会报protocol_verson错误。

编译成功后,就会生成elasticsearch的zip包, 需要解压,因为源码中会用到conf文件。

cd /home/shgy/es_workspace/elasticsearch/distribution/zip/target/releases/unzip elasticsearch-2.4.5-SNAPSHOT.zip mv elasticsearch-2.4.5-SNAPSHOT /opt/

编译完成后, 将源码import到intellij中, intellij的启动参数

vm options : -Des.path.home=/opt/elasticsearch-2.4.5-SNAPSHOTProgram arguments: start

启动成功后使用

curl http://localhost:9200

即可看到经典的

{  "name" : "Ruckus",  "cluster_name" : "elasticsearch",  "cluster_uuid" : "ZIl7g86YRiGv8Dqz4DCoAQ",  "version" : {    "number" : "2.4.5",    "build_hash" : "c849dd13904f53e63e88efc33b2ceeda0b6a1276",    "build_timestamp" : "2018-08-12T01:30:55Z",    "build_snapshot" : true,    "lucene_version" : "5.5.4"  },  "tagline" : "You Know, for Search"}

从源码启动成功后, 可以做的事情就多了。 比如看看You Know, for Search是怎么来的;看看ES内部的index/get/search等接口内部是如何运行的。

更重要的是, 可以将相关接口的逻辑套用, 依样画葫芦开发plugin实现自己的业务逻辑。

以debug的方式启动es后, 第一个断点可以打在org.elasticsearch.http.netty.HttpRequestHandler.messageReceived(),这是netty的编程模式。

比如You Know, for Search, 通过debug, 可以了解到其调用链为:

HttpRequestHandler.messageReceived() --- RestMainAction.handleRequest()

Rest_xxx_Action是es所有http接口通用的套路。比如:

RestSearchAction    _searchRestGetAction    /{index}/{type}/{id}RestIndexAction    /{index}/{type}/{id} ......

可以说, Rest_xxx_Action是es的外壳, 整个ES的结构大致如下图所示:

ES学习笔记之---从源码启动ES

转载于:https://blog.51cto.com/sbp810050504/2158277

你可能感兴趣的文章
JavaScript
查看>>
Eclipse / Android : “Errors running builder 'Android Pre Compiler' on project…”
查看>>
P1219 N皇后
查看>>
Codeforces Round #449 (Div. 2) C. DFS
查看>>
通用后台管理系统(3)-测试环境是否成功
查看>>
以Drools5.5为例说明“规则引擎在业务系统中应用”---实例
查看>>
[Python]网络爬虫(二):利用urllib2通过指定的URL抓取网页内容(转)
查看>>
Monkey and Banana(基础DP)
查看>>
leetcode-686-Repeated String Match(重复多少次A能够找到B)
查看>>
github page+jekyll构建博客的解决方案
查看>>
2013-7-22 确定鼠标与控件位置关系
查看>>
列、约束重命名,原数据不丢失
查看>>
【笔记】老程序员从头开始学JQuery的读书笔记02
查看>>
单点登录系统(一)
查看>>
[转]性能测试之性能计数器和监测工具
查看>>
HZAU1098: Yifan and War3(区间dp)
查看>>
html
查看>>
关于ajax中async: false的作用
查看>>
GitHub帮助文档翻译1——helloWorld
查看>>
文件的下载,随机验证码(无验证)登录注册
查看>>