1.下载源码
从https://github.com/elastic/elasticsearch上下载相应版本的源代码,elasticsearch5.4.2使用gradle管理,所以要下载gradle,地址为:https://gradle.org/releases,下载后的安装很简单,安装后设置下环境变量,GRADLE_HOME=你的gradle安装路径,path下添加%GRADBLE_HOME%/bin. 安装好后在终端里敲gradle,有显示则安装成功
2.获取相关依赖
进入elasticsearch5.4.2源码根目录,gradle eclipse
然后进入漫长的下载相关依赖包的过程
如果觉得国外的镜像下载速度过慢,可以采用国内的镜像,在根目录的build.gradle文件中的allprojects内添加阿里云的镜像:
allprojects {
repositories {
maven { url “http://maven.aliyun.com/nexus/content/groups/public/” }
}
}
3.导入eclipse
在eclipse安装gradle插件,Help->EclipseMarketplace,打开窗口后搜索 buildeship,安装重启即可。
在eclipse中选择Existing gradle project,导入Elasticsearch源码,导入后会出现多个项目,我们只需要_core这个project。elasticsearch启动的入口类文件为:core/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java,右键点击 run as java application运行,会出现错误
报错处理
报错1
Exception in thread “main” java.lang.IllegalStateException: path.home is not configured
这个错误是没有指定项目的配置目录,因为运行Elasticsearch需要相应的插件、模块以及配置文件
因此,可以在官网上下载一个相应版本的编译好的Elasticsearch(如果源码是5.4.2,就要下载版本为5.4.2的发行版),将path.home指向其解压后的根目录,如果版本不一致,运行时会出错
而要加上path.home,我们可以直接修改虚拟机的运行参数,在项目右键run as菜单的run configuration中,选择arguments这一栏,在vm arguments中添加
-Des.path.home=D:\Java\elasticsearch //elasticsearch发行版的根目录(实际上这个目录随便都可以,只要目录里包含config(三个配置文件的文件夹),modules(最好是发行版编译好的modules),plugins(空文件夹即可))
报错2
2017-06-23 14:00:44,760 main ERROR Could not register mbeans java.security.AccessControlException: access denied (“javax.management.MBeanTrustPermission” “register”)
…
这个问题的解决方法和上面类似,修改虚拟机的运行参数,加上:
-Dlog4j2.disable.jmx=true
运行成功
[2017-06-23T15:40:14,087][INFO ][o.e.n.Node ] [] initializing …
[2017-06-23T15:40:14,564][INFO ][o.e.e.NodeEnvironment ] [aJnQFVO] using [1] data paths, mounts [[(D:)]], net usable_space [146.6gb], net total_space [201gb], spins? [unknown], types [NTFS]
[2017-06-23T15:40:14,564][INFO ][o.e.e.NodeEnvironment ] [aJnQFVO] heap size [1.7gb], compressed ordinary object pointers [true]
[2017-06-23T15:40:14,567][INFO ][o.e.n.Node ] node name [aJnQFVO] derived from node ID [aJnQFVObS3GX_Z7B7l-BUg]; set [node.name] to override
[2017-06-23T15:40:14,567][INFO ][o.e.n.Node ] version[5.4.2-SNAPSHOT], pid[54392], build[Unknown/Unknown], OS[Windows 10/10.0/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_111/25.111-b14]
[2017-06-23T15:40:14,568][INFO ][o.e.n.Node ] JVM arguments [-Des.path.home=D:\Java\elasticsearch, -Dlog4j2.disable.jmx=true, -javaagent:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.1.3\lib\idea_rt.jar=51362:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.1.3\bin, -Dfile.encoding=UTF-8]
[2017-06-23T15:40:14,568][WARN ][o.e.n.Node ] version [5.4.2-SNAPSHOT] is a pre-release version of Elasticsearch and is not suitable for production
[2017-06-23T15:40:25,820][INFO ][o.e.p.PluginsService ] [aJnQFVO] loaded module [aggs-matrix-stats]
[2017-06-23T15:40:25,820][INFO ][o.e.p.PluginsService ] [aJnQFVO] loaded module [ingest-common]
[2017-06-23T15:40:25,820][INFO ][o.e.p.PluginsService ] [aJnQFVO] loaded module [lang-expression]
[2017-06-23T15:40:25,820][INFO ][o.e.p.PluginsService ] [aJnQFVO] loaded module [lang-groovy]
[2017-06-23T15:40:25,820][INFO ][o.e.p.PluginsService ] [aJnQFVO] loaded module [lang-mustache]
[2017-06-23T15:40:25,820][INFO ][o.e.p.PluginsService ] [aJnQFVO] loaded module [lang-painless]
[2017-06-23T15:40:25,820][INFO ][o.e.p.PluginsService ] [aJnQFVO] loaded module [percolator]
[2017-06-23T15:40:25,820][INFO ][o.e.p.PluginsService ] [aJnQFVO] loaded module [reindex]
[2017-06-23T15:40:25,821][INFO ][o.e.p.PluginsService ] [aJnQFVO] loaded module [transport-netty3]
[2017-06-23T15:40:25,821][INFO ][o.e.p.PluginsService ] [aJnQFVO] loaded module [transport-netty4]
[2017-06-23T15:40:25,822][INFO ][o.e.p.PluginsService ] [aJnQFVO] no plugins loaded
[2017-06-23T15:40:29,525][INFO ][o.e.d.DiscoveryModule ] [aJnQFVO] using discovery type [zen]
[2017-06-23T15:40:30,104][INFO ][o.e.n.Node ] initialized
[2017-06-23T15:40:30,104][INFO ][o.e.n.Node ] [aJnQFVO] starting …
[2017-06-23T15:40:30,195][INFO ][i.n.u.i.PlatformDependent] Your platform does not provide complete low-level API for accessing direct buffers reliably. Unless explicitly requested, heap buffer will always be preferred to avoid potential system instability.
[2017-06-23T15:40:31,520][WARN ][o.e.b.BootstrapChecks ] [aJnQFVO] initial heap size [134217728] not equal to maximum heap size [2126512128]; this can cause resize pauses and prevents mlockall from locking the entire heap
[2017-06-23T15:40:34,620][INFO ][o.e.c.s.ClusterService ] [aJnQFVO] new_master {aJnQFVO}{aJnQFVObS3GX_Z7B7l-BUg}{3au2Z08AQEKm4wS7CLOyuw}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-elected-as-master ([0] nodes joined)
[2017-06-23T15:40:34,748][INFO ][o.e.g.GatewayService ] [aJnQFVO] recovered [0] indices into cluster_state
[2017-06-23T15:40:35,552][INFO ][o.e.n.Node ] [aJnQFVO] started
运行时会出现 [aJnQFVO] initial heap size [134217728] not equal to maximum heap size [2126512128];这句话,单机版的elasticsearch运行时并不会出问题,如果修改了配置文件的network.host就会出现问题。解决方法是在上面说的虚拟机参数中添加-Xms2g -Xms2g,这些参数本来要从报错一所说的config下jvm.options文件中读取,可是在eclipse中配置了vm arguments后就不会读取这个文件了。不知道原因在哪,但是这样好歹可以运行了。好了,至此运行成功
突然发现有些机器运行时会出现如
1.max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
2.max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]
解决方式如下(括号里是对内容的解释):
解决:切换到root用户,编辑limits.conf 添加类似如下内容
vi /etc/security/limits.conf
添加如下内容:
* soft nofile 65536 (可打开文件描述符的最大数(软限制))
* hard nofile 131072 (可打开文件描述符的最大数(硬限制))
* soft nproc 2048 (单个用户可开启的线程数(软限制))
* hard nproc 4096 (单个用户可开启的线程数(硬限制))
3.max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决:切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并执行命令:
sysctl -p
然后,重新启动elasticsearch,即可启动成功。
如果上述过程无法解决,先注销用户,重新登录再开启es即可