
社区日报 第323期 (2018-07-05)
http://t.cn/RBzKP6H
2.使用Beats模块将日志和指标导入ES
http://t.cn/RdLtJJp
3.如何在生产环境中重启Elasticsearch集群
http://t.cn/RdL4oxk
活动预告
1. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:sterne vencel
归档:https://elasticsearch.cn/article/700
订阅:https://tinyletter.com/elastic-daily
http://t.cn/RBzKP6H
2.使用Beats模块将日志和指标导入ES
http://t.cn/RdLtJJp
3.如何在生产环境中重启Elasticsearch集群
http://t.cn/RdL4oxk
活动预告
1. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:sterne vencel
归档:https://elasticsearch.cn/article/700
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

ES内存分配规划
阅读本文前,请先阅读ES内存分析。 ES默认配置下,heap是存在超卖情况的。
类目 | 默认占比 | 是否常驻 | 淘汰策略(在控制大小情况下) | 控制参数 |
---|---|---|---|---|
query cache | 10% | 是 | LRU | indices.queries.cache.size |
request cache | 1% | 是 | LRU | indices.requests.cache.size |
fielddata cache | 无限制 | 是 | LRU | indices.fielddata.cache.size |
segment memory | 无限制 | 是 | 无 | 不能通过参数控制 |
common space | 70% | 否 | GC | 通过熔断器 indices.breaker.total.limit 限制 |
common space(可GC)
子类目 | 默认占比 | 控制参数 |
---|---|---|
indexing buffer | 10% | indices.memory.index_buffer_size |
request agg data | 60% | indices.breaker.request.limit |
in-flight data | 100% | network.breaker.inflight_requests.limit |
通过上表可知,segment memory是非常重要,而且是不可通过参数干预的内存空间,而cache部分则可以提升性能,可以被清除。common space 是运行时的动态空间,可以被GC。
综上所述,需要保证segment memory+cache+common space不超过100%。由于熔断器是按整个heap大小来计算的,所以如果segment memory 过大,仍然可能会导致OOM。为了减少这种情况的发生,需要预留足够空间给segment。 优化
- 限制fielddata大小,fielddata是针对text类型进行排序、聚合才用到。正常应该避免这种情况发生。
- 限制request agg data大小,这个参数会影响聚合使用的内存,如果触发熔断,业务需要进行优化。
内存分配
segment memory
|
预留10%
|
|
fielddata cache
|
限制在20%
|
|
query cache
|
限制10%
|
|
request cache
|
限制1%
|
|
indexing buffer
|
限制10%
|
|
request agg data
|
限制1%
|
父熔断器配置30%,扣除fielddata,agg剩余的就是in-flight
|
in-flight data
|
限制9%
|
参数设置
indices.fielddata.cache.size:1%--需要重启节点
PUT _cluster/settings
{
"persistent": {
"indices.breaker.fielddata.limit":"20%",
"indices.breaker.request.limit":"1%",
"indices.breaker.total.limit":"70%"
}
}
阅读本文前,请先阅读ES内存分析。 ES默认配置下,heap是存在超卖情况的。
类目 | 默认占比 | 是否常驻 | 淘汰策略(在控制大小情况下) | 控制参数 |
---|---|---|---|---|
query cache | 10% | 是 | LRU | indices.queries.cache.size |
request cache | 1% | 是 | LRU | indices.requests.cache.size |
fielddata cache | 无限制 | 是 | LRU | indices.fielddata.cache.size |
segment memory | 无限制 | 是 | 无 | 不能通过参数控制 |
common space | 70% | 否 | GC | 通过熔断器 indices.breaker.total.limit 限制 |
common space(可GC)
子类目 | 默认占比 | 控制参数 |
---|---|---|
indexing buffer | 10% | indices.memory.index_buffer_size |
request agg data | 60% | indices.breaker.request.limit |
in-flight data | 100% | network.breaker.inflight_requests.limit |
通过上表可知,segment memory是非常重要,而且是不可通过参数干预的内存空间,而cache部分则可以提升性能,可以被清除。common space 是运行时的动态空间,可以被GC。
综上所述,需要保证segment memory+cache+common space不超过100%。由于熔断器是按整个heap大小来计算的,所以如果segment memory 过大,仍然可能会导致OOM。为了减少这种情况的发生,需要预留足够空间给segment。 优化
- 限制fielddata大小,fielddata是针对text类型进行排序、聚合才用到。正常应该避免这种情况发生。
- 限制request agg data大小,这个参数会影响聚合使用的内存,如果触发熔断,业务需要进行优化。
内存分配
segment memory
|
预留10%
|
|
fielddata cache
|
限制在20%
|
|
query cache
|
限制10%
|
|
request cache
|
限制1%
|
|
indexing buffer
|
限制10%
|
|
request agg data
|
限制1%
|
父熔断器配置30%,扣除fielddata,agg剩余的就是in-flight
|
in-flight data
|
限制9%
|
参数设置
indices.fielddata.cache.size:1%--需要重启节点
PUT _cluster/settings
{
"persistent": {
"indices.breaker.fielddata.limit":"20%",
"indices.breaker.request.limit":"1%",
"indices.breaker.total.limit":"70%"
}
}
收起阅读 »

ES内存使用分析及熔断器设置
内存占用
ES的JVM heap按使用场景分为可GC部分和常驻部分。 可GC部分内存会随着GC操作而被回收; 常驻部分不会被GC,通常使用LRU策略来进行淘汰; 内存占用情况如下图:
common space包括了indexing buffer和其他ES运行需要的class。indexing buffer由indices.memory.index_buffer_size参数控制, 默认最大占用10%,当full up后,该部分数据被刷入磁盘对应的Segments中。这部分空间是可以被回收反复利用的。
queryCache 是node级别的filter过滤器结果缓存,大小由indices.queries.cache.size 参数控制,默认10%。使用LRU淘汰策略。
requestCache是shard级别的query result缓存,通常 only requests of size 0 such as aggregations, counts and suggestions will be cached。使用LRU淘汰策略。通过indices.requests.cache.size参数控制,默认1%。设置后整个NODE都生效。
fieldDataCache,针对text字段,没有docValues属性(相当于列存储),当对text类型字段进行sort,agg时,需要将对应的字段内容全部加载到内存,这部分数据就放在fieldDataCache。通过indices.fielddata.cache.size 参数限制大小,默认不限制。这种情况下,占用内存会逐渐增多,直到触发熔断;新数据无法加载。
segmentsMemory ,缓存段信息,包括FST,Dimensional points for numeric range filters,Deleted documents bitset ,Doc values and stored fields codec formats等数据。这部分缓存是必须的,不能进行大小设置,通常跟index息息相关,close index、force merge均会释放部分空间。 可以通过命令
GET _cat/nodes?v&h=id,ip,port,r,ramPercent,ramCurrent,heapMax,heapCurrent,fielddataMemory,queryCacheMemory,requestCacheMemory,segmentsMemory
查看当前各块的使用情况。
熔断器
Elasticsearch 有一系列的断路器,它们都能保证内存不会超出限制:
- indices.breaker.fielddata.limit fielddata 断路器默认设置堆的 60% 作为 fielddata 大小的上限。
- indices.breaker.request.limit request 断路器估算需要完成其他请求部分的结构大小,例如创建一个聚合桶,默认限制是堆内存的 60%。它实际上是node level的一个统计值,统计的是这个结点上,各类查询聚合操作,需要申请的Bigarray的空间大小总和。 所以如果有一个聚合需要很大的空间,同时在执行的聚合可能也会被break掉。
- indices.breaker.total.limit 父熔断,inflight、request(agg)和fielddata不会使用超过堆内存的 70%。
- network.breaker.inflight requests.limit 限制当前通过HTTP等进来的请求使用内存不能超过Node内存的指定值。这个内存主要是限制请求内容的长度。 默认100%。
- script.max_compilations_per_minute
- 限制script并发执行数,默认值为15。
参考文档 https://www.elastic.co/guide/en/elasticsearch/reference/5.3/circuit-breaker.html#fielddata-circuit-breaker https://www.elastic.co/guide/cn/elasticsearch/guide/cn/_limiting_memory_usage.html http://zhengjianglong.leanote.com/post/ES%E8%AE%BE%E7%BD%AE
内存占用
ES的JVM heap按使用场景分为可GC部分和常驻部分。 可GC部分内存会随着GC操作而被回收; 常驻部分不会被GC,通常使用LRU策略来进行淘汰; 内存占用情况如下图:
common space包括了indexing buffer和其他ES运行需要的class。indexing buffer由indices.memory.index_buffer_size参数控制, 默认最大占用10%,当full up后,该部分数据被刷入磁盘对应的Segments中。这部分空间是可以被回收反复利用的。
queryCache 是node级别的filter过滤器结果缓存,大小由indices.queries.cache.size 参数控制,默认10%。使用LRU淘汰策略。
requestCache是shard级别的query result缓存,通常 only requests of size 0 such as aggregations, counts and suggestions will be cached。使用LRU淘汰策略。通过indices.requests.cache.size参数控制,默认1%。设置后整个NODE都生效。
fieldDataCache,针对text字段,没有docValues属性(相当于列存储),当对text类型字段进行sort,agg时,需要将对应的字段内容全部加载到内存,这部分数据就放在fieldDataCache。通过indices.fielddata.cache.size 参数限制大小,默认不限制。这种情况下,占用内存会逐渐增多,直到触发熔断;新数据无法加载。
segmentsMemory ,缓存段信息,包括FST,Dimensional points for numeric range filters,Deleted documents bitset ,Doc values and stored fields codec formats等数据。这部分缓存是必须的,不能进行大小设置,通常跟index息息相关,close index、force merge均会释放部分空间。 可以通过命令
GET _cat/nodes?v&h=id,ip,port,r,ramPercent,ramCurrent,heapMax,heapCurrent,fielddataMemory,queryCacheMemory,requestCacheMemory,segmentsMemory
查看当前各块的使用情况。
熔断器
Elasticsearch 有一系列的断路器,它们都能保证内存不会超出限制:
- indices.breaker.fielddata.limit fielddata 断路器默认设置堆的 60% 作为 fielddata 大小的上限。
- indices.breaker.request.limit request 断路器估算需要完成其他请求部分的结构大小,例如创建一个聚合桶,默认限制是堆内存的 60%。它实际上是node level的一个统计值,统计的是这个结点上,各类查询聚合操作,需要申请的Bigarray的空间大小总和。 所以如果有一个聚合需要很大的空间,同时在执行的聚合可能也会被break掉。
- indices.breaker.total.limit 父熔断,inflight、request(agg)和fielddata不会使用超过堆内存的 70%。
- network.breaker.inflight requests.limit 限制当前通过HTTP等进来的请求使用内存不能超过Node内存的指定值。这个内存主要是限制请求内容的长度。 默认100%。
- script.max_compilations_per_minute
- 限制script并发执行数,默认值为15。
参考文档 https://www.elastic.co/guide/en/elasticsearch/reference/5.3/circuit-breaker.html#fielddata-circuit-breaker https://www.elastic.co/guide/cn/elasticsearch/guide/cn/_limiting_memory_usage.html http://zhengjianglong.leanote.com/post/ES%E8%AE%BE%E7%BD%AE
收起阅读 »
社区日报 第322期 (2018-07-04)
http://t.cn/RdwtPxy
2.ES熔断器了解一下;
http://t.cn/Rd7tMFJ
3.如何取消一个ES检索;
http://t.cn/Rd7cdBi
活动预告
1. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:wt
归档:https://elasticsearch.cn/article/697
订阅:https://tinyletter.com/elastic-daily
http://t.cn/RdwtPxy
2.ES熔断器了解一下;
http://t.cn/Rd7tMFJ
3.如何取消一个ES检索;
http://t.cn/Rd7cdBi
活动预告
1. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:wt
归档:https://elasticsearch.cn/article/697
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

Kibana 里程碑插件的使用
今天介绍一下 Kibana 的里程碑插件的使用,这个是一个相对还比较新的可视化插件,可以用来对具有时间上下文相关的数据,以里程碑的方式来展现这些数据点在时间轴上的关联性。
这样说可能比较抽象,举个荔枝,你在 Elasticsearch 里面存的是服务器日志信息,然后有一天,老板说网站很慢,帮忙重启一下,(老板听说重启可以解决问题,反正他说他的笔记本重启之后就老快了),这个是一个已知的维护动作,所以你默默的在后台记录了重启的时间和是谁叫你重启的(这里是老板),到了月底的时候,老板让你把这个月的服务器运行数据给他看,然后问你为什么某一个时间服务器请求都为0,你打开 Kibana,指着其中一个时间点说,诺,这里,你让我重启了服务器。
是的,你可以对数据进行注解,用来解释数据和异常,这个是一个很好的场景,另外,还可以关联持续集成工具,每次谁代码提交了,你把这个作为一个事件,存到 es 里面,然后用里程碑可视化显示,那么这个提交造成的服务运行指标的变化,比如性能提升和下降,就会非常直观的关联到这次代码提交,同理,软件版本的发布也是一个里程碑事件,也可以展示并关联起来。然后,在使用的时候,还可以根据时间定位到感兴趣的地方,查看该段时间都发生了哪些自定义的事件和日志,方便分析。做安全方面的分析也可以用来跟踪和做入侵事后复盘的注解。
是不是,很多地方都能使用这个插件呢。
插件地址:https://github.com/walterra/kibana-milestones-vis/
演示截图:
关于如何使用,其实在该项目的 README 里面已经比较详细了。
1.首先找到对应的 Kibana 插件的版本,如果没有可能需要手动编译插件,有的话,直接找到下载地址。 https://github.com/walterra/kibana-milestones-vis/releases
2.使用 Kibana 的插件安装命令下载安装
➜ kibana-6.2.4-darwin-x86_64 bin/kibana-plugin install https://github.com/walterra/kibana-milestones-vis/releases/download/v6.2.4/kibana-milestones-vis-6.2.4.zip
Found previous install attempt. Deleting...
Attempting to transfer from https://github.com/walterra/kibana-milestones-vis/releases/download/v6.2.4/kibana-milestones-vis-6.2.4.zip
Transferring 1353656 bytes....................
Transfer complete
Retrieving metadata from plugin archive
Extracting plugin archive
Extraction complete
Optimizing and caching browser bundles...
3.启动 Kibana,然后进入 Visualize 面板,应该就能找到这个新的 Milestone 类型的可视化组件了。
加两个维护日志
和日志关联分析
4.还有一个隐藏的秘籍,就是可以支持图片作为标注
用图片代替文字,是不是更直观,如果你的数据是电影相关的,你可以放一个电影海报替代,如果你的是历史人物相关的,比如,可以换成人物头像,地点等等。
好了,是不是很炫,快去自己试试吧。
今天介绍一下 Kibana 的里程碑插件的使用,这个是一个相对还比较新的可视化插件,可以用来对具有时间上下文相关的数据,以里程碑的方式来展现这些数据点在时间轴上的关联性。
这样说可能比较抽象,举个荔枝,你在 Elasticsearch 里面存的是服务器日志信息,然后有一天,老板说网站很慢,帮忙重启一下,(老板听说重启可以解决问题,反正他说他的笔记本重启之后就老快了),这个是一个已知的维护动作,所以你默默的在后台记录了重启的时间和是谁叫你重启的(这里是老板),到了月底的时候,老板让你把这个月的服务器运行数据给他看,然后问你为什么某一个时间服务器请求都为0,你打开 Kibana,指着其中一个时间点说,诺,这里,你让我重启了服务器。
是的,你可以对数据进行注解,用来解释数据和异常,这个是一个很好的场景,另外,还可以关联持续集成工具,每次谁代码提交了,你把这个作为一个事件,存到 es 里面,然后用里程碑可视化显示,那么这个提交造成的服务运行指标的变化,比如性能提升和下降,就会非常直观的关联到这次代码提交,同理,软件版本的发布也是一个里程碑事件,也可以展示并关联起来。然后,在使用的时候,还可以根据时间定位到感兴趣的地方,查看该段时间都发生了哪些自定义的事件和日志,方便分析。做安全方面的分析也可以用来跟踪和做入侵事后复盘的注解。
是不是,很多地方都能使用这个插件呢。
插件地址:https://github.com/walterra/kibana-milestones-vis/
演示截图:
关于如何使用,其实在该项目的 README 里面已经比较详细了。
1.首先找到对应的 Kibana 插件的版本,如果没有可能需要手动编译插件,有的话,直接找到下载地址。 https://github.com/walterra/kibana-milestones-vis/releases
2.使用 Kibana 的插件安装命令下载安装
➜ kibana-6.2.4-darwin-x86_64 bin/kibana-plugin install https://github.com/walterra/kibana-milestones-vis/releases/download/v6.2.4/kibana-milestones-vis-6.2.4.zip
Found previous install attempt. Deleting...
Attempting to transfer from https://github.com/walterra/kibana-milestones-vis/releases/download/v6.2.4/kibana-milestones-vis-6.2.4.zip
Transferring 1353656 bytes....................
Transfer complete
Retrieving metadata from plugin archive
Extracting plugin archive
Extraction complete
Optimizing and caching browser bundles...
3.启动 Kibana,然后进入 Visualize 面板,应该就能找到这个新的 Milestone 类型的可视化组件了。
加两个维护日志
和日志关联分析
4.还有一个隐藏的秘籍,就是可以支持图片作为标注
用图片代替文字,是不是更直观,如果你的数据是电影相关的,你可以放一个电影海报替代,如果你的是历史人物相关的,比如,可以换成人物头像,地点等等。
好了,是不是很炫,快去自己试试吧。
收起阅读 »
社区日报 第321期 (2018-07-03)
http://t.cn/RrkMzQn
2.使用ELK分析Nginx日志实战。
http://t.cn/RBTxsci
3.使用Kafka Streams和Elasticsearch 构建home feed。
http://t.cn/Rrk4z0S
活动预告
1. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:叮咚光军
归档:https://elasticsearch.cn/article/695
订阅:https://tinyletter.com/elastic-daily
http://t.cn/RrkMzQn
2.使用ELK分析Nginx日志实战。
http://t.cn/RBTxsci
3.使用Kafka Streams和Elasticsearch 构建home feed。
http://t.cn/Rrk4z0S
活动预告
1. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:叮咚光军
归档:https://elasticsearch.cn/article/695
订阅:https://tinyletter.com/elastic-daily
收起阅读 »

社区日报 第320期 (2018-07-02)
http://t.cn/RrBADX9
2.使用ElasticSearch搭建动态排序引擎
http://t.cn/RVchTMI
3.elasticsearch以及lucene本周发展进展
http://t.cn/RrB2HPd
活动预告
1. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:cyberdak
归档:[url=https://elasticsearch.cn/article/]https://elasticsearch.cn/article/[/url]694
订阅:https://tinyletter.com/elastic-daily
http://t.cn/RrBADX9
2.使用ElasticSearch搭建动态排序引擎
http://t.cn/RVchTMI
3.elasticsearch以及lucene本周发展进展
http://t.cn/RrB2HPd
活动预告
1. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:cyberdak
归档:[url=https://elasticsearch.cn/article/]https://elasticsearch.cn/article/[/url]694
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

社区日报 第319期 (2018-07-01)
http://t.cn/RrElkfG
2.使用Vagrant和Ansible配置ELK Stack 。
http://t.cn/RrEYfEp
3.(自备梯子)怎么避免成为一个平庸的开发者。
http://t.cn/RrEjgHw
活动预告
7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:至尊宝
归档:https://elasticsearch.cn/article/693
订阅:https://tinyletter.com/elastic-daily
http://t.cn/RrElkfG
2.使用Vagrant和Ansible配置ELK Stack 。
http://t.cn/RrEYfEp
3.(自备梯子)怎么避免成为一个平庸的开发者。
http://t.cn/RrEjgHw
活动预告
7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:至尊宝
归档:https://elasticsearch.cn/article/693
订阅:https://tinyletter.com/elastic-daily 收起阅读 »

社区日报 第318期 (2018-06-30)
-
elastic技能官方认证通道。 http://t.cn/Ruuvok6
-
如何用ES6.2搜索中文、韩文和日文系列。
-
JVM问题定位的典型案例分析(视频)。 http://t.cn/RrHKU5P
- 只等你来 | Elastic Meetup 广州交流会 https://elasticsearch.cn/article/364
活动预告
- 7月21日上海meetup演讲申请中 https://elasticsearch.cn/m/article/655
编辑: bsll
-
elastic技能官方认证通道。 http://t.cn/Ruuvok6
-
如何用ES6.2搜索中文、韩文和日文系列。
-
JVM问题定位的典型案例分析(视频)。 http://t.cn/RrHKU5P
- 只等你来 | Elastic Meetup 广州交流会 https://elasticsearch.cn/article/364
活动预告
- 7月21日上海meetup演讲申请中 https://elasticsearch.cn/m/article/655
编辑: bsll
归档:https://elasticsearch.cn/article/{id}
订阅:https://tinyletter.com/elastic-daily
收起阅读 »
社区日报 第317期 (2018-06-29)
https://elasticsearch.cn/article/687
2、重写Elasticsearch Ik插件
http://t.cn/RrWjbWU
3、Elasticsearch script的高级使用方式
http://t.cn/RrWjJQd
活动预告:
1.6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2.7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:铭毅天下
归档:https://elasticsearch.cn/article/690
订阅:https://tinyletter.com/elastic-daily
https://elasticsearch.cn/article/687
2、重写Elasticsearch Ik插件
http://t.cn/RrWjbWU
3、Elasticsearch script的高级使用方式
http://t.cn/RrWjJQd
活动预告:
1.6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2.7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:铭毅天下
归档:https://elasticsearch.cn/article/690
订阅:https://tinyletter.com/elastic-daily
收起阅读 »

社区日报 第316期 (2018-06-28)
-
利用metricbeat和jolokia监控java应用。 http://t.cn/Rr9N1fw
-
es2.3.5修改源代码获取dismax每个字段的得分。 http://t.cn/Rr9NdSb
- 你真的会打 Log 吗? http://t.cn/Rr9NFh8
活动预告:
-
6月30日南京meetup参会报名中 https://elasticsearch.cn/m/article/647
- 7月21日上海meetup演讲申请中 https://elasticsearch.cn/m/article/655
-
利用metricbeat和jolokia监控java应用。 http://t.cn/Rr9N1fw
-
es2.3.5修改源代码获取dismax每个字段的得分。 http://t.cn/Rr9NdSb
- 你真的会打 Log 吗? http://t.cn/Rr9NFh8
活动预告:
-
6月30日南京meetup参会报名中 https://elasticsearch.cn/m/article/647
- 7月21日上海meetup演讲申请中 https://elasticsearch.cn/m/article/655

Elastic 社区电台第三期,嘉宾:徐胜/张延明@饿了么
欢迎来到 Elastic 社区电台的第三期节目,本期嘉宾是来自上海的饿了么的两位技术负责人,饿了么是中国专业的网上订餐平台,饿了么最早从 2.3 版本开始使用 ES,从最早的 12 个集群 100个节点,每天 400 万单,到如今达到 32 个集群,300 多个节点,千万个索引,总数据量达到 60 TB,共 10 几个业务系统的接入,每天高峰处理超 800 万单数据,搜索推荐、用户交易、后台营销等都是通过 ES 来实现,欢迎收听本期节目来了解饿了么具体是如何应用 ES 以及在规模化过程中遇到的挑战。
主持人:
Elastic 技术布道师,曾勇(Medcl)。
嘉宾:
张延明,饿了么运维专家,主要 ES 的部署、运维、JVM 性能优化。曾供职于腾讯等大公司,在业务和基础运维方面有十年的工作经验,对 ES、Kafka 等分布式技术具有强烈的兴趣,一直负责核心业务场景的运维部署。
徐胜,饿了么 ES 的负责人,主要是负责 ES 的平台化研发,ES 集群和查询性能优化。负责基于 ES 构建通用搜索引擎平台。对分布式计算、大数据具有浓厚的兴趣,在 ES 分布式搜索、大数据计算、聚合统计分析、性能优化等业务场景积累了三年经验。
可以点击下面的任意链接来收听(时长约 50 分钟):
- SoundCloud:https://soundcloud.com/elastic ... eleme
- 喜马拉雅:http://www.ximalaya.com/keji/14965410/94803743
- 蜻蜓 FM:http://share.qingting.fm/vchan ... 12932
关于 Elastic 社区电台
Elastic 开源社区举办的一款播客类节目, 邀请来自开源社区的用户,一起聊聊 Elastic 开源产品的使用案例、经验分享、架构变迁等等。
关于饿了么
“饿了么”是中国专业的餐饮O2O平台,由拉扎斯网络科技(上海)有限公司开发运营。 作为中国餐饮业数字化领跑者,“饿了么”秉承激情、极致、创新之信仰,以建立全面完善的数字化餐饮生态系统为使命,为用户提供便捷服务极致体验,为餐厅提供一体化运营解决方案,推进整个餐饮行业的数字化发展进程。
欢迎来到 Elastic 社区电台的第三期节目,本期嘉宾是来自上海的饿了么的两位技术负责人,饿了么是中国专业的网上订餐平台,饿了么最早从 2.3 版本开始使用 ES,从最早的 12 个集群 100个节点,每天 400 万单,到如今达到 32 个集群,300 多个节点,千万个索引,总数据量达到 60 TB,共 10 几个业务系统的接入,每天高峰处理超 800 万单数据,搜索推荐、用户交易、后台营销等都是通过 ES 来实现,欢迎收听本期节目来了解饿了么具体是如何应用 ES 以及在规模化过程中遇到的挑战。
主持人:
Elastic 技术布道师,曾勇(Medcl)。
嘉宾:
张延明,饿了么运维专家,主要 ES 的部署、运维、JVM 性能优化。曾供职于腾讯等大公司,在业务和基础运维方面有十年的工作经验,对 ES、Kafka 等分布式技术具有强烈的兴趣,一直负责核心业务场景的运维部署。
徐胜,饿了么 ES 的负责人,主要是负责 ES 的平台化研发,ES 集群和查询性能优化。负责基于 ES 构建通用搜索引擎平台。对分布式计算、大数据具有浓厚的兴趣,在 ES 分布式搜索、大数据计算、聚合统计分析、性能优化等业务场景积累了三年经验。
可以点击下面的任意链接来收听(时长约 50 分钟):
- SoundCloud:https://soundcloud.com/elastic ... eleme
- 喜马拉雅:http://www.ximalaya.com/keji/14965410/94803743
- 蜻蜓 FM:http://share.qingting.fm/vchan ... 12932
关于 Elastic 社区电台
Elastic 开源社区举办的一款播客类节目, 邀请来自开源社区的用户,一起聊聊 Elastic 开源产品的使用案例、经验分享、架构变迁等等。
关于饿了么
“饿了么”是中国专业的餐饮O2O平台,由拉扎斯网络科技(上海)有限公司开发运营。 作为中国餐饮业数字化领跑者,“饿了么”秉承激情、极致、创新之信仰,以建立全面完善的数字化餐饮生态系统为使命,为用户提供便捷服务极致体验,为餐厅提供一体化运营解决方案,推进整个餐饮行业的数字化发展进程。 收起阅读 »

玩转 Elasticsearch 的 SQL 功能
最近发布的 Elasticsearch 6.3 包含了大家期待已久的 SQL 特性,今天给大家介绍一下具体的使用方法。
首先看看接口的支持情况
目前支持的 SQL 只能进行数据的查询只读操作,不能进行数据的修改,所以我们的数据插入还是要走之前的常规索引接口。
目前 Elasticsearch 的支持 SQL 命令只有以下几个:
命令 | 说明 |
---|---|
DESC table | 用来描述索引的字段属性 |
SHOW COLUMNS | 功能同上,只是别名 |
SHOW FUNCTIONS | 列出支持的函数列表,支持通配符过滤 |
SHOW TABLES | 返回索引列表 |
SELECT .. FROM table_name WHERE .. GROUP BY .. HAVING .. ORDER BY .. LIMIT .. | 用来执行查询的命令 |
我们分别来看一下各自怎么用,以及有什么效果吧,自己也可以动手试一下,看看。
首先,我们创建一条数据:
POST twitter/doc/
{
"name":"medcl",
"twitter":"sql is awesome",
"date":"2018-07-27",
"id":123
}
RESTful下调用SQL
在 ES 里面执行 SQL 语句,有三种方式,第一种是 RESTful 方式,第二种是 SQL-CLI 命令行工具,第三种是通过 JDBC 来连接 ES,执行的 SQL 语句其实都一样,我们先以 RESTful 方式来说明用法。
RESTful 的语法如下:
POST /_xpack/sql?format=txt
{
"query": "SELECT * FROM twitter"
}
因为 SQL 特性是 xpack 的免费功能,所以是在 _xpack
这个路径下面,我们只需要把 SQL 语句传给 query 字段就行了,注意最后面不要加上 ;
结尾,注意是不要!
我们执行上面的语句,查询返回的结果如下:
date | id | name | twitter
------------------------+---------------+---------------+---------------
2018-07-27T00:00:00.000Z|123 |medcl |sql is awesome
ES 俨然已经变成 SQL 数据库了,我们再看看如何获取所有的索引列表:
POST /_xpack/sql?format=txt
{
"query": "SHOW tables"
}
返回如下:
name | type
---------------------------------+---------------
.kibana |BASE TABLE
.monitoring-alerts-6 |BASE TABLE
.monitoring-es-6-2018.06.21 |BASE TABLE
.monitoring-es-6-2018.06.26 |BASE TABLE
.monitoring-es-6-2018.06.27 |BASE TABLE
.monitoring-kibana-6-2018.06.21 |BASE TABLE
.monitoring-kibana-6-2018.06.26 |BASE TABLE
.monitoring-kibana-6-2018.06.27 |BASE TABLE
.monitoring-logstash-6-2018.06.20|BASE TABLE
.reporting-2018.06.24 |BASE TABLE
.triggered_watches |BASE TABLE
.watcher-history-7-2018.06.20 |BASE TABLE
.watcher-history-7-2018.06.21 |BASE TABLE
.watcher-history-7-2018.06.26 |BASE TABLE
.watcher-history-7-2018.06.27 |BASE TABLE
.watches |BASE TABLE
apache_elastic_example |BASE TABLE
forum-mysql |BASE TABLE
twitter
有点多,我们可以按名称过滤,如 twitt 开头的索引,注意通配符只支持 %
和 _
,分别表示多个和单个字符(什么,不记得了,回去翻数据库的书去!):
POST /_xpack/sql?format=txt
{
"query": "SHOW TABLES 'twit%'"
}
POST /_xpack/sql?format=txt
{
"query": "SHOW TABLES 'twitte_'"
}
上面返回的结果都是:
name | type
---------------+---------------
twitter |BASE TABLE
如果要查看该索引的字段和元数据,如下:
POST /_xpack/sql?format=txt
{
"query": "DESC twitter"
}
返回:
column | type
---------------+---------------
date |TIMESTAMP
id |BIGINT
name |VARCHAR
name.keyword |VARCHAR
twitter |VARCHAR
twitter.keyword|VARCHAR
都是动态生成的字段,包含了 .keyword 字段。 还能使用下面的命令来查看,主要是兼容 SQL 语法。
POST /_xpack/sql?format=txt
{
"query": "SHOW COLUMNS IN twitter"
}
另外,如果不记得 ES 支持哪些函数,只需要执行下面的命令,即可得到完整列表:
SHOW FUNCTIONS
返回结果如下,也就是当前6.3版本支持的所有函数,如下:
name | type
----------------+---------------
AVG |AGGREGATE
COUNT |AGGREGATE
MAX |AGGREGATE
MIN |AGGREGATE
SUM |AGGREGATE
STDDEV_POP |AGGREGATE
VAR_POP |AGGREGATE
PERCENTILE |AGGREGATE
PERCENTILE_RANK |AGGREGATE
SUM_OF_SQUARES |AGGREGATE
SKEWNESS |AGGREGATE
KURTOSIS |AGGREGATE
DAY_OF_MONTH |SCALAR
DAY |SCALAR
DOM |SCALAR
DAY_OF_WEEK |SCALAR
DOW |SCALAR
DAY_OF_YEAR |SCALAR
DOY |SCALAR
HOUR_OF_DAY |SCALAR
HOUR |SCALAR
MINUTE_OF_DAY |SCALAR
MINUTE_OF_HOUR |SCALAR
MINUTE |SCALAR
SECOND_OF_MINUTE|SCALAR
SECOND |SCALAR
MONTH_OF_YEAR |SCALAR
MONTH |SCALAR
YEAR |SCALAR
WEEK_OF_YEAR |SCALAR
WEEK |SCALAR
ABS |SCALAR
ACOS |SCALAR
ASIN |SCALAR
ATAN |SCALAR
ATAN2 |SCALAR
CBRT |SCALAR
CEIL |SCALAR
CEILING |SCALAR
COS |SCALAR
COSH |SCALAR
COT |SCALAR
DEGREES |SCALAR
E |SCALAR
EXP |SCALAR
EXPM1 |SCALAR
FLOOR |SCALAR
LOG |SCALAR
LOG10 |SCALAR
MOD |SCALAR
PI |SCALAR
POWER |SCALAR
RADIANS |SCALAR
RANDOM |SCALAR
RAND |SCALAR
ROUND |SCALAR
SIGN |SCALAR
SIGNUM |SCALAR
SIN |SCALAR
SINH |SCALAR
SQRT |SCALAR
TAN |SCALAR
SCORE |SCORE
同样支持通配符进行过滤:
POST /_xpack/sql?format=txt
{
"query": "SHOW FUNCTIONS 'S__'"
}
结果:
name | type
---------------+---------------
SUM |AGGREGATE
SIN |SCALAR
那如果要进行模糊搜索呢,Elasticsearch 的搜索能力大家都知道,强!在 SQL 里面,可以用 match 关键字来写,如下:
POST /_xpack/sql?format=txt
{
"query": "SELECT SCORE(), * FROM twitter WHERE match(twitter, 'sql is') ORDER BY id DESC"
}
最后,还能试试 SELECT 里面的一些其他操作,如过滤,别名,如下:
POST /_xpack/sql?format=txt
{
"query": "SELECT SCORE() as score,name as myname FROM twitter as mytable where name = 'medcl' OR name ='elastic' limit 5"
}
结果如下:
score | myname
---------------+---------------
0.2876821 |medcl
或是分组和函数计算:
POST /_xpack/sql?format=txt
{
"query": "SELECT name,max(id) as max_id FROM twitter as mytable group by name limit 5"
}
结果如下:
name | max_id
---------------+---------------
medcl |123.0
SQL-CLI下的使用
上面的例子基本上把 SQL 的基本命令都介绍了一遍,很多情况下,用 RESTful 可能不是很方便,那么可以试试用 CLI 命令行工具来执行 SQL 语句,妥妥的 SQL 操作体验。
切换到命令行下,启动 cli 程序即可进入命令行交互提示界面,如下:
➜ elasticsearch-6.3.0 ./bin/elasticsearch-sql-cli
.sssssss.` .sssssss.
.:sXXXXXXXXXXo` `ohXXXXXXXXXho.
.yXXXXXXXXXXXXXXo` `oXXXXXXXXXXXXXXX-
.XXXXXXXXXXXXXXXXXXo` `oXXXXXXXXXXXXXXXXXX.
.XXXXXXXXXXXXXXXXXXXXo. .oXXXXXXXXXXXXXXXXXXXXh
.XXXXXXXXXXXXXXXXXXXXXXo``oXXXXXXXXXXXXXXXXXXXXXXy
`yXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
`oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
.XXXXXXXXXXXXXXXXXXXXXXXXXo`
.oXXXXXXXXXXXXXXXXXXXXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXo` `odo`
`oXXXXXXXXXXXXXXXXXXXXXXXXo` `oXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXo` `oXXXXXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXo` `oXXXXXXXXXXXXXo`
`yXXXXXXXXXXXXXXXXXXXXXXXo` oXXXXXXXXXXXXXXXXX.
.XXXXXXXXXXXXXXXXXXXXXXo` `oXXXXXXXXXXXXXXXXXXXy
.XXXXXXXXXXXXXXXXXXXXo` /XXXXXXXXXXXXXXXXXXXXX
.XXXXXXXXXXXXXXXXXXo` `oXXXXXXXXXXXXXXXXXX-
-XXXXXXXXXXXXXXXo` `oXXXXXXXXXXXXXXXo`
.oXXXXXXXXXXXo` `oXXXXXXXXXXXo.
`.sshXXyso` SQL `.sshXhss.`
sql>
当你看到一个硕大的创口贴,表示 SQL 命令行已经准备就绪了,查看一下索引列表,不,数据表的列表:
各种操作妥妥的,上面已经测试过的命令就不在这里重复了,只是体验不一样罢了。
如果要连接远程的 ES 服务器,只需要启动命令行工具的时候,指定服务器地址,如果有加密,指定 keystone 文件,完整的帮助如下:
➜ elasticsearch-6.3.0 ./bin/elasticsearch-sql-cli --help
Elasticsearch SQL CLI
Non-option arguments:
uri
Option Description
------ -----------
-c, --check <Boolean> Enable initial connection check on startup (default:
true)
-d, --debug Enable debug logging
-h, --help show help
-k, --keystore_location Location of a keystore to use when setting up SSL. If
specified then the CLI will prompt for a keystore
password. If specified when the uri isn't https then
an error is thrown.
-s, --silent show minimal output
-v, --verbose show verbose output
JDBC 对接
JDBC 对接的能力,让我们可以与各个 SQL 生态系统打通,利用众多现成的基于 SQL 之上的工具来使用 Elasticsearch,我们以一个工具来举例。
和其他数据库一样,要使用 JDBC,要下载该数据库的 JDBC 的驱动,我们打开: https://www.elastic.co/downloads/jdbc-client
只有一个 zip 包下载链接,下载即可。
然后,我们这里使用 DbVisualizer 来连接 ES 进行操作,这是一个数据库的操作和分析工具,DbVisualizer 下载地址是:https://www.dbvis.com/。
下载安装启动之后的程序主界面如下图:
我们如果要使用 ES 作为数据源,我们第一件事需要把 ES 的 JDBC 驱动添加到 DbVisualizer 的已知驱动里面。我们打开 DbVisualizer 的菜单【Tools】-> 【Driver Manager】,打开如下设置窗口:
点击绿色的加号按钮,新增一个名为 Elasticsearch-SQL
的驱动,url format 设置成 jdbc:es:
,如下图:
然后点击上图黄色的文件夹按钮,添加我们刚刚下载好且解压之后的所有 jar 文件,如下:
添加完成之后,如下图:
就可以关闭这个 JDBC 驱动的管理窗口了。下面我们来连接到 ES 数据库。
选择主程序左侧的新建连接图标,打开向导,如下:
选择刚刚加入的 Elasticsearch-SQL 驱动:
设置连接字符串,此处没有登录信息,如果有可以对应的填上:
点击 Connect
,即可连接到 ES,左侧导航可以展开看到对应的 ES 索引信息:
同样可以查看相应的库表结果和具体的数据:
用他自带的工具执行 SQL 也是不在话下:
同理,各种 ETL 工具和基于 SQL 的 BI 和可视化分析工具都能把 Elasticsearch 当做 SQL 数据库来连接获取数据了。
最后一个小贴士,如果你的索引名称包含横线,如 logstash-201811,只需要做一个用双引号包含,对双引号进行转义即可,如下:
POST /_xpack/sql?format=txt
{
"query":"SELECT COUNT(*) FROM \"logstash-*\""
}
关于 SQL 操作的文档在这里:
https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-jdbc.html
Enjoy!
最近发布的 Elasticsearch 6.3 包含了大家期待已久的 SQL 特性,今天给大家介绍一下具体的使用方法。
首先看看接口的支持情况
目前支持的 SQL 只能进行数据的查询只读操作,不能进行数据的修改,所以我们的数据插入还是要走之前的常规索引接口。
目前 Elasticsearch 的支持 SQL 命令只有以下几个:
命令 | 说明 |
---|---|
DESC table | 用来描述索引的字段属性 |
SHOW COLUMNS | 功能同上,只是别名 |
SHOW FUNCTIONS | 列出支持的函数列表,支持通配符过滤 |
SHOW TABLES | 返回索引列表 |
SELECT .. FROM table_name WHERE .. GROUP BY .. HAVING .. ORDER BY .. LIMIT .. | 用来执行查询的命令 |
我们分别来看一下各自怎么用,以及有什么效果吧,自己也可以动手试一下,看看。
首先,我们创建一条数据:
POST twitter/doc/
{
"name":"medcl",
"twitter":"sql is awesome",
"date":"2018-07-27",
"id":123
}
RESTful下调用SQL
在 ES 里面执行 SQL 语句,有三种方式,第一种是 RESTful 方式,第二种是 SQL-CLI 命令行工具,第三种是通过 JDBC 来连接 ES,执行的 SQL 语句其实都一样,我们先以 RESTful 方式来说明用法。
RESTful 的语法如下:
POST /_xpack/sql?format=txt
{
"query": "SELECT * FROM twitter"
}
因为 SQL 特性是 xpack 的免费功能,所以是在 _xpack
这个路径下面,我们只需要把 SQL 语句传给 query 字段就行了,注意最后面不要加上 ;
结尾,注意是不要!
我们执行上面的语句,查询返回的结果如下:
date | id | name | twitter
------------------------+---------------+---------------+---------------
2018-07-27T00:00:00.000Z|123 |medcl |sql is awesome
ES 俨然已经变成 SQL 数据库了,我们再看看如何获取所有的索引列表:
POST /_xpack/sql?format=txt
{
"query": "SHOW tables"
}
返回如下:
name | type
---------------------------------+---------------
.kibana |BASE TABLE
.monitoring-alerts-6 |BASE TABLE
.monitoring-es-6-2018.06.21 |BASE TABLE
.monitoring-es-6-2018.06.26 |BASE TABLE
.monitoring-es-6-2018.06.27 |BASE TABLE
.monitoring-kibana-6-2018.06.21 |BASE TABLE
.monitoring-kibana-6-2018.06.26 |BASE TABLE
.monitoring-kibana-6-2018.06.27 |BASE TABLE
.monitoring-logstash-6-2018.06.20|BASE TABLE
.reporting-2018.06.24 |BASE TABLE
.triggered_watches |BASE TABLE
.watcher-history-7-2018.06.20 |BASE TABLE
.watcher-history-7-2018.06.21 |BASE TABLE
.watcher-history-7-2018.06.26 |BASE TABLE
.watcher-history-7-2018.06.27 |BASE TABLE
.watches |BASE TABLE
apache_elastic_example |BASE TABLE
forum-mysql |BASE TABLE
twitter
有点多,我们可以按名称过滤,如 twitt 开头的索引,注意通配符只支持 %
和 _
,分别表示多个和单个字符(什么,不记得了,回去翻数据库的书去!):
POST /_xpack/sql?format=txt
{
"query": "SHOW TABLES 'twit%'"
}
POST /_xpack/sql?format=txt
{
"query": "SHOW TABLES 'twitte_'"
}
上面返回的结果都是:
name | type
---------------+---------------
twitter |BASE TABLE
如果要查看该索引的字段和元数据,如下:
POST /_xpack/sql?format=txt
{
"query": "DESC twitter"
}
返回:
column | type
---------------+---------------
date |TIMESTAMP
id |BIGINT
name |VARCHAR
name.keyword |VARCHAR
twitter |VARCHAR
twitter.keyword|VARCHAR
都是动态生成的字段,包含了 .keyword 字段。 还能使用下面的命令来查看,主要是兼容 SQL 语法。
POST /_xpack/sql?format=txt
{
"query": "SHOW COLUMNS IN twitter"
}
另外,如果不记得 ES 支持哪些函数,只需要执行下面的命令,即可得到完整列表:
SHOW FUNCTIONS
返回结果如下,也就是当前6.3版本支持的所有函数,如下:
name | type
----------------+---------------
AVG |AGGREGATE
COUNT |AGGREGATE
MAX |AGGREGATE
MIN |AGGREGATE
SUM |AGGREGATE
STDDEV_POP |AGGREGATE
VAR_POP |AGGREGATE
PERCENTILE |AGGREGATE
PERCENTILE_RANK |AGGREGATE
SUM_OF_SQUARES |AGGREGATE
SKEWNESS |AGGREGATE
KURTOSIS |AGGREGATE
DAY_OF_MONTH |SCALAR
DAY |SCALAR
DOM |SCALAR
DAY_OF_WEEK |SCALAR
DOW |SCALAR
DAY_OF_YEAR |SCALAR
DOY |SCALAR
HOUR_OF_DAY |SCALAR
HOUR |SCALAR
MINUTE_OF_DAY |SCALAR
MINUTE_OF_HOUR |SCALAR
MINUTE |SCALAR
SECOND_OF_MINUTE|SCALAR
SECOND |SCALAR
MONTH_OF_YEAR |SCALAR
MONTH |SCALAR
YEAR |SCALAR
WEEK_OF_YEAR |SCALAR
WEEK |SCALAR
ABS |SCALAR
ACOS |SCALAR
ASIN |SCALAR
ATAN |SCALAR
ATAN2 |SCALAR
CBRT |SCALAR
CEIL |SCALAR
CEILING |SCALAR
COS |SCALAR
COSH |SCALAR
COT |SCALAR
DEGREES |SCALAR
E |SCALAR
EXP |SCALAR
EXPM1 |SCALAR
FLOOR |SCALAR
LOG |SCALAR
LOG10 |SCALAR
MOD |SCALAR
PI |SCALAR
POWER |SCALAR
RADIANS |SCALAR
RANDOM |SCALAR
RAND |SCALAR
ROUND |SCALAR
SIGN |SCALAR
SIGNUM |SCALAR
SIN |SCALAR
SINH |SCALAR
SQRT |SCALAR
TAN |SCALAR
SCORE |SCORE
同样支持通配符进行过滤:
POST /_xpack/sql?format=txt
{
"query": "SHOW FUNCTIONS 'S__'"
}
结果:
name | type
---------------+---------------
SUM |AGGREGATE
SIN |SCALAR
那如果要进行模糊搜索呢,Elasticsearch 的搜索能力大家都知道,强!在 SQL 里面,可以用 match 关键字来写,如下:
POST /_xpack/sql?format=txt
{
"query": "SELECT SCORE(), * FROM twitter WHERE match(twitter, 'sql is') ORDER BY id DESC"
}
最后,还能试试 SELECT 里面的一些其他操作,如过滤,别名,如下:
POST /_xpack/sql?format=txt
{
"query": "SELECT SCORE() as score,name as myname FROM twitter as mytable where name = 'medcl' OR name ='elastic' limit 5"
}
结果如下:
score | myname
---------------+---------------
0.2876821 |medcl
或是分组和函数计算:
POST /_xpack/sql?format=txt
{
"query": "SELECT name,max(id) as max_id FROM twitter as mytable group by name limit 5"
}
结果如下:
name | max_id
---------------+---------------
medcl |123.0
SQL-CLI下的使用
上面的例子基本上把 SQL 的基本命令都介绍了一遍,很多情况下,用 RESTful 可能不是很方便,那么可以试试用 CLI 命令行工具来执行 SQL 语句,妥妥的 SQL 操作体验。
切换到命令行下,启动 cli 程序即可进入命令行交互提示界面,如下:
➜ elasticsearch-6.3.0 ./bin/elasticsearch-sql-cli
.sssssss.` .sssssss.
.:sXXXXXXXXXXo` `ohXXXXXXXXXho.
.yXXXXXXXXXXXXXXo` `oXXXXXXXXXXXXXXX-
.XXXXXXXXXXXXXXXXXXo` `oXXXXXXXXXXXXXXXXXX.
.XXXXXXXXXXXXXXXXXXXXo. .oXXXXXXXXXXXXXXXXXXXXh
.XXXXXXXXXXXXXXXXXXXXXXo``oXXXXXXXXXXXXXXXXXXXXXXy
`yXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
`oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXXXXXo`
.XXXXXXXXXXXXXXXXXXXXXXXXXo`
.oXXXXXXXXXXXXXXXXXXXXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXo` `odo`
`oXXXXXXXXXXXXXXXXXXXXXXXXo` `oXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXo` `oXXXXXXXXXo`
`oXXXXXXXXXXXXXXXXXXXXXXXXo` `oXXXXXXXXXXXXXo`
`yXXXXXXXXXXXXXXXXXXXXXXXo` oXXXXXXXXXXXXXXXXX.
.XXXXXXXXXXXXXXXXXXXXXXo` `oXXXXXXXXXXXXXXXXXXXy
.XXXXXXXXXXXXXXXXXXXXo` /XXXXXXXXXXXXXXXXXXXXX
.XXXXXXXXXXXXXXXXXXo` `oXXXXXXXXXXXXXXXXXX-
-XXXXXXXXXXXXXXXo` `oXXXXXXXXXXXXXXXo`
.oXXXXXXXXXXXo` `oXXXXXXXXXXXo.
`.sshXXyso` SQL `.sshXhss.`
sql>
当你看到一个硕大的创口贴,表示 SQL 命令行已经准备就绪了,查看一下索引列表,不,数据表的列表:
各种操作妥妥的,上面已经测试过的命令就不在这里重复了,只是体验不一样罢了。
如果要连接远程的 ES 服务器,只需要启动命令行工具的时候,指定服务器地址,如果有加密,指定 keystone 文件,完整的帮助如下:
➜ elasticsearch-6.3.0 ./bin/elasticsearch-sql-cli --help
Elasticsearch SQL CLI
Non-option arguments:
uri
Option Description
------ -----------
-c, --check <Boolean> Enable initial connection check on startup (default:
true)
-d, --debug Enable debug logging
-h, --help show help
-k, --keystore_location Location of a keystore to use when setting up SSL. If
specified then the CLI will prompt for a keystore
password. If specified when the uri isn't https then
an error is thrown.
-s, --silent show minimal output
-v, --verbose show verbose output
JDBC 对接
JDBC 对接的能力,让我们可以与各个 SQL 生态系统打通,利用众多现成的基于 SQL 之上的工具来使用 Elasticsearch,我们以一个工具来举例。
和其他数据库一样,要使用 JDBC,要下载该数据库的 JDBC 的驱动,我们打开: https://www.elastic.co/downloads/jdbc-client
只有一个 zip 包下载链接,下载即可。
然后,我们这里使用 DbVisualizer 来连接 ES 进行操作,这是一个数据库的操作和分析工具,DbVisualizer 下载地址是:https://www.dbvis.com/。
下载安装启动之后的程序主界面如下图:
我们如果要使用 ES 作为数据源,我们第一件事需要把 ES 的 JDBC 驱动添加到 DbVisualizer 的已知驱动里面。我们打开 DbVisualizer 的菜单【Tools】-> 【Driver Manager】,打开如下设置窗口:
点击绿色的加号按钮,新增一个名为 Elasticsearch-SQL
的驱动,url format 设置成 jdbc:es:
,如下图:
然后点击上图黄色的文件夹按钮,添加我们刚刚下载好且解压之后的所有 jar 文件,如下:
添加完成之后,如下图:
就可以关闭这个 JDBC 驱动的管理窗口了。下面我们来连接到 ES 数据库。
选择主程序左侧的新建连接图标,打开向导,如下:
选择刚刚加入的 Elasticsearch-SQL 驱动:
设置连接字符串,此处没有登录信息,如果有可以对应的填上:
点击 Connect
,即可连接到 ES,左侧导航可以展开看到对应的 ES 索引信息:
同样可以查看相应的库表结果和具体的数据:
用他自带的工具执行 SQL 也是不在话下:
同理,各种 ETL 工具和基于 SQL 的 BI 和可视化分析工具都能把 Elasticsearch 当做 SQL 数据库来连接获取数据了。
最后一个小贴士,如果你的索引名称包含横线,如 logstash-201811,只需要做一个用双引号包含,对双引号进行转义即可,如下:
POST /_xpack/sql?format=txt
{
"query":"SELECT COUNT(*) FROM \"logstash-*\""
}
关于 SQL 操作的文档在这里:
https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-jdbc.html
Enjoy!
收起阅读 »
社区日报 第315期 (2018-06-27)
http://t.cn/RBaaEP1
2.日志采集中的关键技术分析
http://t.cn/RroGKAZ
3.基于微服务的日志中心设计、实现与关键配置
http://t.cn/RBSE3Mx
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:江水
归档:https://elasticsearch.cn/article/686
订阅:https://tinyletter.com/elastic-daily
http://t.cn/RBaaEP1
2.日志采集中的关键技术分析
http://t.cn/RroGKAZ
3.基于微服务的日志中心设计、实现与关键配置
http://t.cn/RBSE3Mx
活动预告
1. 6月30日南京meetup参会报名中
https://elasticsearch.cn/m/article/647
2. 7月21日上海meetup演讲申请中
https://elasticsearch.cn/m/article/655
编辑:江水
归档:https://elasticsearch.cn/article/686
订阅:https://tinyletter.com/elastic-daily
收起阅读 »

[杭州滨江] [PingPong 金融] 招聘 Java 高级工程师
我司已经自建 IDC 搭建大数据中心,微服务上线如火如荼,Spark, Hadoop, HBase, MongoDB, Dubbo, RocketMQ, Elasticsearch 等大公司用的技术,我们全部都有用,我们完全拥抱开源,18 年我们已经准备自研一些开源的 framework,也愿意为开源贡献力量。
我们招聘技术大牛了,先贴下公司福利:
最新版 MacBook Pro 或 Surface 随你挑
每天下午水果 + 晚上免费晚餐
每年 15 天年假 + 每月 2k 加班费 + 3 个月以上的年终
生日礼品 + 每月团建费 + 节日聚餐 + 买书报销
继续贴 JD:
============================================================
高级 Java 工程师职位描述(薪资 25-40K):
岗位职责
1.带领团队完成产品开发,承担技术 leader 和项目经理角色;
2.负责系统后端核心 API 的编写;
3.负责公司各平台的对接工作;
4.根据业务需求合理设计和扩展;
岗位要求
1.Java 基础扎实,精通多线程、并发、集合、网络、IO 等基础知识,熟悉 Http、TCP/IP 等协议;
2.熟练使用 SpringBoot、Mybatis 等常用的框架并了解其工作原理;
3.熟悉 RocketMQ、Dubbo、Zookeeper 等开源技术的使用以及工作原理;
4.熟悉 MySql、HBase、Elasticsearch、Redis 等的运用以及原理,优秀的 SQL 编写能力以及调优能力;
5.思维清晰,能独立分析并解决遇到的问题,丰富的系统设计能力以及服务化设计能力;
6.具备良好的表达能力,善于团队合作、具备非常良好的责任心以及 Owner 意识,具备独立解决问题能力;
有意向的请发简历到邮箱: jiwg#pingpongx.com, 最后感谢各位的阅读.
我司已经自建 IDC 搭建大数据中心,微服务上线如火如荼,Spark, Hadoop, HBase, MongoDB, Dubbo, RocketMQ, Elasticsearch 等大公司用的技术,我们全部都有用,我们完全拥抱开源,18 年我们已经准备自研一些开源的 framework,也愿意为开源贡献力量。
我们招聘技术大牛了,先贴下公司福利:
最新版 MacBook Pro 或 Surface 随你挑
每天下午水果 + 晚上免费晚餐
每年 15 天年假 + 每月 2k 加班费 + 3 个月以上的年终
生日礼品 + 每月团建费 + 节日聚餐 + 买书报销
继续贴 JD:
============================================================
高级 Java 工程师职位描述(薪资 25-40K):
岗位职责
1.带领团队完成产品开发,承担技术 leader 和项目经理角色;
2.负责系统后端核心 API 的编写;
3.负责公司各平台的对接工作;
4.根据业务需求合理设计和扩展;
岗位要求
1.Java 基础扎实,精通多线程、并发、集合、网络、IO 等基础知识,熟悉 Http、TCP/IP 等协议;
2.熟练使用 SpringBoot、Mybatis 等常用的框架并了解其工作原理;
3.熟悉 RocketMQ、Dubbo、Zookeeper 等开源技术的使用以及工作原理;
4.熟悉 MySql、HBase、Elasticsearch、Redis 等的运用以及原理,优秀的 SQL 编写能力以及调优能力;
5.思维清晰,能独立分析并解决遇到的问题,丰富的系统设计能力以及服务化设计能力;
6.具备良好的表达能力,善于团队合作、具备非常良好的责任心以及 Owner 意识,具备独立解决问题能力;
有意向的请发简历到邮箱: jiwg#pingpongx.com, 最后感谢各位的阅读. 收起阅读 »