当前位置: 首页 > news >正文

十、ElasticSearch 实战 - 源码运行

一、概述

想深入理解 Elasticsearch,了解其报错机制,并有针对性的调整参数,阅读其源码是很有必要的。此外,了解优秀开源项目的代码架构,能够提高个人的代码架构能力

阅读 Elasticsearch 源码的第一步是搭建调试环境,参考 <编译调试Elasticsearch 6.3.2源码> 这篇文章完成了对 7.10.2 版本源码的调试工作

二、软件环境

  • 操作系统:win11
  • Elasticsearch 源码版本:7.10.2
  • JDK版本:11.0.18
  • Gradle版本:4gradle-6.6.1-all.zip
  • IntelliJ IDEA 版本:2022.3.2

1. JDK 环境安装

Java SE Downloads 地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
环境配置教程参考

2. Elasticsearch源码

  • Elasticsearch github 源码托管地址:https://github.com/elastic/elasticsearch.git

elasticsearch 源码 7.10.2 版本的资源也可以从 CSDN 下载

3. Gradle 的安装包

  1. 查看 elasticsearch\gradle\wrapper\gradle-wrapper.properties 发现如下配置:
    • distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-all.zip
  2. 根据 https\://services.gradle.org/distributions/gradle-6.6.1-all.zip 网址下载 Gradle 的安装包
    • wget https://services.gradle.org/distributions/gradle-6.6.1-all.zip
    • 注意:强烈建议使用魔法
  3. 放置 gradle-6.6.1-all.zip 文件:
    • 复制 gradle-6.6.1-all.zipelasticsearch\gradle\wrapper 目录下,确保和 elasticsearch\gradle\wrapper\gradle-wrapper.properties 在同级目录。
  4. 修改 elasticsearch\gradle\wrapper\gradle-wrapper.properties 配置
    • distributionUrl=gradle-6.6.1-all.zip

三、源码运行配置

1. IDEA 导入源码项目

IDEA:File->Open->选中es源码路径下build.gradle->Open as Project
在这里插入图片描述
在这里插入图片描述

2. 配置JDK

在 Project Structure 中选择JDK版本
在这里插入图片描述

3. Import gradle project

关闭 IDEA,重新打开即可,
在这里插入图片描述
这个过程还是需要等一小会的
在这里插入图片描述

4. 添加源码运行依赖

  1. elasticsearch 源码运行依赖 config 和 modules ,否则启动失败。
    • 下载与 elasticsearch 源码同版本windows安装包。
    • 创建 home 目录,将同版本 windows 安装包的 configmodules 目录拷贝到 home 目录下。
  2. elasticsearch 源码运行添加安全策略,否则启动失败。
    • config 目录下新建 java.policy 文件,内容如下
    grant {permission javax.management.MBeanTrustPermission "register";permission java.lang.RuntimePermission "createClassLoader";permission java.lang.RuntimePermission "setContextClassLoader";permission java.lang.RuntimePermission "getClassLoader";
    };
    

5. 配置启动参数

  1. 修改运行设置添加系统参数(推荐)

    • 在 IDEA 中 Run/Debug ConfigurationsVM options:添加如下 VM 启动参数
    -Des.path.conf=E:\Workshop\JAVA\elasticsearch-7.10.2\home\config
    -Des.path.home=E:\Workshop\JAVA\elasticsearch-7.10.2\home
    -Djava.security.policy=E:\Workshop\JAVA\elasticsearch-7.10.2\home\config\java.policy
    -Dlog4j2.disable.jmx=true
    
  2. 修改源码添加系统参数(偶尔会失败)

    • 在 elasticsearch 源码 elasticsearch-7.10.2/server/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java 文件中添加如下系统参数:
    public static void main(final String[] args) throws Exception {// 参数配置System.setProperty("es.path.conf","E:\\Workshop\\JAVA\\elasticsearch-7.10.2\\home\\config");System.setProperty("es.path.home", "E:\\Workshop\\JAVA\\elasticsearch-7.10.2\\home");System.setProperty("java.security.policy", "E:\\Workshop\\JAVA\\elasticsearch-7.10.2\\home");overrideDnsCachePolicyProperties();}
    

6. 修改运行设置

在这里插入图片描述

  1. 配置 Main class -> elasticsearch.benchmarks.main -> org.elasticsearch.bootstrap.Elasticsearch
  2. Modify options -> 添加 Add dependencies with "Provided" scope to classpath

7. 启动 elasticsearch

运行 Elasticsearch.main() 方法,启动 elasticsearch在这里插入图片描述

启动成功,访问 http://localhost:9200,返回如下:

{"name": "","cluster_name": "elasticsearch","cluster_uuid": "xrqe0WBqRACiBncjj-ANuA","version": {"number": "7.10.2","build_flavor": "unknown","build_type": "unknown","build_hash": "unknown","build_date": "unknown","build_snapshot": true,"lucene_version": "8.7.0","minimum_wire_compatibility_version": "6.8.0","minimum_index_compatibility_version": "6.0.0-beta1"},"tagline": "You Know, for Search"
}

在这里插入图片描述
开心!

四、错误调整

1. 错误一

ERROR: the system property [es.path.conf] must be set

  • 问题原因:
    未配置 es.path.conf 参数

  • 解决方法:
    参考 3.5 配置 es.path.conf 参数

2. 错误二

Exception in thread "main" java.lang.IllegalStateException: path.home is not configured

  • 问题原因:
    未配置 es.path.home 参数

  • 解决方法:
    参考 3.5 配置 es.path.home 参数

3. 错误三

2023-04-25 22:21:11,044 main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:358)
  • 问题原因:
    未设置安全策略文件 java.policy 或未设置 log4j2.disable.jmx=true

  • 解决方法:
    参考 3.5 配置 security.policy 参数

4. 错误四

[2023-04-25T22:27:38,439][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [] fatal error in thread [main], exiting
java.lang.NoClassDefFoundError: org/elasticsearch/plugins/ExtendedPluginsClassLoader
  • 问题原因:
    IDEA 启动选项中未添加 Add dependencies with "Provided" scope to classpath

  • 解决方法:
    参考 3.6 修改运行设置

http://www.lryc.cn/news/62884.html

相关文章:

  • GPT-3 论文阅读笔记
  • 方案解析丨数字人主播如何成为电商直播新标配
  • Python最全迭代器有哪些?
  • ESP32 网络计时器,包含自动保存
  • 【ChatGPT】阿里版 ChatGPT 突然官宣意味着什么?
  • IPEmotion控制模块-PID循环应用
  • 【元分析研究方法】学习笔记2.检索文献(含100种学术文献搜索清单链接)
  • 题目:16版.自由落体
  • 视频可视化搭建项目,通过简单拖拽方式快速生产一个短视频
  • network-1 4 layer internet model
  • 计算机网络笔记(横向)
  • 0.redis-实践
  • Redux的基本使用,从入门到入土
  • GDOUCTF2023-部分re复现
  • Java学习17(IO模型详解)
  • Vue-全局过滤器以及进阶操作
  • 财报解读:涅槃重生之后,新东方还想再造一个“文旅甄选”?
  • 华为OD机试 - 过滤组合字符串(Python)
  • maven简单使用
  • HTML学习笔记一
  • 人工智能十大流行算法,通俗易懂讲明白
  • 支持中英双语和多种插件的开源对话语言模型,160亿参数
  • SQL基础培训10-复杂查询原理
  • 如何搭建信息存储中心?资源共享方案之搭建ftp个人服务器
  • 【LeetCode】188. 买卖股票的最佳时机 IV
  • android studio RadioButton单选按钮
  • AI大模型快速发展,我们该如何应对?
  • java多线程BlockingDeque的三种线程安全正确退出方法
  • 从STM32F407到AT32F407(一)
  • 【数据结构】顺序表和链表基本实现(含全代码)