ES 8.x的全程编译实践与问题解决

news2024/11/25 12:39:45

摘要

本文整理和记录ES 8.x的编译过程问题与解决方案,主要解决gradle下载问题以及国内源、Hadoop环境设置与hadoop附件缺失、编译时jdk版本指定、esql的compute超时报错、编译时警告导致编译失败等问题!

本地目录结构

.
├── build.sh
├── hadoop_deps
├── jdk21
├── plat_json
├── snap_fix
├── source
│   └── v8.11.4.tar.gz

build.sh是最后自己编写的自动化这个编译流程的脚本,在当前文档里不需要。
source里存放源码文件,其他见名知意。

源码下载

选择当前8.11的最后一个版本:

wget https://github.com/elastic/elasticsearch/archive/refs/tags/v8.11.4.tar.gz

附件下载与准备

jdk21

自己搜索下载和jdk 21版本,编译和运行时将使用该JDK(不要使用系统自带的Java):

# arm64版本
wget https://download.oracle.com/java/21/latest/jdk-21_linux-aarch64_bin.tar.gz

# x86_64版本
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz

根据自己的需要,如果只需要编译一个系统架构的,只需要下载1个对应的jdk即可。

Hadoop dll

配置环境变量:

export HADOOP_HOME=/usr/hdp/3.0.1.0-187/hadoop

export PATH=$HADOOP_HOME/bin:$PATH

在之前编译时发现即使是在Linux平台编译,源码中也是强制需要Windows相关的包。所以,本着能不改则不改的剃刀原则,搜索下载好以下文件:

  • hadoop.dll
  • hdfs.dll
  • winutils.exe
## 下载地址可以参考:
 wget https://gitcode.com/cdarlint/winutils/blob/master/hadoop-3.1.0/bin/hadoop.dll
 wget https://gitcode.com/cdarlint/winutils/blob/master/hadoop-3.1.0/bin/hdfs.dll
 wget https://gitcode.com/cdarlint/winutils/blob/master/hadoop-3.1.0/bin/winutils.exe

注意,这些文件要放在Hadoop HOME的bin目录下。

网络类源码修改

由于gradle的初始地址网络连接失败或网速差,编译时一定要先修改gradle的下载地址:

cd source/elasticsearch-8.11.4

vim gradle/wrapper/gradle-wrapper.properties

修改保存:

distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-8.5-all.zip

这样指定下载地址为国内的镜像源,感谢镜像服务提供者。

开始编译

环境基本信息

CentOS Linux release 7.4.1708 (Core)
Linux 5.4.6-1.el7.elrepo.x86_64

CPU: Intel(R) Xeon(R) Gold 6130T CPU @ 2.10GHz

指定Gradle使用的jdk

必须指定,否则报错。

cd source/elasticsearch-8.11.4
vim gradle.properties
# 按照以下内容修改,jdk位置改为自己下载解压的位置
# java homes resolved by environment variables

org.gradle.java.installations.auto-detect=true

org.gradle.java.home=/opt/ES8All/jdk21/amd/jdk-21.0.2

编译过程与问题

cd source/elasticsearch-8.11.4
./gradlew :distribution:archives:linux-tar:assemble
下载gradle

过程记录1:这一步就是前面配置的下载地址,如果不改为国内地址很可能下载失败!

Downloading https://mirrors.cloud.tencent.com/gradle/gradle-8.5-all.zip
....................10%.....................20%.....................30%.....................40%.....................50%.....................60%....................70%.....................80%.....................90%.....

初始化过程

过程记录2:

Starting a Gradle Daemon (subsequent builds will be faster)
<-------------> 0% INITIALIZING [25s]
> Evaluating settings > :build-tools > Resolve dependencies of :build-tools:classpath > jetty-bom-9.4.50.v20221201.pom > 4.7 KiB/17.2 KiB downloaded
> IDLE
> IDLE
配置过程

过程记录3:

> Task :build-tools-internal:compileJava
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

compute超时失败

过程记录4:
这是一个编译失败的坑(之前是编译成功的):x-pack:plugin Connect timed out。

A problem occurred configuring project ':x-pack:plugin:esql:compute'.
> java.net.SocketTimeoutException: Connect timed out

尝试重试多次还是一样的报错,配置了根目录的依赖下载源后也报错:

vim source/elasticsearch-8.11.4/build.gradle

repositories {
        mavenLocal()
        maven { url 'https://maven.aliyun.com/repository/public/' }
        mavenCentral()
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
}

尝试2,刷新或gradle clean一下重试:

./gradlew build --refresh-dependencies

./gradlew :distribution:archives:linux-tar:assemble --stacktrace

尝试,3,在下载好的 gradle 中的 init.d 文件夹中新建一个 init.gradle 文件,配置以下信息:

allprojects {
  repositories {
  	 mavenLocal()
    maven {
      url 'https://maven.aliyun.com/repository/public/'
    }
    maven {
      url 'https://maven.aliyun.com/repository/central'
    }
    mavenCentral()
  }
}

这样还是一样超时报错,估计不是网络的问题。

尝试4,其他版本的情况比较,重试了8.11.1和8.11.3以及8.11.4均为相同的报错!

我下载了8.12.2尝试,结果没有这个报错。因此,那8.11的编译问题仍然聚焦在esql的compute模块,通过对比文件差异,最后修改8.11的build文件解决(主要识别一下是否是大量改动)。

警告变Eroor

过程记录5:第二个坑,警告变Eroor,导致编译失败!

error: warnings found and -Werror specified
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

解决办法:

cd build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/

vim ElasticsearchJavaBasePlugin.java

# 注释掉这一行,在约126行:
compilerArgs.add("-Werror");
编译成功

过程记录6(ok,end):

distribution:archives:buildLinux > Resolve files of ...

编译成功:

编译产物的位置:

cd distribution/archives/linux-tar/build/distributions/

名字是:elasticsearch-8.11.4-SNAPSHOT-linux-x86_64.tar.gz

编译结果试用

解压包:

tar zxf elasticsearch-8.11.4-SNAPSHOT-linux-x86_64.tar.gz
cd elasticsearch-8.11.4-SNAPSHOT/

目录结构:

bin
config
jdk
lib
LICENSE.txt
logs
modules
NOTICE.txt
plugins
README.asciidoc

启动运行:

cd elasticsearch-8.11.4-SNAPSHOT/
chown -R elastic:elastic ./

su elastic
./bin/elasticsearch

# 以下是部分日志内容
Security is enabled
Profiling is enabled
starting ...
bound_addresses {[::1]:9300}, {127.0.0.1:9300}

需要注意,ES 8的用户验证和HTTP加密均为默认强制开启,并自动生成一个30分钟有效的token用于让kibana连接。

访问一下

重置密码:

./bin/elasticsearch-reset-password -u elastic -i

后台访问或者页面访问,要输入密码:

curl -k -u elastic:密码 https://localhost:9200

返回值:

{
  "name" : "worker",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "ohgsgVIlTpyxgCU0iOoU3Q",
  "version" : {
    "number" : "8.11.4-SNAPSHOT",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "unknown",
    "build_date" : "2024-03-19T00:46:56.182189965Z",
    "build_snapshot" : true,
    "lucene_version" : "9.8.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

Todo

源码修改编译

gradle离线编译ES

编译自动化

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

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

相关文章

交叉注意力融合时域、频域特征的FFT + CNN -BiLSTM-CrossAttention电能质量扰动识别模型

往期精彩内容&#xff1a; 电能质量扰动信号数据介绍与分类-Python实现-CSDN博客 Python电能质量扰动信号分类(一)基于LSTM模型的一维信号分类-CSDN博客 Python电能质量扰动信号分类(二)基于CNN模型的一维信号分类-CSDN博客 Python电能质量扰动信号分类(三)基于Transformer…

大模型第一讲笔记

目录 1、人工智能基础概念全景介绍... 2 1.1 人工智能全景图... 2 1.2 人工智能历史... 2 1.3 人工智能——机器学习... 3 监督学习、非监督学习、强化学习、机器学习之间的关系... 3 监督学习... 4 无监督学习... 5 强化学习... 5 深度学习... 6 2、语言模型的发展及…

MySQL 多表查询强化练习

环境准备 create table dept(id int PRIMARY KEY,dname VARCHAR(50),loc VARCHAR(50) ); insert into dept values (10,研发部,北京), (20,学工部, 上海), (30,销售部,广州 ), (40,财务部,深圳);create table job(id int PRIMARY KEY,jname VARCHAR(20),descripition VARCHAR(…

小米汽车定价较预期下调3万至5万,发布之前仍有可能微调

跨界造车的新势力小米汽车正逐渐揭开其神秘面纱。最新爆料显示&#xff0c;小米汽车内部对车辆的定价进行了讨论&#xff0c;较之前的预期下调了3万至5万的幅度。然而&#xff0c;在正式发布之前&#xff0c;这一价格仍有可能进行微调。 历经三年的精心筹备&#xff0c;小米汽车…

5G网络架构与组网部署03--5G网络组网部署

1. SA组网与NSA组网 &#xff08;1&#xff09;NSA 非独立组网&#xff1a;终端同时接入4G基站和5G基站&#xff0c;只能实现5G部分功能 &#xff08;2&#xff09;SA组网【最终目标】&#xff1a;5G基站可以单独提供服务&#xff0c;接入的是5G核心网 区别&#xff1a;同一时间…

双轨模式的优势、弊端与未来发展:私域分销的考量

在多元化的商业环境中&#xff0c;双轨模式作为一种独特的经营策略&#xff0c;已经逐渐引起了广泛关注。这种模式通过并行运行两个或多个互补的轨道&#xff0c;旨在实现资源整合、风险分散和灵活性增强。然而&#xff0c;与此同时&#xff0c;双轨模式也伴随着一些弊端和挑战…

FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+HLS图像缩放+多路视频拼接,提供4套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录本博已有的 SDI 编解码方案本方案的SDI接收发送本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收OSD动态字符叠加输出应用本方案的SDI接收HLS…

【LeetCode每日一题】1793. 好子数组的最大分数

文章目录 [1793. 好子数组的最大分数](https://leetcode.cn/problems/maximum-score-of-a-good-subarray/)思路&#xff1a;单调栈代码&#xff1a; 1793. 好子数组的最大分数 思路&#xff1a;单调栈 1遍历数组&#xff0c;用单调栈来找到该位置左边比该位置小的数&#xff0…

Linux/Monitored

Enumeration nmap 用 nmap 扫描了常见的端口&#xff0c;发现对外开放了 22,80,389,443,5667 端口&#xff0c;端口详细信息如下 ┌──(kali㉿kali)-[~/vegetable/HTB/Monitored] └─$ nmap -sC -sV -p 22,80,389,443,5667 10.10.11.248 Starting Nmap 7.93 ( https://nm…

印度金融公司数据遭泄露,泄露数据超过3TB

近期&#xff0c;印度非银行金融公司 IKF Finance 泄露了超过 3 TB 的敏感客户和员工数据&#xff0c;可能会暴露其整个用户群。 Cybernews 研究团队发现&#xff0c;一个配置错误的 MongoDB 实例导致超过 400 万份 IKF Finance 文档被公开。 企业通常使用 MongoDB 来组织和存…

Linux——程序地址空间

我们先来看这样一段代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <stdlib.h>int g_val 0;int main() {pid_t id fork();if(id < 0){perror("fork");return 0;}else if(id 0){ //child,子进程肯定先跑完&#xff0c;也…

时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解

时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.CEEMDAN方法的分解效果取决于白噪声幅值权重(Nstd)和噪声添…

SpringCloud从入门到精通速成(一)

文章目录 1.认识微服务1.0.学习目标1.1.单体架构1.2.分布式架构1.3.微服务1.4.SpringCloud1.5.总结 2.服务拆分和远程调用2.1.服务拆分原则2.2.服务拆分示例2.2.1.导入Sql语句2.2.2.导入demo工程 2.3.实现远程调用案例2.3.1.案例需求&#xff1a;2.3.2.注册RestTemplate2.3.3.实…

Python爬虫获取接口数据

Python爬虫获取接口数据 正常人的操作​​​​​​​​​​爬虫的思路标题获取请求信息标题请求转换为代码完整代码请求返回信息执行程序获取静态网页数据的教程,适用于我们要爬取的数据在网页源代码中出现,但是还是有很多的数据是源代码中没有的,需要通过接口访问服务器来获…

游戏服务端配置“热更”及“秒启动”终极方案(golang/ygluu/卢益贵)

游戏服务端配置“热更”及“秒启动”终极方案 ygluu 卢益贵 关键词&#xff1a;游戏微服务架构、游戏服务端热更、模块化解耦、golang 目录 一、前言 二、异步线程加载/重载方案 三、配置表碎片化方案 四、指针间接引用 五、重载通知 六、示例代码 七、相关连接 一、…

【CKA模拟题】别再犯难!一文教你用两种方式快速创建Pod!

题干 For this question, please set this context (In exam, diff cluster name) kubectl config use-context kubernetes-adminkubernetesCreate a pod called sleep-pod using the nginx image and also sleep for give any value for seconds. 使用nginx image创建一个名…

探索山海鲸可视化:相较于Excel的独特优势分析

作为一名新用户&#xff0c;我近期开始接触并尝试使用山海鲸可视化工具&#xff0c;这款软件最初吸引我的点在其免费可视化编辑、本地化部署的特点&#xff0c;用了一段时间后&#xff0c;我发现相较于之前使用的Excel来制作可视化看板&#xff0c;两者在多个方面有着显著的区别…

WordPress Plugin NotificationX插件 SQL注入漏洞复现(CVE-2024-1698)

0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。 0x02 漏洞概述 WordPress plugin NotificationX是一个应用插件。2.8.2版本及之前 存在安全漏洞,该…

数据库简介与MySQL编译安装

1数据库基础 什么是数据库 数据库&#xff08;Database&#xff09;是一个有组织的数据存储系统&#xff0c;用于有效地存储、检索、管理和维护数据。数据库系统允许用户以结构化的方式存储和操作大量数据&#xff0c;并提供了一种可靠的方法来管理和维护这些数据&#xff0c…

<地球科学专题>机器学习与灾害风险

<地球科学专题>机器学习与灾害风险 南昌大学黄发明副教授同济大学--张东明教授https://www.koushare.com/lives/room/081366 蔻享直播间,稍后会有快速回放。 南昌大学黄发明副教授