Elasticsearch源码调试实操

环境准备

请严格按照以下版本操作,不同软件版本可能会出现兼容性问题导致失败
1.es源码:https://github.com/elastic/elasticsearch/archive/v7.8.0.zip
2.gradle-6.5-all.zip:https://services.gradle.org/distributions/
3.jdk14:https://www.oracle.com/java/technologies/downloads/
4.Groovy:https://dl.bintray.com/groovy/maven/apache-groovy-sdk-3.0.5.zip
5.es客户端:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-8-0

安装完设置gradle、Jdk、groovy的环境变量。

操作步骤

1.Gradle 换源成阿里云镜像源,提升依赖下载速度。在GRADLE_HOME 目录中的 init.d 路径下,创建文件 init.gradle ,并贴上如下内容:

allprojects{repositories {def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/'def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/'all { ArtifactRepository repo ->if(repo instanceof MavenArtifactRepository){def url = repo.url.toString()if (url.startsWith('https://repo1.maven.org/maven2/')) {project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."remove repo}if (url.startsWith('https://jcenter.bintray.com/')) {project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."remove repo}if (url.startsWith('https://plugins.gradle.org/m2/')) {project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."remove repo}}}maven { url ALIYUN_REPOSITORY_URL }maven { url ALIYUN_GRADLE_PLUGIN_URL }}
}
  1. ElasticSearch 源码包换 Gradle 分发地址
    打开你下载下来的 ElasticSearch 源码包,进入目录 gradle/wrapper。然后将 之前下载的 gradle-6.5-all.zip,拷贝到该目录下。再打开文件 gradle-wrapper.properties,修改配置如下:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=gradle-6.5-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionSha256Sum=c9910513d0eed63cd8f5c7fec4cb4a05731144770104a0871234a4edc3ba3cef

3.导入源码,idea配置gradle
gradle用户主目录写你es源码的gradle目录,我的是D:/IDEA/elasticsearch-7.8.0/gradle;gradle JVM选JDK14,重新加载gradle项目的,等待es源码包构建完成

4.配置启动器
①创建一个Application编辑它。
②启动类(main class):org.elasticsearch.bootstrap.Elasticsearch
③classpath路径:elasticsearch-7.8.0.server.main
④jdk或jre环境选14
⑥VM Option:-Des.path.home=D:\elasticsearch\elasticsearch-7.8.0-windows-x86_64\elasticsearch-7.8.0
-Des.path.conf=D:\elasticsearch\elasticsearch-7.8.0-windows-x86_64\elasticsearch-7.8.0\config
-Dlog4j2.disable.jmx=true
-Xmx4g
-Xms4g
(这个千万注意:不要填到程序参数program arguments那去了,我就被坑了半天!!)
-Des.path.home – 指定上文中你所下载的 ElasticSearch 客户端安装路径;
-Des.path.conf – 指定客户端安装路径中的配置路径
⑧打开你所配置的 JAVA_HOME/conf/security/java.policy 文件,
在文件中的 grant 结构末尾加上以下权限指令:

permission java.lang.RuntimePermission "createClassLoader";

⑨记得在配置文件中设置 node.name, 不然会启动失败,报空指针错误
tips:因为es启动需要conf,data,log等四个文件,源码内部没有所以要指向外部,之前下载es客户端也就是用在这,同理如果你要连接linux上的es就要在linux环境装es并远程调试源码,总之源码要和es客户端一个环境

好了,到这里就可以启动源码了。正常来说没有问题,如果不幸还有问题完全可以打断点进行调试排查问题。

补充:远程remote调试Linux环境es源码
未完待续…………

常见启动报错

1.classLoad 加载报错:java.lang.NoClassDefFoundError: org/elasticsearch/plugins/ExtendedPluginsClassLoader
解决方法:将compileOnly project(‘:libs:plugin-classloader’)的compileOnly改为compile即可,同时创建application启动器 时User classpath of module 也要勾选好
2.classLoad 权限报错:org.elasticsearch.bootstrap.StartupException: java.security.AccessControlException: access denied (“java.lang.RuntimePermission” “createClassLoader”)
解决方法:打开你所配置的 JAVA_HOME/conf/security/java.policy 文件,
在文件中的 grant 结构末尾加上以下权限指令:
permission java.lang.RuntimePermission “createClassLoader”;
permission javax.management.MBeanTrustPermission “register”;

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

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

相关文章

英语写作中“提高”、“加强”、“促进”boost、bolster、foster、facilitate等的用法

一、由于“加强”、“促进”是非常常用的表达,所以这方面的词汇比较多,简单的有improve、enhance、promote、strengthen 、reinforce 、encourage 等,另外还有boost、bolster、foster、facilitate 等。写作中为了避免improve和enhance 等简单…

min_free_kbytes

转自:技术分享 | MemAvailable 是怎么计算的-腾讯云开发者社区-腾讯云 背景 前两天安装 OceanBase 时遇到一个小问题: 很明显,安装OB时要求服务器可用内存至少 8G,不达标就无法安装。为了凑这3台10G内存的服务器我已经费了不少劲…

vue-页面使用websocket建立连接用于测试

前言 websocket双向通讯在项目中经常使用,但一般都是封装成第三方包,登录,退出建立连接。 这样使用是合理,但不便于测试,其实在.vue页面通过new方式可以直接使用websocket。 在页面实例加载完成之后连接websocket&am…

Yunfly 一款高效、性能优异的node.js企业级web框架

介绍 Yunfly 一款高性能 Node.js WEB 框架, 使用 Typescript 构建我们的应用。 使用 Koa2 做为 HTTP 底层框架, 使用 routing-controllers 、 typedi 来高效构建我们的 Node 应用。 Yunfly 在 Koa 框架之上提升了一个抽象级别, 但仍然支持 Koa 中间件。在此基础之上, 提供了一…

运动控制-PID算法

PID原理介绍及C#编程仿真 https://blog.csdn.net/panjinliang066333/article/details/104428683

【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群功能分析)

探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群功能分析) Redis集群的出现背景提升性能扩展性 Redis集群概述Redis Cluster特性分布Redis Cluster的Failover机制Redis集群节点宕机集群如何判断节点是否挂掉集群进入失败状态的必要条件 Fai…

jmeter随记2:压测

jmeter随记1:压测 简述一、压测步骤二、观察cpu和内存占用情况三、查看磁盘占用情况 简述 关于压测,jmeter更直观的作用是用来编写压测脚本【请求和压测策略】,然后在linux服务器上执行,也可以在本地执行,压测执行脚本在启动jmet…

Linux:入门学习知识及常见指令

文章目录 入门介绍操作系统的概念Linux机器的使用Linux上的指令 对文件知识的补充文件的定义和一些含义文件和目录的存储绝对路径和相对路径 ls指令pwd指令cd指令touch指令mkdir指令rmdir指令rm指令man指令cp指令mv指令cat指令more指令echo指令输出重定向 less指令find指令grep…

5、joern安装

文章目录 一、安装环境二、安装步骤1、joern地址2、安装中可能出现的问题 一、安装环境 1. java 8   2. gradle 2.0.0(按照官网步骤安装)   3. Graphviz (sudo apt install graphviz-dev)   4. python > 3.5 二、安装步骤 1、joern地址 joern地址 2、安装中可能出…

Docker配置阿里云容器镜像加速

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

白话机器学习笔记(三)评估已建立的模型

模型评估 在进行回归和分类时,为了进行预测,我们定义了函数 f θ ( x ) f_\theta(x) fθ​(x),然后根据训练数据求出了函数的参数 θ \theta θ。 如何预测函数 f θ ( x ) f_\theta(x) fθ​(x)的精度?看它能否很好的拟合训练数…

【玩转Linux】标准io缓冲区的操作

(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…

[Golang] Viper原理以及详细使用案例

文章目录 什么是 Viper?基础配置引入依赖:动态监听原理分析:监听原理分析 Config.yaml文件配置Viper文件配置 什么是 Viper? 介绍:用于处理配置文件中解析和读取配置文件 优点:支持多种配置格式&#xff0…

新老联手,火花四溅?大众汽车与小鹏汽车达成长期合作框架协议

7 月 26 日资讯,大众汽车宣布与小鹏汽车达成长期合作框架协议,并在官网中正式宣布,大众是老牌油车领军代表,小鹏则是新势力中的佼佼者,新老强强联手,又会碰撞出怎样的火花呢? 现阶段大众计划与…

rust学习-线程

Rust 标准库只提供了 1:1 线程模型 Rust 是较为底层的语言,如果愿意牺牲性能来换取抽象,以获得对线程运行更精细的控制及更低的上下文切换成本,使用实现了 M:N 线程模型的 crate 示例 use std::thread; use std::time::Duration;fn main() …

Postman学习之常用断言

什么是断言? 断言——就是结果中的特定属性或值与预期做对比,如果一致,则用例通过,如果不一致,断言失败,用例失败。断言,是一个完整测试用例所不可或缺的一部分,没有断言的测试用例…

leetcode每日一练-第98题- 验证二叉搜索树

一、思路 因为要验证多个节点是否是二叉搜索树,因此使用递归 二、解题方法 设计一个递归函数 helper(root, lower, upper) 来递归判断,函数表示考虑以 root 为根的子树,判断子树中所有节点的值是否都在 (l,r)的范围内(注意是开区间&#x…

git配置

git查看配置:git config --global --list git配置: git config --global user.name "yumlu" git config --global user.email "yumlucisco.com" git config --global core.editorvim git权限,添加密钥: …

工厂方法模式——多态工厂的实现

1、简介 1.1、概述 在工厂方法模式中,不再提供一个统一的工厂类来创建所有的产品对象,而是针对不同的产品提供不同的工厂,系统提供一个与产品等级结构对应的工厂等级结构。 1.2、定义 工厂方法模式(Factory Method Pattern&am…

Filebeat学习笔记

Filebeat基本概念 简介 Filebeat是一种轻量级日志采集器,内置有多种模块(auditd、Apache、Nginx、System、MySQL等),针对常见格式的日志大大简化收集、解析和可视化过程,只需一条命令即可。之所以能实现这一点&#…