十、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 修改运行设置

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt5下Qxlsx模块安装及使用

Qt5下Qxlsx模块安装及使用 一、Qt5下Qxlsx模块安装及使用1. 未安装Qxlsx的程序效果2. 安装Perl&#xff08;编译Qxlsx源码用&#xff09;2.1 下载 ActivePerl 5.282.2 安装 ActivePerl 5.28 3. 下载并编译Qxlsx源码3.1 下载Qxlsx源码3.2 编译Qxlsx源码 4. 将编译好的文件复制到…

26- OCR 基于PP-OCRv3的液晶屏读数识别

要点&#xff1a; 液晶屏识别示例github 地址 1. 简介 本项目基于PaddleOCR开源套件&#xff0c;以PP-OCRv3检测和识别模型为基础&#xff0c;针对液晶屏读数识别场景进行优化。主要是针对各种仪表进行识别&#xff1a; 2 安装环境 安装Git&#xff1a;Git 详细安装教程 # 首…

Git基础

文章目录 1. Git基础1.1 版本管理1.1.1 什么是版本管理1.1.2 人为维护文档版本的问题 1.2 Git 是什么1.3 Git 安装1.4 Git基本工作流程1.5 Git 的使用1.5.1 Git 使用前配置1.5.2 提交步骤1.5.3 撤销 2. Git进阶2.1 分支2.1.1 分支细分2.1.2 分支命令 2.2 暂时保存更改 1. Git基…

鸿蒙Hi3861学习三-第一个实例程序Hello_world

一、简介 前两章介绍了环境搭建、烧录和编译。这一节&#xff0c;来介绍实现第一个经典代码“hello world”。 先介绍小熊派的目录结构&#xff0c;该目录结构延续了OpenHarmony官方目录结构。 二、实操 1.搭建代码架构 1).新建项目文件夹hello_world cd bearpi-hm_nano/appli…

【VM服务管家】VM4.0平台SDK_2.3 控件嵌入类

目录 2.3.1 渲染结果&#xff1a;通过绑定流程或模块获取渲染结果的方法2.3.2 渲染控件&#xff1a;渲染控件加载本地图像的方法2.3.3 渲染控件&#xff1a;渲染控件上自定义图形的方法2.3.4 参数控件&#xff1a;参数配置控件绑定模块的方法2.3.5 控件颜色&#xff1a;控件颜色…

Java新提案,最终还是靠近C#了

Java是一门非常优秀的编程语言&#xff0c;特别是生态繁荣&#xff0c;成熟的轮子很多&#xff0c;各种解决方案都有&#xff0c;要开发一个项目&#xff0c;只需把轮子组装&#xff0c;并根据自己的项目&#xff0c;进行自定义修改&#xff0c;可以极大地提升开发效率。 曾经…

【算法】【算法杂谈】判断点是否在三角形内部(面积法和向量法)

目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介…

react-antd-procomponents组件库 ProTable表格实现跨页多选。

table表格多选时所需要的api 1.onSelect - 单行选择(用户手动选择/取消选择某行的回调) 2.onSelectMultiple - 多行选择&#xff08;用户使用键盘 shift 选择多行的回调&#xff09; 3.onSelectAll - 全选全不选(用户手动选择/取消选择所有行的回调) 4.onChange - 每次选择行都…

Page管理机制

Page页分类 Buffer Pool 的底层采用链表数据结构管理Page。在InnoDB访问表记录和索引时会在Page页中缓存&#xff0c;以后使用可以减少磁盘IO操作&#xff0c;提升效率 Page根据状态可以分为三种类型&#xff1a; - free page &#xff1a; 空闲page&#xff0c;未被使用 - …

耐腐蚀高速电动针阀在半导体硅片清洗机化学药液流量控制中的应用

摘要&#xff1a;化学药液流量的精密控制是半导体湿法清洗工艺中的一项关键技术&#xff0c;流量控制要求所用调节针阀一是开度电动可调、二是具有不同的口径型号、三是高的响应速度&#xff0c;四是具有很好的耐腐蚀性&#xff0c;这些都是目前提升半导体清洗设备性能需要解决…

2023/4/25总结

刷题&#xff1a; 第一周任务 - Virtual Judge (vjudge.net) 1.这一题的思路就是先排除前面和后面相等的&#xff0c;然后找到不等的情况&#xff0c;不等情况的下标开始前后都走&#xff0c;看看是不是和b数组构成了一个升序数组即可。 #include<stdio.h> #define Ma…

【数据结构】链表详解

本片要分享的内容是链表&#xff0c;为方便阅读以下为本片目录 目录 1.顺序表的问题及思考 1.链表的遍历 2.头部插入 2.1开辟空间函数分装 3.尾部插入 纠正 4.尾部删除 5.头部删除 6.数据查找 7.任意位置插入 1.顺序表的问题及思考 上一篇中讲解了顺序表中增删查…

从源码全面解析LinkedBlockingQueue的来龙去脉

一、引言 并发编程在互联网技术使用如此广泛&#xff0c;几乎所有的后端技术面试官都要在并发编程的使用和原理方面对小伙伴们进行 360 的刁难。 二、使用 对于阻塞队列&#xff0c;想必大家应该都不陌生&#xff0c;我们这里简单的介绍一下&#xff0c;对于 Java 里面的阻塞…

Python | 基于LendingClub数据的分类预测研究Part01——问题重述+特征选择+算法对比

欢迎交流学习~~ 专栏&#xff1a; 机器学习&深度学习 本文利用Python对数据集进行数据分析&#xff0c;并用多种机器学习算法进行分类预测。 具体文章和数据集可以见我所发布的资源&#xff1a;发布的资源 Python | 基于LendingClub数据的分类预测研究Part01——问题重述特…

在.NET Core中正确使用HttpClient的方式

HttpClient 是 .NET Framework、.NET Core 或 .NET 5以上版本中的一个类&#xff0c;用于向 Web API 发送 HTTP 请求并接收响应。它提供了一些简单易用的方法&#xff0c;如 GET、POST、PUT 和 DELETE&#xff0c;可以很容易地构造和发送 HTTP 请求&#xff0c;并处理响应数据。…

【Excel统计分析插件】上海道宁为您提供统计分析、数据可视化和建模软件——Analyse-it

Analyse-it是Microsoft Excel中的 统计分析插件 它为Microsoft Excel带来了 易于使用的统计软件 Analyse-it在软件中 引入了一些新的创新统计分析 Analyse-it与 许多Excel加载项开发人员不同 使用完善的软件开发和QA实践 包括单元/集成/系统测试 敏捷开发、代码审查 …

虹科案例|虹科Micronor光纤传感器,实现核磁共振新应用!

PART 1 背景介绍 光纤传感器已成为推动MRI最新功能套件升级和新MRI设备设计背后的关键技术。将患者的某些活动与MRI成像系统同步是越来越受重视的需求。磁场强度随着每一代的发展而增大&#xff0c;因此&#xff0c;组件的电磁透明度在每一代和新应用中变得更加重要。 光学传…

《Netty》从零开始学netty源码(四十六)之PooledByteBuf

PooledByteBuf Netty中一大块内存块PoolChunk默认大小为4MB&#xff0c;为了尽可能充分利用内存会将它切成很多块PooledByteBuf&#xff0c;PooledByteBuf的类关系图如下&#xff1a; PooledUnsafeDirectByteBuf与PooledUnsafeHeapByteBuf直接暴露对象的底层地址。 PooledByt…

【英语】100个句子记完7000个托福单词

其实主要的7000词其实是在主题归纳里面&#xff0c;不过过一遍100个句子也挺好的&#xff0c;反正也不多。 文章目录 Sentence 01Sentence 02Sentence 03Sentence 04Sentence 05Sentence 06Sentence 07Sentence 08Sentence 09Sentence 10Sentence 11Sentence 12Sentence 13Sent…

数据分析中常见标准的参考文献

做数据分析过程中&#xff0c;有些分析法方法的标准随便一搜就能找到&#xff0c;不管是口口相传还是默认&#xff0c;大家都按那样的标准做了。日常分析不细究出处还可以&#xff0c;但是正式的学术论文你需要为你写下的每一句话负责&#xff0c;每一个判断标准都应该有参考文…