2018 Elastic中国开发者大会前一天,我参加了Elastic认证工程师考试,隔天在大会的闪电演讲部分做了一个快速的分享。 昨天考试结果下来了,比较遗憾,没能通过。 不过这次参考心得颇多,值得专门写一篇文总结一下,帮助准备考认证的同学少走一点弯路。
考试内容
官方有一个考试要求达到的目标提纲Objectives, 其中涵盖的知识点还是比较广的,建议每个点都要根据文档操作演练一下。 我考前几天大致扫了一下提纲,感觉基本上都熟悉,没有仔细一一演练。 到了考试的时候,才发现有几个知识点只是浮于表面的了解,细节并不熟悉,临时去读文档时间又不够。
考试环境
用自己的电脑,登陆到考试网站,有一个远程桌面连接到考试虚拟机。虚拟机上原装了5个ES集群,结点数量各异。 桌面提供有一个浏览器,可以访问kibana和官方文档站点,还有一个终端,可以ssh到集群各个结点。 考试所有操作基本都是在kibana的sense和这个终端里完成, 期间只允许访问官方文档,不允许通过Google查找解决方案。 我们是现场考试,人工监考。 常规的考试是通过摄像头远程监考的,并且需要安装一个插件,检查后台进程。 按照规定,自己的机器只能开浏览器,不允许开evernotes等其他辅助工具。 远程桌面的速度不是很快,在浏览器里翻看文档会感觉有些卡顿,所以要求对文档非常熟悉,一查即准,否则来回翻页都会消耗不少时间。最好用鼠标,翻页会容易得多,我没带鼠标,用MAC的触摸板翻页,非常痛苦。 另外用Mac的同学,要适应一下拷贝粘贴快捷键,考试机器拷贝粘贴用的是ctrl-c / ctrl-v ,用惯了Mac的快捷键会有些不适应。
考试时长
3个小时,期间可以上厕所,但是建议考前少喝水,上好厕所,时间宝贵。
考题形式
12道考题全部是上机题,每道题描述一个场景,要求解决问题或者达到某个目标。 每道题都会涉及到考试提纲里2-3个知识点,所以对各个知识点细节的了解非常重要, 只要一个知识点理解的模糊,就容易卡住。 做题顺序可以自己控制,最好先把自己熟悉,马上能搞定的先做了,耗时超过10分钟还没把握的,先放一放最后再做把。这12道题我只完成了其中的9个,有3个在现场卡了比较长时间,因为时间不够放弃, 接下来的部分会做更细节的分析。
亲历考题类型总结
-
给一个状态是red的集群,要求不损失数据的前提下,让集群变green。
该题我遇到3个要解决的问题:- 有一个结点挂了,找到挂掉的结点,ssh上去,手动起来;
- 此时集群变成yellow,还是有shard不能分配,检查发现有一个索引的routings设置里,routing ->include里rack1写成了rakc1,故意写错的,修正好即可
- 集群依然还有shard是unassinged状态,继续检查发现有一个索引的routings里,include的rack数量不够,导致有些 replica分配不了。 更新一下routing,让他include更多的rack就解决了。集群状态变green。
此题考查的知识点包括,如何查看集群状态,如果查看结点列表,如何使用allocation explain api, 如何通过索引的allocation routing控制shard的分布。因为平常工作中解决集群问题比较多,所以此题完成比较轻松。
-
有一个文档,内容类似
dog & cat
, 要求索引这条文档,并且使用match_phrase
query,查询dog & cat
或者dog and cat
都能match。此题我现场没搞出来,当时第一反应是标准tokenizer已经将
&
剥离掉了,那么只要用stop words filter将and
剥离掉,不就可以了吗? 结果配置后,发现match不上。 仔细一想,match_phase需要匹配位置的,&
是tokenize阶段剥离的,and
是token filter阶段剥离的,这样位置就不对了。 用analyzer api分析一下,位置的确不对。然后想到应该用synonym token filter来处理,结果配置还是一直有问题。 这时候耗时已经太多,直接放弃了。回来后又演练了一下这道题,才发现用synonym token filter是没问题的,但是tokenizer应该改成whitespace,否则&被剥离了。 总结起来还是平常这块用得少,不熟练,所以考试的时候时间一紧,脑子没转过来。 -
有index_a包含一些文档, 要求创建索引index_b,通过reindex api将index_a的文档索引到index_b。 要求增加一个整形字段,value是index_a的field_x的字符长度; 再增加一个数组类型的字段,value是field_y的词集合。(field_y是空格分割的一组词,比方
"foo bar"
,索引到index_b后,要求变成["foo", "bar"]
。此题没什么技巧,就是考察reindex api的使用+ painless script。 但是我平常不怎么用painless,虽然原理上知道需要对一个字段求size,一个需要做split,但具体的语法不熟悉,也是来不及翻看文档,直接放弃。
-
按照要求创建一个index template,并且通过bulk api索引一些文档,达到自动创建索引的效果。 创建的索引的settings和mappings应该符合要求。
此题比较简单,熟悉index template语法,常用的settings, mappings设置就OK了。
-
按要求写一个查询, 其中一个条件是某个关键词必须包含在4个字段中至少2个。
此题也没什么技巧,考查bool query和minimum_should_match,熟悉就能写出来
-
按照要求写一个search template
熟悉search template的mustache模版语言即可轻松写出,但是很遗憾,平常没用过search template,虽然知道个大概,但是当时写的时候,不知道哪里语法有问题,PUT template总是不成功。猜想可能是哪个位置的字符没有转译产生非法json字符,或者哪一层嵌套有问题。 总之就是调试不成功,又浪费了很多时间。
-
多层嵌套聚合,其中还包括bucket过滤
没技巧,熟悉聚合,聚合嵌套,buckets过滤即可。
-
给定一个json文档,要求创建一个索引,定义一个nested field,将json文档索引成嵌套类型,同时完成指定的嵌套查询和排序。
比较简单,熟悉nested type和nested query即可完成。
-
给定两个集群,都包含有某个索引。 要求配置cross cluster search,能够从其中一个集群执行跨集群搜索,写出搜索的url和query body。
中间设置了一个陷阱,有一个集群有结点挂掉了,不能访问。 所以先要解决结点挂掉的问题,然后在要执行查询的集群配置cross cluster。 确认链接没问题以后,写出查询即可。
-
有一个3结点集群,还有一个kibana。 es集群没有安装x-pack,但是安装包已经放在了机器上,kibana有安装x-pack,并且启用了security,所以此时还连接不到集群。 要求给3个结点配置security,给内置的几个用户分别设定指定的密码。 之后添加指定的新用户,指定的role,并给用户赋予role a, role b。
此题熟悉x-pack security即可。 先分别ssh到3个结点,安装x-pack后启动结点。 等结点链接成功以后,用初始化内置用户密码的脚本,按要求分别设置密码。 之后就可以用elastic这个内置的管理员账号登陆kibana了。 然后通过kibana的用户和角色管理界面,分别添加对应的用户和角色。
还有2题是什么不太记得了,应该都是要求根据要求创建索引,reindex数据,然后执行某种类型的查询,或者聚合,比较简单吧。
总结下来,本次考试就是考察的知识点比较多,虽然只有12道考题,但是每道考题都是对多个知识点的综合考察,对ES的理解只停留在理论上是不够的,要求比较强的实际动手能力。 能考过的同学,一定是有过比较丰富的实际操作经验,该认证的含金量我感觉还是非常非常的高!
本文地址:http://searchkit.cn/article/6133