十、ElasticSearch 实战 - 源码运行

news2024/12/30 3:04:46

一、概述

想深入理解 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.coloradmin.cn/o/461466.html

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

相关文章

C++的左值引用和右值引用

引用和指针的区别&#xff1f; 引用必须初始化&#xff0c;指针可以不初始化 定义一个指针和引用汇编指令上一样的&#xff0c;引用底层还是指针 引用只有一级引用&#xff0c;没有多级引用&#xff0c;而指针可以有多级指针 定义一个引用变量和指针变量&#xff0c;它们汇…

【c语言】函数指针详解

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…

Android Framework—Service

介绍 Service是一种可以在后台执行长时间运行操作而不提供界面的应用组件。服务可以由其他应用组件启动&#xff0c;而且即使用户切换到其他应用&#xff0c;服务仍将在后台继续运行。此外&#xff0c;组件可以通过绑定到服务与之进行交互&#xff0c;甚至是执行进程之间的通信…

Unreal5 第三人称射击游戏 角色基础制作

快捷键 快捷键 ctrlE 可以快速打开相关蓝图类&#xff0c;直接在场景选中添加到场景中的对象即可。 调试蓝图 选中调试对象&#xff0c;选中需要调试的实例&#xff0c;即可查看当前角色的状态。 动画实例在运行的时候&#xff0c;也可以在右侧箭头获取当前场景已经生成的实…

Linux socket编程(二):多进程服务器

一、多进程服务器 最简单的的服务器程序执行流程为&#xff1a;创建socket → \rightarrow → 绑定监听的IP地址和端口 → \rightarrow → 监听客户端连接 → \rightarrow → 接受/发送数据。当服务端调用read阻塞等待一个客户端发来数据时&#xff0c;无法同时响应其它客户…

七、CANdelaStudio入门-Variant概念与应用

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的Variant概念与应用,欢迎各位朋友订阅、…

Redis实现互相关注功能

Redis实现互相关注功能 我们要实现关注功能&#xff0c;首先&#xff0c;我们需要得到关注的目标ID&#xff1a; PutMapping("/{id}/{isFollow}")public Result followUser(PathVariable("id") Long id,PathVariable("isFollow") Boolean isFol…

下一代大数据分布式存储技术Apache Ozone初步研究

文章目录 概述定义特性架构总体架构写数据读数据 部署安装方式安装Docker启动Docker-compose启动企业预置型(On Premise)安装 实践命令行接口Ofs (Hadoop兼容)Recon API 概述 定义 Apache Ozone 官网地址 https://ozone.apache.org/ 最新版本1.3.0 Apache Ozone 官网最新文档地…

Java线程间通信方式(2)

前文了解了线程通信方式中的Object.wait/Object.notify以及Semaphore,接下来我们继续了解其他的线程间通信方式。 CountDownLatch CountDownLatch利用一个指定的计数初始化&#xff0c;由于调用了countDown方法&#xff0c;await方法会阻塞直到当前技术为0&#xff0c;之后所…

PHP-8.2.5+IIS10 php-cgi.exe - FastCGI 进程意外退出

服务器信息&#xff1a; Windows Server 2019 Standard. Internet Information Services(Version 10.0.17763.1) PHP版本&#xff1a; PHP Version 8.2.5 php-8.2.5-nts-Win32-vs16-x64 下载地址&#xff1a;https://windows.php.net/download#php-8.2 错误信息&#xff1a; H…

【网络】-- UDP协议

目录 传输层 再谈端口号 端口号范围划分 认识知名端口号&#xff08;Well-Know Port Number&#xff09; 两个问题 netstat pidof UDP协议 UDP的特点 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 传输层 负责数据能够从发送端传输接收端。 再谈端口号 端…

【ROS】ubuntu18.04安装ROS(ROS1 Melodic)

1、添加中科大ROS源 1.1、添加源 sudo sh -c . /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ lsb_release -cs main" > /etc/apt/sources.list.d/ros-latest.list1. 2、添加公钥 sudo apt-key adv --keyserver hkp://keyser…

输入捕获实验

实验内容 用TIM5 的通道 1&#xff08;PA0&#xff09;来做输入捕获&#xff0c;捕获 PA0 上高电平的脉宽&#xff08;用 WK_UP 按键输入高电平&#xff09;&#xff0c;通过串口打印高电平脉宽时间。 输入捕获简介 输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32 的…

新库上线 | 全国工艺美术大师信息数据

全国工艺美术大师信息数据 一、数据简介 作为物质产品&#xff0c;工艺美术反映着一定时代、一定社会的物质的和文化的生产水平&#xff1b;作为精神产品&#xff0c;它的视觉形象&#xff08;造型、色彩、装饰&#xff09;又体现了一定时代的审美观。我国工艺美术品的制作较早…

java基础+注解笔记【狂神说java】

基础部分–总结 基础包的命名 //一般为域名倒置 page com.yang.base基础语法 类和方法 根据不同的写法–大小写的差异可以判别是类对象还是方法名 类的首字母都要大写&#xff0c;方法首字母小写可以理解为&#xff0c;类对象是class&#xff0c;方法是函数 类对象 方法 使…

浅谈在 Vue2 和 Vue3 中计算属性和侦听器的一些变化

文章目录 &#x1f4cb;前言&#x1f3af;计算属性&#x1f3af;侦听器&#x1f4dd;最后 &#x1f4cb;前言 计算属性 computed 和侦听器 watch 都是 Vue.js 框架中用来响应式更新视图的重要概念。因此无论是在哪个版本&#xff0c;它们都是不可缺少的概念&#xff0c;这篇文…

音视频八股文(5)--SDL音视频渲染实战。会使用就行,不需要深究。

01-SDL子系统 SDL将功能分成下列数个子系统&#xff08;subsystem&#xff09;&#xff1a; ◼ SDL_INIT_TIMER&#xff1a;定时器 ◼ SDL_INIT_AUDIO&#xff1a;音频 ◼ SDL_INIT_VIDEO&#xff1a;视频 ◼ SDL_INIT_JOYSTICK&#xff1a;摇杆 ◼ SDL_INIT_HAPTIC&#xff1…

第十三章 享元模式

文章目录 前言一、享元模式基本介绍二、享元模式解决网站展现项目完整代码WebSite 抽象网站类User 外部状态用户内部状态网站 ConcreteWebSite网站工厂产生网站和负责共享&#xff08;池&#xff09; WebSiteFactoryClint 测试 三、享元模式在JDK-Interger的应用源码分析四、享…

ERBuilder Data Modeler Crack

ERBuilder Data Modeler Crack 为过程、视图和触发器添加了人工智能驱动的描述生成。 添加了一种新的自动排列方法&#xff0c;可以轻松地排列和组织表格&#xff0c;从而简化ER图的可视化显示。 添加了使用两种身份验证方法创建到远程服务器的SSH连接的功能&#xff1a;密码身…

Linux - 第10节 - Linux多线程(二)

1.Linux线程同步 1.1.同步概念与竞态条件 线程互斥的设计是正确的&#xff0c;但线程互斥在某些场景下并不合理&#xff0c;有可能导致饥饿问题。 饥饿问题&#xff1a;某个执行流访问完临界资源后释放锁&#xff0c;此时相较于其他执行流&#xff0c;该执行流离锁更近&#x…