`
weitao1026
  • 浏览: 1048923 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Elasticsearch、MongoDB和Hadoop比较

 
阅读更多

Elasticsearch、MongoDB和Hadoop比较

IT界在过去几年中出现了一个有趣的现象。很多新的技术出现并立即拥抱了“大数据”。稍微老一点的技术也会将大数据添进自己的特性,避免落大部队太远,我们看到了不同技术之间的边际的模糊化。假如你有诸如Elasticsearch或者Solr这样的搜索引擎,它们存储着JSON文档,MongoDB存着JSON文档,或者一堆JSON文档存放在一个Hadoop集群的HDFS中。你可以使用这三种配置完成很多同养的事情。

ES是否可以作为一个NoSQL数据库?粗看,这句话说的不太对,但是这是一个合理的场景。类似地,MongoDB在MapReduce的基础上使用分片的技术同样可以完成Hadoop可以做的工作。当然使用众多功能,我们可以在Hadoop之上(Hive、HBase、Pig和同样的一些)你也可以用多种方式查询Hadoop集群中的数据。

那么,我们现在是否能说Hadoop、MongoDB和Elasticsearch这三个是完全相同的呢?显然不行!每个工具都有自身最为适用的场景,但是每个都有相当的灵活性能够胜任不同的角色。现在的问题就变成“这些技术的最合适的使用场景是什么?”。下面我们来瞧瞧。

Elasticsearch已经超越了其最初的纯搜索引擎的角色,现在已经增加了分析和可视化的特性——但是它的核心仍旧是一个全文搜索引擎。Elasticsearch建立在Lucene之上并且支持极其快速的查询和丰富的查询语法。如果你有数百万的文档需要通过关键词进行定位时,Elasticsearch肯定是最佳选择。当然,如果你的文档是JSON的,你就可以把Elasticsearch当作一种轻量级的“NoSQL数据库”。但是Elasticsearch不是一个合适的数据库引擎,对复杂的查询和聚合并不是很强,尽管统计facet可以提供一定的关于给定查询的统计信息的支持。Elasticsearch中的facet主要是用来支持分面的浏览功能。

目前Elasticsearch已经增加了aggregation的功能

如果你在寻找一个对应于一个关键词查询的少量的文档集合,并且要支持在这些结果中分面的导航,那么Elasticsearch肯定是最好的选择。如果你需要进行更加复杂的计算,对数据执行服务端的脚本,轻松地运行MapReduce job,那么MongoDB或者Hadoop就进入待选项中。

MongoDB是NoSQL数据库,被设计成一个高可扩展,并且有自动分片的功能及一些额外性能优化的功能。MongoDB是一个面向文档的数据库,以JSON的形式进行数据的存储(准确地说可以称为BSON,对JSON进行了一些增强)——例如,一个native数据类型。MongoDB提供了一个文本索引类型来支持全文检索,所以我们可以看到在Elasticsearch和MongoDB之间的界限,基本的关键词搜索对应于文档的集合。

MongoDB超过Elasticsearch的地方在于其对于服务器端js脚本的支持、聚合的管道、MapReduce的支持和capped collections。使用MongoDB,你可以使用聚合管道来处理一个集合中的文档,通过一个管道操作的序列来多步地对文档进行处理。管道操作可以生成全新的文档并且从最终的结果中移除文档。这是一个在检索数据时的相当强的过滤、处理和转化数据的特点。MongoDB也支持对一个数据collection进行map/reduce job的执行,使用定制的js函数进行操作的map和reduce过程。这就保证了MongoDB可以对选定的数据执行任意类型的计算或者转换的终极的灵活性。

MongoDB另一个极其强大的特性称之为“Capped collections”。使用这个特性,用户可以定义一个collection的最大size——然后这个collection可以被盲写,并且会roll-over必须的数据来获取log和其他供分析的流数据。

你看到,Elasticsearch和MongoDB有一个可能的应用场景的重叠,它们不是同样的工具。但是Hadoop呢?Hadoop就是MapReduce,这已经有MongoDB就地支持了啊!是不是还有一个专属于Hadoop的场景,MongoDB就只是适合。

有!Hadoop是老MapReduce了,提供了最为灵活和强大的环境来进行大量数据的处理,毫无疑问的是能够搞定不能使用Elasticsearch或者MongoDB处理的场景。

为了更加清楚地认识到这点,看看Hadoop如何使用HDFS抽象存储的——从关联的计算特性上。通过HDFS中存储的数据,任意job都可以对于数据进行运算,使用写在核心MapReduce API上,或者使用Hadoop流技术直接使用native语言编程。基于Hadoop 2和YARN,甚至核心编程模型都已经被抽象了,你不再受到MapReduce的牵制了。使用YARN你可以在Hadoop上实现MPI并且用那种方式写job。

额外地,Hadoop生态系统提供了一个交错的工具集合,建立在HDFS和核心MapReduce之上,来进行数据的查询、分析和处理。Hive提供了一个类似SQL的语言,使得业务分析可以使用一个用户习惯的语法进行查询。HBASE提供了一个基于Hadoop的面向列的数据库。Pig和Sizzle提供了两个更加不同的编程模型来查询Hadoop数据。对存储在HDFS中的数据的使用,你可以继承Mahout的机器学习的能力至你的工具集。当使用RHadoop时,你可以直接使用R统计语言来对Hadoop数据执行高级的统计分析

所以,尽管Hadoop和MongoDB也有部分重叠的应用场景并且共同拥有一些有用的功能(无缝的水平扩展),但是两者之间还是有着特定的场景。如果你仅仅想要通过关键字和简单的分析,那么Elasticsearch可以完成任务;如果你需要查询文档,并且包含更加复杂的分析过程,那么MongoDB相当适合;如果你有一个海量的数据,需要大量不同的复杂处理和分析,那么Hadoop提供了最为广泛的工具和灵活性。

一个亘古不变的道理就是选择手头最适合的工具做事。在大数据这样的背景下,技术层出不穷,技术间的界限也是相当的模糊,这对我们的选择是一件相当困难的事情。正如你所见,特定的场景有着最适合的技术,这种差异性是相当重要的。最好的消息就是你不在限定在某一种工具或者技术上。依赖于你面对的场景,这就使得我们能够构建一个整合的系统。例如,我们知道Elasticsearch和Hadoop是可以很好地一起共事的,使用Elasticsearch快速的关键词查询,Hadoop job则能处理相当复杂的分析。

最终,采用了最大的搜索和细致的分析来确认最为合适的选择。在选择任何技术或者平台时,需要仔细地验证它们,理解这个东东适合哪些场景,哪里可以进行优化,需要做出哪些牺牲。从一个小小的预研项目开始,确认完毕后,再将技术应用到真正的平台上,缓慢地升级到新的层级。

 

分享到:
评论

相关推荐

    ES和HADOOP使用问题和需求

    在实时数据分析领域,ELK(Elasticsearch、Logstash、Kibana)栈提供了从数据采集、处理到可视化的完整解决方案。 - **节点个数考量**:节点个数不是越多越好,应根据具体需求和数据特性来确定。对于数据量不大且...

    MongoDB-ElasticSearch-Spark-ETL:读取MongoDB并迁移到ElasticSearch的通用模板

    MongoDB-ElasticSearch-ETL 概要 读取MongoDB并迁移到ElasticSearch的通用模板 要求 mongodb-driver-3.0.2.jar bson-3.0.2.jar mongodb-driver-core-3.0.2.jar mongo-hadoop-core-1.4.0.jar elasticsearch-spark...

    mongodb-compass-community-1.16.4-win32-x64.zip

    对于与Hadoop的学习相关,MongoDB可以作为NoSQL数据存储,与Hadoop生态系统结合,实现大数据的高效处理和分析。例如,使用MongoDB作为Hadoop MapReduce作业的输入源或输出目标,或者利用MongoDB的聚合框架进行数据...

    基于MongoDB+Spark+ElasticSearch的电影推荐系统.zip

    在这个项目中,MongoDB作为非关系型数据库用于存储海量的电影数据,Spark作为分布式计算框架负责数据处理和推荐算法的实现,而ElasticSearch则作为搜索引擎,确保了推荐结果的快速检索。以下将详细阐述这些技术在...

    Elasticsearch八大经典应用1

    2. 数据仓库(如Hadoop、Spark等):Elasticsearch适合处理大规模实时查询,而在批量处理和离线分析上可能不如Hadoop和Spark有效。 3. NoSQL数据库(如MongoDB、Cassandra等):Elasticsearch在文档型数据存储和...

    hadoop新手入门资料

    疑犯追踪 13_项目:民航 14_azkaban 15_项目:公安局 16_SpringMVC 17_额外项目案例拓展 18_MyBatis 19_Maven 20_Scala 21_Spark 23_面试 23_Redis 24_ElasticSearch 25_MongoDB 26_电影推荐系统 27_滴滴系统 28_...

    第1周 Hadoop生态系统以及版本演化

    - **Logstash**:属于Elasticsearch家族的一员,是一个强大的开源工具,用于收集、解析和转发日志数据。Logstash支持大量的插件来实现不同的数据采集方式,非常适合用于构建复杂的数据管道。 2. **存储系统**:...

    MongoDB热温数据的最佳实践.pptx

    - **兼容性**:支持多种数据库系统(如MySQL、SQL Server、Oracle等)和数据源(如ElasticSearch、Hadoop),方便数据迁移。 - **实时性**:实现数据的实时同步,延迟在秒级,确保数据新鲜度。 - **自定义**:...

    卢亿雷-Hadoop应用及趟坑

    卢亿雷特别强调了Hadoop系统架构中集成的各类技术,如HBase、Elasticsearch、MySQL、MongoDB、Kafka、MQ、Zookeeper以及YARN和HDFS等。 Hadoop的应用分为离线和在线平台应用两大类。离线平台通过MapReduce来处理大...

    卢亿雷-Hadoop生态系统分析

    在数据分析和存储方面,ElasticSearch是一个基于Lucene的搜索引擎,它提供了一个分布式的多用户能力的全文搜索引擎,基于RESTful web接口。 对于数字营销来说,精准投放是核心策略之一。卢亿雷提出的3W原则即“Who...

    基于SpringBoot与Hadoop实现的的企业云盘项目源码.zip

    - **文件搜索**:基于文件名、内容或元数据的快速搜索功能,可能涉及到Elasticsearch等全文搜索引擎。 - **版本控制**:记录文件的历史版本,允许用户回滚到之前的版本。 - **多租户支持**:不同的企业或用户组...

    高频代码,日期处理,数据库查询,ES查询,自己的文件

    本文将围绕标题和描述中提到的"高频代码"、"日期处理"、"数据库查询"、"ES查询"以及"自己的文件"这五个关键点,深入探讨相关知识点,并结合标签中的"数据库"、"elasticsearch"、"源码软件"、"database"和"大数据",...

    ES分布式搜索解决方案.docx

    Elasticsearch(ES)是一种基于Lucene的开源全文搜索引擎,专门设计用于处理大规模数据的分布式、实时搜索和分析引擎。它解决了传统数据库在大规模数据检索时的性能问题。 1. **数据存储**:Elasticsearch采用分片...

    unauthorized-check:扫描常见未授权访问(redis,mongodb,memcached,elasticsearch,zookeeper,ftp,CouchDB,docker,Hadoop)

    redis、mongodb、memcached、elasticsearch、zookeeper、ftp、CouchDB、docker、Hadoop 安装 pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ 使用说明 python3 unauthorized-check....

    大数据产品能力评测赋能企业大数据能力建设 ( PDFDrive ).pdf

    Hadoop生态系统包括HDFS(分布式文件系统)、Hive(数据仓库工具)、HBase(分布式数据库)等,NoSQL数据库如MongoDB和Cassandra提供了非关系型数据存储的解决方案。此外,还有Spark、Flink、Storm等计算引擎以及...

    Zabbix监控第三方中间件内存及CPU使用情况模板

    Zabbix监控第三方中间件内存及CPU使用情况模板 nginx redis mysql tomcat Rocketmq mongodb kafka zookeeper httpd elasticsearch jenkins hbase hadoop hive docker

    日志管理系统

    存储方面,常见的选择有Elasticsearch、MongoDB、Hadoop HDFS等。Elasticsearch以其强大的全文搜索和实时分析能力,常被用作日志存储的主要平台。MongoDB适合存储结构化和半结构化的日志数据,而HDFS则适用于大规模...

    logstash-1.4.2

    **Logstash 1.4.2 知识点详解** Logstash 是一款开源的数据收集引擎,它具有强大的处理和传输能力,广泛应用于...与 Elasticsearch 和 Hadoop 等技术的结合,使得它在日志管理和大数据分析领域具有广泛的应用价值。

    可供参考的compose.rar

    elasticsearch flask hadoop huzanbaseimage mongodb mongodb-single mongoexpress mysql mytest netcore portainer rabbitmq redis registry-ui sample skywalking spark sqlserver ssdb zookeeper

Global site tag (gtag.js) - Google Analytics