资讯专栏INFORMATION COLUMN

ElasticSearch的部署、同步与调优

Chaz / 1861人阅读

摘要:的能支持批量操作,大大提升了创建索引的效率。注意配置分词组件必须在创建索引之前,否则是无效的。调优的调优分两个层面,一是层面的调优,包括加大的可用内存及单线程内存。

ElasticSearch是一个强大的搜索服务器,基于Apache Lucene的全文搜索引擎开发,具有高性能、分布式和零配置的优点。在当前的项目中,我们希望ES能承担亿级文档的搜索,而ES也证明了即便面对这样的数据规模,也能实现十分迅速的搜索响应。

概念

节点(Node):节点是一个ES的实例,一般一台主机上部署一个节点-

集群(Cluster):集群由若干节点组成,和任意节点的通信等价于和集群的通信

分片(Shard):一个索引会分成多个分片存储,分片数量在索引建立后不可更改

副本(Replica):副本是分片的一个拷贝,目的在于提高系统的容错性和搜索的效率

索引(Index):类似数据库的库

类型(Type):类似数据库的表

文档(Document):类似数据库的行,包含一个或多个Field

字段(Field):搜索的最小单元,可通过Mapping定义不同的属性(比如可否被搜索)

部署
  

ElasticSearch 1.5.0版本为例

ES的使用很简单,从官网下载压缩包后,解压后输入如下指令:

./bin/elasticsearch -d --cluster.name [your_cluster_name] --node.name [your_node_name]

一旦在多台主机上启动拥有同一个cluster.name的ES实例,它们会自动组成一个集群。

elasticsearch-head

elasticsearch-head是一个必装的插件,它提供了一个web界面,显示集群和索引的状态,同时具备浏览和搜索文档的功能。只需要通过ES的plugin指令安装就OK了:

./bin/plugin -install mobz/elasticsearch-head
同步

通常线上系统都不会使用ES作为主存储,从主存储创建索引的效率是我们关心的。ES的bulk API能支持批量操作,大大提升了创建索引的效率。以下是使用pyelasticsearch(非官方的一个Python客户端)批量创建索引的范例:

pythonfrom pyelasticsearch import ElasticSearch
from pyelasticsearch import bulk_chunks

es = ElasticSearch()

def documents():
    for _doc in docs:
        yield es.index_op(doc=_doc, id=doc["id"])

for chunk in bulk_chunks(documents(), docs_per_chunk=500, bytes_per_chunk=10000):
    es.bulk(chunk, index="index-test", doc_type="doc")

单机索引200万条记录的耗时约10分钟。

中文

ES支持中文的前提是安装正确的分词组件,比如elasticsearch-analysis-ik。但貌似该组件的最新版本(1.2.9)不支持plugin指令直接安装,只能通过Maven重新编译了:

git clone https://github.com/medcl/elasticsearch-analysis-ik.git --depth 1
cd elasticsearch-analysis-ik/
# 真心希望你的网络棒棒嗒
mvn package
unzip ./target/releases/elasticsearch-analysis-ik-1.2.9.zip

zip解压得到5个jar包:

elasticsearch-analysis-ik-1.2.9.jar

httpclient-4.3.5.jar

httpcore-4.3.2.jar

commons-logging-1.1.3.jar

commons-codec-1.6.jar

返回ES目录,新建路径./plugins/analysis-ik并把上述jar包全部移进去。
第二步,把elasticsearch-analysis-ik/config/ik文件夹(IK自带的词典)复制到ES目录的./config路径下。
第三步,在./config/elasticsearch.yml文件的最后加上:

index:
  analysis:
    analyzer:
      ik:
          alias: [news_analyzer_ik,ik_analyzer]
          type: org.elasticsearch.index.analysis.IkAnalyzerProvider

index.analysis.analyzer.default.type : "ik"

至此大功告成。注意配置分词组件必须在创建索引之前,否则是无效的。

调优

ES的调优分两个层面,一是Java层面的调优,包括加大JVM的可用内存及单线程内存。

对Unix系统,可修改./bin/elasticsearch.in.sh文件:

# 一般分配主机1/4-1/2的内存
if [ "x$ES_MIN_MEM" = "x" ]; then
    ES_MIN_MEM=12g
fi
if [ "x$ES_MAX_MEM" = "x" ]; then
    ES_MAX_MEM=12g
fi

JAVA_OPTS="$JAVA_OPTS -Xms${ES_MIN_MEM}"
JAVA_OPTS="$JAVA_OPTS -Xmx${ES_MAX_MEM}"
# 线程大小, ES单线程承载的数据量比较大
JAVA_OPTS="$JAVA_OPTS -Xss128m"

调优的第二个层面是ES本身的调优,修改./config/elasticsearch.yml文件,关键的项目如下所示:

# 分片数量,推荐分片数*副本数=集群数量
# 分片会带来额外的分割和合并的损耗,理论上分片数越少,搜索的效率越高
index.number_of_shards: 20
# 锁定内存,不让JVM写入swapping,避免降低ES的性能
bootstrap.mlockall: true
# 缓存类型设置为Soft Reference,只有当内存不够时才会进行回收
index.cache.field.max_size: 50000
index.cache.field.expire: 10m
index.cache.field.type: soft
  

来自:建造者说

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/34037.html

相关文章

  • DataX限速调优

    DataX的限速与调优 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; margin:...

    不知名网友 评论0 收藏598
  • Java学习路线总结,搬砖工逆袭Java架构师(全网最强)

    摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...

    Scorpion 评论0 收藏0
  • 有赞搜索系统架构演进

    摘要:另外集群也没有做物理隔离,有一次促销活动就因为粉丝数据量过于庞大导致进程内存耗尽而,使得集群内全部索引都无法正常工作,这给我上了深深的一课。 有赞搜索平台是一个面向公司内部各项搜索应用以及部分 NoSQL 存储应用的 PaaS 产品,帮助应用合理高效的支持检索和多维过滤功能,有赞搜索平台目前支持了大大小小一百多个检索业务,服务于近百亿数据。 在为传统的搜索应用提供高级检索和大数据交互能...

    wh469012917 评论0 收藏0
  • DataPipeline |《Apache Kafka实战》作者胡夕:Apache Kafka监控与

    摘要:主机监控个人认为对于主机的监控是最重要的。在实际监控时可以有意识地验证这一点。另外还有两个线程池空闲使用率小关注,最好确保它们的值都不要低于,否则说明已经非常的繁忙。此时需要调整线程池线程数。 showImg(https://segmentfault.com/img/bVbgpkO?w=1280&h=720); 胡夕,《Apache Kafka实战》作者,北航计算机硕士毕业,现任某互金...

    lvzishen 评论0 收藏0
  • DataPipeline |《Apache Kafka实战》作者胡夕:Apache Kafka监控与

    摘要:主机监控个人认为对于主机的监控是最重要的。在实际监控时可以有意识地验证这一点。另外还有两个线程池空闲使用率小关注,最好确保它们的值都不要低于,否则说明已经非常的繁忙。此时需要调整线程池线程数。 showImg(https://segmentfault.com/img/bVbgpkO?w=1280&h=720); 胡夕,《Apache Kafka实战》作者,北航计算机硕士毕业,现任某互金...

    walterrwu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<