Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Elasticsearch6.1.2源码下载和编译构建

Elasticsearch6.1.2源码下载和编译构建

作者头像
程序员欣宸
发布于 2019-05-29 09:15:02
发布于 2019-05-29 09:15:02
1.2K00
代码可运行
举报
文章被收录于专栏:实战docker实战docker
运行总次数:0
代码可运行

为了深入学习elasticsearch,研究其源码是种有效途径,本文简述了从下载到编译构建再运行起来的全部过程;

环境信息

  1. 操作系统:Ubuntu 18.04.2 LTS
  2. JDK:1.8.0_191
  3. Gradle:4.6
  4. elasticsearch:6.1.2

请确保JDK和Gradle已安装在Ubuntu电脑上,并且环境变量设置成功;

账号问题

由于elasticsearch要求以非root身份启动,因此本次实战用的不是root账号,以下命令可用来创建admin账号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
groupadd admin && useradd -d /home/admin -g admin -m admin

下载源码

  1. 源码下载地址是:https://github.com/elastic/elasticsearch/releases
  2. 上述网站中有各个版本的release,找到我们需要 的6.1.2版本,然后下载压缩包,如下图:
  1. 将源码下载到Ubuntu电脑上,执行tar -zxf elasticsearch-6.1.2.tar.gz解压后,得到新的文件夹elasticsearch-6.1.2;

修改源码

为了证明修改的源码可以正常构建和运行,我们来修改一个java文件,在里面打印一些日志;

  1. 进入前面解压得到的文件夹elasticsearch-6.1.2;
  2. 打开文件core/src/main/java/org/elasticsearch/node/Node.java,增加一个静态方法,作用是打印当前线程堆栈情况,内容如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void printTrack(Logger logger, String prefix){
        StackTraceElement[] st = Thread.currentThread().getStackTrace();
        if(null==st){
            logger.info("invalid stack");
            return;
        }
        StringBuffer sbf =new StringBuffer();
        for(StackTraceElement e:st){
            if(sbf.length()>0){
                sbf.append(" <- ");
                sbf.append(System.getProperty("line.separator"));
            }
            sbf.append(java.text.MessageFormat.format("{0}.{1}() {2}"
                ,e.getClassName()
                ,e.getMethodName()
                ,e.getLineNumber()));
        }
        logger.info(prefix
            + "\n************************************************************\n"
            + sbf.toString()
            + "\n************************************************************");
    }
  1. 找到Node.java的如下方法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected Node(final Environment environment, Collection<Class<? extends Plugin>> classpathPlugins) {
        final List<Closeable> resourcesToClose = new ArrayList<>(); // register everything we need to release in the case of an error
        boolean success = false;
        {
            // use temp logger just to say we are starting. we can't use it later on because the node name might not be set
            Logger logger = Loggers.getLogger(Node.class, NODE_NAME_SETTING.get(environment.settings()));
            logger.info("initializing ...");
        }

logger.info(“initializing …”);这一行代码下面增加下面这一行内容,作用是在elasticsearch启动时打印Node类实例的调用堆栈:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
printTrack(logger, "Here is stack of Node instance");

保存好再退出,接下来可以编译了;

编译构建

  1. 进入文件夹elasticsearch-6.1.2,执行命令./gradlew assemble即可开始编译,下载依赖会消耗大量时间,因此请耐心等待,编译过程中CPU占用略高,如下图:
  1. 大约10多分钟后,编译构建成功,控制台如下所示:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
> Task :test:fixtures:old-elasticsearch:javadocJar 
Building without git revision id.

> Task :test:fixtures:old-elasticsearch:sourcesJar 
Building without git revision id.


BUILD SUCCESSFUL in 11m 3s
473 actionable tasks: 473 executed
  1. 编译完成后,进入目录elasticsearch-6.1.2/distribution/tar/build/distributions可以见到构建成功的结果:elasticsearch-6.1.2-SNAPSHOT.tar.gz,这就是可用的elasticsearch-6.1.2;
  2. 构建结果文件以SNAPSHOT作为文件名后缀,如果不想要此后缀,在编译的时候改用以下命令即可:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./gradlew assemble -Dbuild.snapshot=false

验证构建的elasticsearch是否可用

  1. 解压elasticsearch-6.1.2-SNAPSHOT.tar.gz到一个目录下;
  2. 进入目录elasticsearch-6.1.2-SNAPSHOT/config,修改network.host的配置为0.0.0.0,如下图:
  1. 进入目录elasticsearch-6.1.2-SNAPSHOT/bin,执行./elasticsearch命令启动服务;
  2. 在控制台可以看到新增的代码打出的日志,将Node类的调用堆栈打印出来了,我们也借此机会了解到elasticsearch启动时的涉及到的关键类:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[2019-04-20T04:02:55,785][INFO ][o.e.n.Node               ] [] initializing ...
[2019-04-20T04:02:55,789][INFO ][o.e.n.Node               ] [] Here is stack of Node instance
************************************************************
java.lang.Thread.getStackTrace() 1,559 <- 
org.elasticsearch.node.Node.printTrack() 953 <- 
org.elasticsearch.node.Node.<init>() 255 <- 
org.elasticsearch.node.Node.<init>() 245 <- 
org.elasticsearch.bootstrap.Bootstrap$5.<init>() 212 <- 
org.elasticsearch.bootstrap.Bootstrap.setup() 212 <- 
org.elasticsearch.bootstrap.Bootstrap.init() 322 <- 
org.elasticsearch.bootstrap.Elasticsearch.init() 121 <- 
org.elasticsearch.bootstrap.Elasticsearch.execute() 112 <- 
org.elasticsearch.cli.EnvironmentAwareCommand.execute() 86 <- 
org.elasticsearch.cli.Command.mainWithoutErrorHandling() 124 <- 
org.elasticsearch.cli.Command.main() 90 <- 
org.elasticsearch.bootstrap.Elasticsearch.main() 92 <- 
org.elasticsearch.bootstrap.Elasticsearch.main() 85
************************************************************
  1. 我的ubutnu电脑的IP地址是192.168.50.75,因此用浏览器访问此地址:http://192.168.50.75:9200 ,返回内容如下所示:

至此编译构建elasticsearch6.1.2成功,在您编译构建elasticsearch的时候,希望本文能给您提供参考;

建议

除了修改和编译源码,通过IntelliJ IDEA远程调试elasticsearch也是有效的学习手段,推荐您参考文章《IntelliJ IDEA远程调试Elasticsearch6.1.2》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年04月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
讲得最明白的Elasticsearch源码调试环境搭建教程
使用elasticsearch(以下简称ES)也有挺长时间了,一直想找机会深入源码研究下。我看源码有个习惯,就是一定要运行起来。不是只把源码下载下来看看就行的。
用户7634691
2020/08/20
3.6K0
讲得最明白的Elasticsearch源码调试环境搭建教程
elasticsearch.bat闪退的解决方案
进入Elasticsearch安装目录下的config目录,修改elasticsearch.yml文件.在文件的末尾加入以下代码
全栈程序员站长
2022/02/20
1.5K0
elasticsearch.bat闪退的解决方案
Elasticsearch 5.x 安装与配置
Elasticsearch官方建议使用 Oracle的JDK8 1、下载安装 [root@vnode0 opt]# tar -zxvf elasticsearch-5.1.1.tar.gz [ro
程裕强
2018/01/02
1.8K0
Elasticsearch 5.x +Kibana 5.x 安装与配置
因为版本的问题,最新的版本安全级别提高了,不允许采用root帐号启动,所以我们要添加一个用户。
程裕强
2022/05/06
1.1K0
Elasticsearch源码解析:环境搭建
在之前学习Redis的过程中,我就是一边通过文档/视频学习,一边阅读源码。我发现两种方法可以相辅相成,互相补充。阅读文档可以帮助我们快速了解某个功能,阅读源码有助于我们更深入的理解这一功能的实现及思想。
Jackeyzhe
2020/07/22
1.1K0
Elasticsearch1.1 安装(好多坑)
安装Elasticsearch 1.安装elasticsearch-rtf elasticsearch-rtf 是国内某大神根据 elasticsearch 安装很多插件改造的,很棒棒,膜拜~ 需要安装 Java SE 8以上版本 ubuntu安装 java8 # 安装依赖 sudo apt-get install python-software-properties # 导入Webupd8 PPA sudo add-apt-repository ppa:webupd8team/java # 更新 sud
98k
2018/04/23
1.1K0
Elasticsearch1.1 安装(好多坑)
spring4.1.8扩展实战之四:感知spring容器变化(SmartLifecycle接口)
本章是《spring4.1.8扩展实战》的第四篇,如果业务上需要在spring容器启动和关闭的时候做一些操作,可以自定义SmartLifecycle接口的实现类来扩展,本章我们通过先分析再实战的方法,来掌握这种扩展方式;
程序员欣宸
2022/05/06
6610
spring4.1.8扩展实战之四:感知spring容器变化(SmartLifecycle接口)
教你编译调试Elasticsearch 6.3.2源码
想深入理解 Elasticsearch,阅读它的源码是很有必要的,一来可以了解它内部的具体实现,有助于调优,二来可以了解优秀开源项目的代码架构,提高我们的代码架构能力等
小旋锋
2019/01/21
2.3K0
ElasticSearch详解——2.阅读源码详解ES启动过程
上一篇文章ElasticSearch详解——1.源码编译和本地Debug环境搭建说了ES的源码编译以及如何在本地编译。这一篇文章主要说明ES的启动过程。
开发者日常叨叨
2024/06/15
2750
Elasticsearch 安装 Elasticsearch-SQL 插件使用 SQL 操作
Elasticsearch 的查询语言 (DSL) 语法很复杂,查询的功能 (filter/query/match/agg/geo) 各种各样,不管是通过 restful API 还是通过 java 的 API 进行操作,都非常不方便。而 Elasticsearch-SQL 插件可以使用传统 SQL 语法查询 Elasticsearch,使用起来非常不错。
王图思睿
2021/06/15
2.5K0
Java开发环境系列:全文搜索引擎elasticsearch(ik分词器)
安装中文分词插件,在elasticsearch-6.2.2\bin目录下执行以下命令: 
架构师小跟班
2019/08/06
1.8K0
Java开发环境系列:全文搜索引擎elasticsearch(ik分词器)
Elastic Stack之 Elasticsearch 6.7.1版本单机版安装、集群版安装
1、截至目前Elasticsearch 版本已经更新到了7.10.1版本了,这里先使用Elasticsearch 6.7.1版本,给一个下载地址,如下所示:
别先生
2021/01/13
1.4K0
docker下迁移elasticsearch的问题与解决方案
​ 1. 节点锁文件丢失:/usr/share/elasticsearch/data/nodes/0/node.lock 文件不存在。可能是因为文件未被正确创建,或者数据目录的权限不足,导致 Elasticsearch 无法写入。
一只牛博
2025/05/31
1960
docker下迁移elasticsearch的问题与解决方案
Elasitcsearch底层系列之 Node启动过程源码解析
Elasticsearch 是一款开源的分布式搜索引擎,提供了近实时的查询能力和强大的聚合分析能力。与Elastic官方提供的其他组件(Beats、Logstash、Kibana)组合成Elastic Stack,提供了多种使用场景下数据摄入、清洗、存储、查询、可视化的完整解决方案,在搜索、日志分析、统计分析等领域有广泛应用。
morningchen
2018/12/29
2.6K0
Elasitcsearch底层系列之 Node启动过程源码解析
ElasticSearch安装与启动
检查JDK版本之后,我们可以下载并运行Elasticsearch。 二进制文件可以从 www.elastic.co/downloads 获取,过去版本也可以从中获取。 对于每个版本,您可以选择zip或tar存档,或DEB或RPM软件包。 为了简单起见,我们使用tar文件。
smartsi
2019/08/07
1.1K0
ElasticSearch 6.x 学习笔记:1.下载安装与配置
该文章介绍了如何在Elasticsearch集群上使用Kibana进行可视化搜索,包括安装Elasticsearch和Kibana,配置Elasticsearch和Kibana以在浏览器中访问,以及使用Kibana的UI界面进行搜索。同时,该文章还介绍了如何将Elasticsearch集群与Kibana部署在Docker容器中,以及使用Elasticsearch和Kibana进行多租户搜索。
程裕强
2018/01/02
3.9K0
ElasticSearch 6.x 学习笔记:1.下载安装与配置
ElasticSearch 安装报错整理
ElasticSearch 安装报错整理 单机安装报错 初次启动服务 /opt/elasticsearch-5.5.2/bin/elasticsearch 当使用root账户调用启动命令出现错误信息,错误提示信息如下: [2017-08-30T13:32:17,003][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [ELK-node1] uncaught exception in thread [main] org.elasticsearch.bo
程序员鹏磊
2018/02/09
3.2K0
蛋疼的ElasticSearch(一)之安装ElasticSearch
Interesting things 本周的计划暂时这样子的: 1.学习Solr和ElasticSearch 2.深入学习SpringBoot 3.了解日志系统的实现 What did you do today 先入为主 ElasticSearch是什么?百度词条是这样解释的。 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。ElasticSearch是用java开发的,并作为Apache许可条款下的开
用户2032165
2018/06/05
6930
netty案例,netty4.1中级拓展篇六《SpringBoot+Netty+Elasticsearch收集日志存储》
在实际的开发场景中,我们希望将大量的业务以及用户行为数据存储起来用于分析处理,但是由于数据量较大且需要具备可分析功能所以将数据存储到文件系统更为合理。尤其是一些互联网高并发级应用,往往数据库都采用分库分表设计,那么将这些分散的数据通过binlog汇总到一个统一的文件系统就显得非常有必要。
小傅哥
2020/02/28
7100
netty案例,netty4.1中级拓展篇六《SpringBoot+Netty+Elasticsearch收集日志存储》
Elasticsearch PHP MYSQL的同步使用
Elasticsearch是一个分布式,RESTful模式的高速搜索引擎,它使用标准的RESTful APIs和JSON,同时提供支持如java,python,php等的多种语言。下文将Elasticsearch简称ES。
双面人
2019/04/10
3.6K0
Elasticsearch PHP MYSQL的同步使用
推荐阅读
相关推荐
讲得最明白的Elasticsearch源码调试环境搭建教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验