热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用ElasticSearch分布式存储和搜索海量数据

分布式存储和搜索海量数据从来都不是一件容易的事,面对着每天生产的海量数据,你把它放在文件,数据库?本文带领您走进利用ElasticSearch做分布

分布式存储和搜索海量数据从来都不是一件容易的事,面对着每天生产的海量数据,你把它放在文件,数据库?一台机器存储不下该如何?ElasticSearch应用而生,基于lucene,支持分布式存储,支持TB级数据存储,支持上百台服务器分布式部署,支持数据冗余,快速检索,下文给出ElasticSearch的部署与开发步骤;


版本信息

  • es版本:ElasticSearch 6.3.1

  • 使用elasticsearch-head
    浏览分布式部署节点信息;

安装与集群配置

  • 拷贝elasticsearch-6.3.1.tar.gz文件到某目录下并解压,如 /home/es/elasticsearch-6.3.1

  • 创建用户与用户组:
    groupadd es

    useradd es -g es
    chown -R es:es /home/es/elasticsearch-6.3.1

  • 创建es的数据目录和日志目录;

  • 修改配置文件config/elasticsearch.yml
    如下:

1cluster.name: YOURCLUSTERNAME
2node.name= YOURNODENAME
3path.data: /home/es/data
4path.logs: /home/es/logs
5network.host: 192.168.1.230
6http.port: 9200
7http.cors.enabled: true 
8http.cors.allow-origin: "*"  
9#其他包括该集群的服务器地址
10discovery.zen.ping.unicast.hosts: ["192.168.1.x", "192.168.1.y"]
11discovery.zen.minimum_master_nodes: 2
12#Centos6不支持SecComp屏蔽memory_lock
13bootstrap.memory_lock: false
14bootstrap.system_call_filter: false 
15#CentOS6,es6.3.1版本加入
16action.auto_create_index: .security,.monitoring*,.watches,.triggered_watches,.watcher-history*
17xpack.security.enabled: false
18xpack.monitoring.enabled: true
19xpack.graph.enabled: false
20xpack.watcher.enabled: false
21xpack.ml.enabled: false

  • 调整linux参数

1vi /etc/security/limits.conf
2soft nofile 65536
3hard nofile 131072
4vi /etc/sysctl.conf 
5vm.max_map_count=655360
6sysctl -p

特别注意:使用SpringBoot2的不能使用ElasticSearch 5.x.x
版,会报无法发现node错误

es开发:maven依赖

1<dependency>
2    <groupId>org.springframework.bootgroupId>
3    <artifactId>spring-boot-starter-data-elasticsearchartifactId>
4dependency>

es开发:配置

application.yml
中引入:

1spring:
2  data:
3    elasticsearch:
4      cluster-namees-cluster
5      cluster-nodes: 192.168.1.63:9300,192.168.1.64:9300
6      repositories.enabletrue

es开发

可以使用JPA
或注入ElasticsearchTemplate
ES
做增删改查

 1//Controller
 2//ElasticsearchTemplate方式
 3@Autowired
 4private ElasticsearchTemplate elasticsearchTemplate;
 5//JPA方式
 6@Autowired
 7private ArticleRepository articleRepository;
 8
 9@RequestMapping("/query")
10    public Object singleTitle(String word) {
11        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(new QueryStringQueryBuilder(word)).build();
12        return elasticsearchTemplate.queryForList(searchQuery, ESArticle.class);
13    }
14
15    @RequestMapping("/add")
16    public Object addArticle(ESArticle article) {
17        article.setWeight(1);
18        article.setCreateTime(new Date());
19        articleRepository.save(article);
20        return article;
21    }
22
23    @RequestMapping("/remove")
24    public Map removeArticle(String id) {
25        Map retMap = new HashMap();
26        retMap.put("ret"false);
27        try {
28            articleRepository.deleteById(id);
29            retMap.put("ret"true);
30        }catch(Exception ex) {
31            ex.printStackTrace();
32        }
33        return retMap;
34    }
35
36    @RequestMapping("/update")
37    public Map updateArticle(String id,String title) {
38        Map retMap = new HashMap();
39        retMap.put("ret"false);
40        try {
41            Optional artile = articleRepository.findById(id);
42            if(artile.isPresent()) {
43                artile.get().setTitle(title);
44                articleRepository.save(artile.get());
45            }
46            retMap.put("ret"true);
47        }catch(Exception ex) {
48            ex.printStackTrace();
49        }
50        return retMap;
51    }
52
53//JPA,定义实体类
54@Document(indexName="article",type="post",indexStoreType="fs",shards=5,replicas=2,refreshInterval="-1")
55public class ESArticle {
56    @Id
57    private String id;
58    private String title;
59    @Field(type=FieldType.Text,searchAnalyzer="ik",analyzer="ik")
60    private String content;
61    private Date createTime;
62
63    @Field(type=FieldType.Integer,index=false)
64    private int weight;
65    public String getId() {
66        return id;
67    }
68    public void setId(String id) {
69        this.id = id;
70    }
71    public String getTitle() {
72        return title;
73    }
74    public void setTitle(String title) {
75        this.title = title;
76    }
77    public String getContent() {
78        return content;
79    }
80    public void setContent(String content) {
81        this.content = content;
82    }
83    public Date getCreateTime() {
84        return createTime;
85    }
86    public void setCreateTime(Date createTime) {
87        this.createTime = createTime;
88    }
89    public int getWeight() {
90        return weight;
91    }
92    public void setWeight(int weight) {
93        this.weight = weight;
94    }
95    @Override
96    public String toString() {
97        return "ESArticle [id=" + id + ", title=" + title + ", cOntent=" + content + ", createTime=" + createTime
98                + ", weight=" + weight + "]";
99    }
100}
101//JPA定义Repository
102public interface ArticleRepository extends ElasticsearchRepository<ESArticleString>{
103
104}

我们的应用场景

  • 日志统一收集中心:来自MQ大量的日志消息的存储我们采用es

  • kibana
    中查看日志Dashboard,采用es
    做分布式存储和查询;

  • 其他;



以下文章可能您感兴趣:


  1. 《SpringBoot2常用模块整合的整理》

  2. 《基于Netty的日志统一采集中心》


注我们的公众号 

长按识别二维码关注我们





推荐阅读
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • centos6.8 下nginx1.10 安装 ... [详细]
  • 【Mysql】九、Mysql高级篇 索引
    MYSQL索引一、什么是索引?二、索引数据结构1、mysql数据库的四种索引2、BTREE结构三、索引分类、创建索引、查看索引1、单值索引2、复合索引3、函数索引4、 ... [详细]
  • 部署solr建立nutch索引
    2019独角兽企业重金招聘Python工程师标准接着上篇nutch1.4的部署应用,我们来部署一下solr,solr是对lucene进行了封装的企 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
author-avatar
WYZ的小舟于SZ
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有