0
点赞
收藏
分享

微信扫一扫

TCP-IP 知识汇总

摘要

本文整理和记录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

编译自动化

举报

相关推荐

0 条评论