我正在构建一个社交网络,其中包含各种功能,其中许多功能都是由大数据密集型工作负载(如机器学习)提供支持。例如:推荐系统,搜索引擎和时序序列匹配器。
鉴于我目前有5<用户 - 但预测显着增长 - 我应该使用什么指标来决定:
将Postgres视为减少它与Spark之间移植压力的一种方法(使用一个适用于它们的SQL抽象层)。 Spark似乎很有趣,可以想象它可以快速回答各种ML,SQL和Graph问题。 MongoDB是我通常使用的,但我发现它的缩放和map-reduce功能非常有限。
答案 0 :(得分:5)
我认为您正朝着寻找软件堆栈/架构的正确方向:
对于这些优点,Hadoop + Spark可以为您提供所需的优势。 Hadoop目前相对成熟,以批量方式处理大规模数据。它支持可靠和可扩展的存储(HDFS)和计算(Mapreduce / Yarn)。通过添加Spark,您可以利用Spark添加的存储(HDFS)和实时计算(性能)。
在开发方面,Java / Scala本身支持这两个系统。这些库的支持,性能调优在stackoverflow和其他地方都很丰富。至少有一些机器学习库(Mahout,Mlib)使用hadoop,spark。
对于部署,AWS和其他云提供商可以为hadoop / spark提供主机解决方案。也不是问题。
答案 1 :(得分:1)
我想你应该分开数据存储和数据处理。特别是" Spark或MongoDB?"问题不是一件好事,而是“Spark,Hadoop或Storm?"还有" MongoDB或Postgres或HDFS?"
在任何情况下,我都会避免让数据库进行处理。
答案 2 :(得分:1)
我必须承认,我有点偏见,但如果你想学习新的东西,你有很多空闲时间,你很愿意阅读很多,你有资源(就基础设施),去HBase *,你不会后悔。当你可以实时拥有数十亿个原子计数器时,就会开启一个全新的可能性和有趣的功能。
*除了Hadoop,Hive,Spark ......
答案 3 :(得分:1)
在我看来,它更多地取决于您的要求和您将拥有的数据量而不是用户数量 - 这也是一项要求 - 。 Hadoop(又名Hive / Impala,HBase,MapReduce,Spark等)可以很好地处理大量数据 - 每天数据/ TB /数据并且可以横向扩展。
在我使用的大数据环境中,我一直使用Hadoop HDFS来存储原始数据,并利用分布式文件系统来分析Apache Spark的数据。结果存储在像MongoDB这样的数据库系统中,以获得低延迟查询或具有许多并发用户的快速聚合。然后我们使用Impala进行demmand分析。使用这么多技术时的主要问题是要很好地扩展基础设施和给予每个技术的资源。例如,Spark和Impala消耗大量内存(它们在内存引擎中),因此将MongoDB实例放在同一台机器上是个坏主意。
由于您正在构建社交网络架构,我还建议您使用图形数据库;但我对此没有任何经验...
答案 4 :(得分:1)
您是否希望保持纯粹的开源?如果您打算在某个时候进入企业,Hadoop的许多企业发行版都包含捆绑的Spark分析。
我有偏见,但是,还有Datastax Enterprise产品,它将Cassandra,Hadoop和Spark,Apache SOLR和其他组件捆绑在一起。它在许多主要的互联网实体中使用,特别是对于您提到的应用程序。 http://www.datastax.com/what-we-offer/products-services/datastax-enterprise
你想要考虑如何托管这个。
如果你留在云中,你将不必选择,你将能够(取决于你的云环境,但是,例如使用AWS)使用Spark进行连续批处理,Hadoop MapReduce可以长期使用时间线分析(分析长时间积累的数据)等,因为存储将与收集和处理分离。将数据放入S3,然后使用您需要的任何引擎进行处理。
如果您将托管硬件,构建Hadoop集群将使您能够混合硬件(框架支持的异构硬件),将为您提供强大而灵活的存储平台和各种分析工具,包括HBase和Hive,以及你提到的大多数其他东西的端口,例如Spark on Hadoop(不是端口,实际上是Spark的原始设计。)它可能是最通用的平台,可以部署/扩展便宜,因为每个节点的硬件不需要相同。
如果您是自托管,那么使用其他群集选项会强制您的硬件要求,以后可能难以扩展。
答案 5 :(得分:1)
我们使用Spark + Hbase + Apache Phoenix + Kafka + ElasticSearch,到目前为止缩放很容易。
* Phoenix是Hbase的JDBC驱动程序,它允许使用带有hbase,spark(通过JDBCrdd)和ElasticSearch(通过JDBC river)的java.sql,它确实简化了集成。