Elasticsearch源码构建启动

准备开始深入 学习elasticsearch,对于深入一门技术,自己最喜欢的就是通过源码来学习,一方面能够从源码学习到架构知识,另外还能把es理论和实现相结合,更加深刻的理解es的构造。

不过es从我源码下载到成功启动,真的花费了很长时间,而且官网上(源码目录中CONTRIBUTING.md有部分介绍)以及网络上对应的学习资料也比较少。也可能搜索的关键字不当,直到最近才构建成功。这里也是做一个启动成功后的记录。

1.环境准备

  • 操作系统:win10
  • Elasticsearch 源码版本: 7.3.0
  • JDK版本: 11
  • Intellij Idea版本: 2019.3

现在这个版本还算比较新,不知道你们看到这篇文章的时候 jdk是否上20了,哈哈哈哈。。。

2. elasticsearch下载

  1. 使用git先把源代码拉下来
git clone  https://github.com/elastic/elasticsearch.git

2)把对应的发布代码也给下载下来
下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch;至于为什么会下载后面会用能得到。

3.构建

由于es使用的gradle来构建,说实话我们可以下载gradle来构建,也可以让项目自己下载gradle,我其实就是让项目自己下载的gradle,因为我自己也用的不太熟。

先说在这里我犯了一个很大的错误,当时我从源代码拉取下来后,默认是maser的代码,那么我当时想的就是切换到对应的版本7.3,因为平时项目用的比较多的就是切换分支,这个问题也是导致我一直没启动起来的项目的重大原因。实际上es的发布版本都是基于tag来做的,这个就需要大家去了解下git的branch和tag的区别了。大家这里一定要搞对,当时我切换分支后发现有些类还没有,真是气煞人也。

继续。

1) 切换tag

git checkout  v7.3.0

2) Intellij Idea导入项目

记住新的版本通过在源码目录中执行 gradle idea 是不支持的,会抛出异常给你。

此时用Intellij idea 导入后会自动匹配gradle下载对应的版本,(具体的版本在./gradle/wrapper/gradle-wrapper.propertiesde distributionUrl中指明)

这里你会发现很多jar包下载超级慢,所以这里需要设置镜像下载,网上有说修改当前项目中的下载镜像,我是直接修改全局的gradle下载地址

在USER_HOME/.gradle/下面创建新文件 init.gradle,输入下面的内容并保存。这里的脚本把url匹配到的仓库都替换成了阿里云的仓库,

allprojects{
    repositories {
        def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
        all {
            ArtifactRepository repo ->
    if (repo instanceof MavenArtifactRepository) {
                def url = repo.url.toString()
                if (url.startsWith('https://repo.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                    remove repo
                }
            }
        }
        maven {
            url REPOSITORY_URL
        }
    }
}

再次更新jar包导入,你会发现抛出了一个错误,内容大概会有下面的内容:

repository [${repository.name}] on project with path [${project.path}] is using http for artifacts on

这里也很明显不支持http,就是我们上面的镜像下载导致的。我们直接项目搜索出来抛异常的位置:
BuildPlugin.groovy脚本构建的时候有一个校验,然后我们直接给注释掉就ok了。

    private static void assertRepositoryURIUsesHttps(final ArtifactRepository repository, final Project project, final URI uri) {
        if (uri != null && uri.toURL().getProtocol().equals("http")) {
          //  throw new GradleException("repository [${repository.name}] on project with path [${project.path}] is using http for artifacts on [${uri.toURL()}]")
        }
    }

然后再次构建,就发现成功了。

4.启动

我们先找到启动类org.elasticsearch.bootstrap.Elasticsearch,你会发现启动错误一堆有一堆,不过也不用担心可以一个一个的解决。这里我就直接贴需要做的事情了,具体的原理我还未探究。详细的来自参考网络

  • 1)首先在当前目录中新建home目录,然后将我们下载的发布版本目录中config目录和module目录都复制到我们新建的home目录中
    i: 同时在config目录中新建文件java.policy并添加内容

      grant {
          permission java.lang.RuntimePermission "createClassLoader";
      };
    

    ii:在elasticsearch.yml中放开注释,不然启动没有节点名称会报空指针异常
    node.name: node-1

  • 2)配置vm-option
    这里的D:\software\ELK\es-sound-source\elasticsearch指当前项目的位置

    -Des.path.conf=D:\software\ELK\es-sound-source\elasticsearch\home\config
    -Des.path.home=D:\software\ELK\es-sound-source\elasticsearch\home
    -Dlog4j2.disable.jmx=true
    -Djava.security.policy=D:\software\ELK\es-sound-source\elasticsearch\home\config\java.policy
    

另外启动前勾选上如下图中的√


image.png
  • 3) 再次启动Elasticsearch

这次你就会发现你的服务启动了

....
[2020-06-09T17:32:43,106][INFO ][o.e.h.AbstractHttpServerTransport] [node-1] publish_address {127.0.0.1:9200}, bound_addresses {127.0.0.1:9200}, {[::1]:9200}
[2020-06-09T17:32:43,107][INFO ][o.e.n.Node               ] [node-1] started

本地服务访问一下http://localhost:9200/

{
  "name": "node-1",
  "cluster_name": "elasticsearch",
  "cluster_uuid": "TBc-L_IsTryvf6xzsoBqFQ",
  "version": {
    "number": "7.3.0",
    "build_flavor": "unknown",
    "build_type": "unknown",
    "build_hash": "Unknown",
    "build_date": "Unknown",
    "build_snapshot": true,
    "lucene_version": "8.1.0",
    "minimum_wire_compatibility_version": "6.8.0",
    "minimum_index_compatibility_version": "6.0.0-beta1"
  },
  "tagline": "You Know, for Search"
}

或者访问一下http://localhost:9200/_cat/health?v

差不多这里就结束了,大致方向就是这样,如果有疑问请留言一起探讨。
上面的不少内容参考网络上

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343