elasticsearch8.1源码编译笔记

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: elasticsearch8.1源码编译笔记

环境

  • idea 2022.1.3
  • jdk17
  • macos 10.14.6
  • gradle 7.4.2(代码自动下载)

前置准备

  • idea 设置 JDK17
  • idea 设置 gradle JVMProject JVM
  • gradle 设置 aliyun加速(可选),有时设置了不如不设置更好

开始导入

  • 导入项目 使用 idea open项目下的 build.gradle,等待编译结束
  • 编译 8.1版本的发行包 这一步会下载所需的依赖 jdk,如果报错可以多尝试几次,或者切换网络,执行该命令时, 注意终端jdk环境
./gradlew localDistro
  • 复制发行包到项目根目录同级目录新建 home文件夹下,文件结构如下
├── elasticsearch
│   ├── BUILDING.md
│   ├── CONTRIBUTING.md
│   ├── LICENSE.txt
│   ├── NOTICE.txt
│   ├── README.asciidoc
│   ├── README.md
│   ├── TESTING.asciidoc
│   ├── Vagrantfile
│   ├── benchmarks
│   ├── build
│   ├── build-conventions
│   ├── build-tools
│   ├── build-tools-internal
│   ├── build.gradle
│   ├── ccr
│   ├── checkstyle_ide.xml
│   ├── client
│   ├── dev-tools
│   ├── distribution
│   ├── docs
│   ├── gradle
│   ├── gradle.properties
│   ├── gradlew
│   ├── gradlew.bat
│   ├── libs
│   ├── licenses
│   ├── modules
│   ├── plugins
│   ├── qa
│   ├── rest-api-spec
│   ├── server
│   ├── settings.gradle
│   ├── test
│   └── x-pack
├── home
│   ├── LICENSE.txt
│   ├── NOTICE.txt
│   ├── README.asciidoc
│   ├── bin
│   ├── config
│   ├── data
│   ├── jdk.app
│   ├── lib
│   ├── logs
│   ├── modules
└── └── plugins
  • 启动 找到 Elasticsearch.java 运行 main方法
  • 报错1: ERROR: the system property [es.path.conf] must be set
-Des.path.conf=/cxt/codework/github/elasticsearch/8.1/home/config
  • 报错2: path.home is not configured
-Des.path.home=/cxt/codework/github/elasticsearch/8.1/home
  • 报错3: main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
  • 创建一个 java.policy,内容如下(完整内容在末尾获取)
grant {
    permission javax.management.MBeanTrustPermission "register";
};

运行时指定

-Djava.security.policy=/cxt/codework/github/elasticsearch/8.1/home/config/java.policy
  • 报错4: access denied ("java.lang.RuntimePermission" "createClassLoader") 刚才的 java.policy文件中增加如下(完整内容在末尾获取)
permission java.lang.RuntimePermission "createClassLoader";
  • 报错5: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "setContextClassLoader") 刚才的 java.policy文件中增加如下(完整内容在末尾获取)
permission java.lang.RuntimePermission "setContextClassLoader";
  • 报错6: access denied ("org.elasticsearch.secure_sm.ThreadPermission" "modifyArbitraryThreadGroup") 刚才的 java.policy文件中增加如下(完整内容在末尾获取)
permission org.elasticsearch.secure_sm.ThreadPermission "modifyArbitraryThreadGroup";
  • 报错7:报错如下(完整内容在末尾获取)
Caused by: java.lang.IllegalArgumentException: Unknown codebases [codebase.elasticsearch-plugin-classloader, codebase.elasticsearch, codebase.elasticsearch-secure-sm] in policy file [file:/cxt/codework/github/elasticsearch/8.1/elasticsearch/server/out/production/resources/org/elasticsearch/bootstrap/security.policy]

解决如下,找到 server/src/main/resources/org/elasticsearch/bootstrap/security.policy,注释掉一下三个 [codebase.elasticsearch-plugin-classloader, codebase.elasticsearch, codebase.elasticsearch-secure-sm]

//grant codeBase "${codebase.elasticsearch-plugin-classloader}" {
  // needed to create the classloader which allows plugins to extend other plugins
  //permission java.lang.RuntimePermission "createClassLoader";
//};
//grant codeBase "${codebase.elasticsearch-secure-sm}" {
//  permission java.security.AllPermission;
//};
 Elasticsearch core:
 These are only allowed inside the server jar, not in plugins
//grant codeBase "${codebase.elasticsearch}" {
  // needed for loading plugins which may expect the context class loader to be set
//  permission java.lang.RuntimePermission "setContextClassLoader";
//};

总结

  • 完整的启动参数设置如下
-Des.path.conf=/cxt/codework/github/elasticsearch/8.1/home/config
-Des.path.home=/cxt/codework/github/elasticsearch/8.1/home
-Djava.security.policy=/cxt/codework/github/elasticsearch/8.1/home/config/java.policy
-Dlog4j2.disable.jmx=true

也可以在Elasticsearch.main方法执行前通过代码的形式指定环境变量(可选)

System.setProperty("es.path.conf","/cxt/codework/github/elasticsearch/8.1/home/config");
System.setProperty("es.path.home", "/cxt/codework/github/elasticsearch/8.1/home");
System.setProperty("log4j2.disable.jmx", "true");    System.setProperty("java.security.policy","/cxt/codework/github/elasticsearch/8.1/home/config/java.policy");
  • 完整的 java.policy文件如下
grant {
    permission javax.management.MBeanTrustPermission "register";
    permission java.lang.RuntimePermission "createClassLoader";
    permission java.lang.RuntimePermission "setContextClassLoader";
    permission org.elasticsearch.secure_sm.ThreadPermission "modifyArbitraryThreadGroup";
};


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
6月前
|
JSON 监控 Java
Elasticsearch 8.X reindex 源码剖析及提速指南
Elasticsearch 8.X reindex 源码剖析及提速指南
90 0
|
3月前
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码【完结篇】
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码【完结篇】
53 0
|
5月前
|
安全
【Elasticsearch6】安装笔记
【Elasticsearch6】安装笔记
37 2
|
6月前
|
Kubernetes Java 索引
Elasticsearch 源码探究 001——故障探测和恢复机制
Elasticsearch 源码探究 001——故障探测和恢复机制
84 0
|
6月前
|
Java iOS开发 MacOS
Elasticsearch 6.5源码编译最新版
Elasticsearch 6.5源码编译最新版
42 0
Elasticsearch 6.5源码编译最新版
|
6月前
|
关系型数据库 MySQL 索引
|
6月前
|
Java iOS开发 MacOS
Elasticsearch7.4源码编译记录
Elasticsearch7.4源码编译记录
54 0
|
6月前
|
自然语言处理 安全 关系型数据库
|
6月前
|
NoSQL Java API
SpringBoot【ElasticSearch集成 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(依赖+配置+增删改查测试源码)推荐使用
SpringBoot【ElasticSearch集成 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(依赖+配置+增删改查测试源码)推荐使用
111 0
|
6月前
|
Java API
SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)
SpringBoot【集成ElasticSearch 01】2种方式的高级客户端 RestHighLevelClient 使用(依赖+配置+客户端API测试源码)
242 0