前言

本文穿插讲述如何将Elasticsearch服务集成至CHD,最终将服务交给Cloudera Manager统一管理。

本司线上使用CDH5,暂未升级至CH6,此处以CDH6版本进行集成制作,方式差异不大。

制作 Elasticsearch 的 Parcel 包和 csd 文件

配置Java、Maven环境

此处默认已配置完成,不再讲述,其中Maven版本建议选用较高版本。

环境验证

控制台输入 mvn -v,java -version 验证maven及java是否配置正确,正常情况下将打印对应版本信息。

下载cm_ext

Cloudera提供的cm_ext工具,生成的csd和parcel进行校验

1
2
3
4
5
6
7
8
9
mkdir -p /github/cloudera
cd /github/cloudera

# 如果没有git环境,可下载至本机,再上传至当前目录下
git clone https://github.com/cloudera/cm_ext.git

cd cm_ext
# mvn 打包
mvn package -Dmaven.test.skip=true

编译成功后如下图:
image.png

说明:build_parcel.sh 和 build_csd.sh 脚本文件里面执行jar包路径默认是~/github/cloudera/…

下载Elasticsearch安装包

前往官网下载 7.10.2 版本上传至/github/cloudera/elasticsearch目录:传送门
或采用以下方式直接下载:

1
2
3
mkdir elasticsearch
cd elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz

下载制作Parcel包和CSD文件的脚本

1
2
3
4
git clone https://github.com/ibagomel/elasticsearch-parcel.git

# 如果上述连接访问超时,可替换至本人仓库,内容一致
git clone https://gitee.com/lynsite/elasticsearch-parcel.git

下载完成后的目录结构:
image.png

修改Elasticsearch-parcel配置文件

vim elasticsearch-parcel/parcel-src/meta/parcel.json
image.png

坑1:在CDH上安装激活的时候版本不兼容
修改如下文件:
vim elasticsearch-parcel/csd-src/descriptor/service.sdl
image.png

坑2:could not find java in JAVA_HOME or bundled at /usr/java/latest/bin/java
注释掉脚本文件中的JAVA_HOME:
image.png
注意:此时如果已经完成parcel和csd文件的制作报错,需要重新制作。

制作 Elasticsearch 的Parcel包和CSD文件并校验

1
2
3
4
cd elasticsearch-parcel
POINT_VERSION=5 VALIDATOR_DIR=/github/cloudera/cm_ext OS_VER=el7 PARCEL_NAME=ElasticSearch ./build-parcel.sh /github/cloudera/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz
VALIDATOR_DIR=/github/cloudera/cm_ext CSD_NAME=ElasticSearch ./build-csd.sh
# 如果上述命令报脚本报权限问题,请检查脚本是否有执行权限

制作成功如图所示:
image.png

查看Parcel包和csd文件

制作完成后的目录结构及文件:
image.png

CDH6安装部署ES服务

上传制作好的 csd jar包

将生成的csd文件(在生成的 build-csd 文件夹下),复制到cloudera-manager-server服务所在节点的/opt/cloudera/csd目录下

1
cp /github/cloudera/elasticsearch-parcel/build-csd/ELASTICSEARCH-1.0.jar /opt/cloudera/csd

部署Parcel包和mainfest.json到httpd服务中

将Parcel包:ELASTICSEARCH-0.0.5.elasticsearch.p0.5-el7.parcel 和 manifest.json 文件部署到httpd服务中

1
2
3
4
mkdir -p /var/www/html/cloudera-repos/elasticsearch
cd /var/www/html/cloudera-repos/elasticsearch
cp /github/cloudera/elasticsearch-parcel/build-parcel/ELASTICSEARCH-0.0.5.elasticsearch.p0.5-el7.parcel ./
cp /github/cloudera/elasticsearch-parcel/build-parcel/manifest.json ./

部署完成后可以浏览器访问:http://masterIP/cloudera-repos/elasticsearch/ 进行验证

赋权给CM用户

1
2
3
4
cd /opt/cloudera/csd
chown -R cloudera-scm:cloudera-scm ./*
cd /opt/cloudera/parcel-repo
chown -R cloudera-scm:cloudera-scm ./*

添加远程Parcel存储库URL

URL:http://masterIP/cloudera-repos/elasticsearch/
image.png
image.png
::: hljs-right
图片来源于CSDN
:::

检查新parcel找到ELASTICSEARCH 下载、分发、激活

已经点击 download -> distribute -> activate
image.png

重启cm添加ES服务

此处添加操作同CDH安装时添加服务一样,不再详细说明。安装启动如果报错,根据具体异常进行分析解决。本人电脑硬件配置 32G 8核16线程,之前安装过CDH6,集群启动后内存直接爆到百分之九十多,所以个人机器安装CDH请慎重。

以下为添加服务及启动成功后的截图,来源于CSDN:
image.png

选择主机,定义ES集群名称(cluster.name),名称任意取,默认名称为data-lakes,但是集群的每台主机的集群名字需要一样,不然会被认为是另一个ES集群的主机。
image.png

再重启Elasticsearch,启动成功。
image.png

以上制作及安装过程为本司采用方式,但在编写本文时并未在本机再次进行安装测试(资源伤不起啊),上述过程仅供参考,具体情况还需具体分析。

下面给出网友在安装启动时遇到的坑:
坑1: UserException

1
Exception in thread "main" org.elasticsearch.bootstrap.BootstrapException: org.elasticsearch.cli.UserException: unable to create temporary keystore at [/opt/cloudera/parcels/ELASTICSEARCH/config/elasticsearch.keystore.tmp], write permissions required for [/opt/cloudera/parcels/ELASTICSEARCH/config] or run [elasticsearch-keystore upgrade]

解决方案:
在cdh集群各个节点均执行

1
chmod 777 /opt/cloudera/parcels/ELASTICSEARCH/config/

坑2: 启动错误 startup exception:failed to obtain node locks
image.png
解决方案:
发现是后台已经有了一个elasticsearch 进程,所以拿不到lock

1
2
3
4
# 查看自己端口的使用情况
netstat -alnp | grep 9200
# 终止进程
kill -9 24776