Hadoop 海量数据导出的noSQL选择建议

Hadoop 海量数据导出的noSQL选择建议,hadoop,apache-spark,nosql,Hadoop,Apache Spark,Nosql,我们有数十亿条使用关系数据格式(例如事务id、用户名、用户id和其他一些字段)格式化的记录,我的要求是创建一个系统,用户可以从该数据存储中请求数据导出(用户将提供一些过滤器,如用户id、日期等),通常,根据选定的过滤器,导出的文件将有数千到100条数千到数百万条记录(输出文件将为CSV或类似格式) 除了原始数据之外,我还希望在数据导出期间在几个字段上进行一些动态聚合 用户提交请求和导出数据文件之间的典型时间应在2-3分钟内(最多4-5分钟) 我正在为这个用例寻求关于后端NoSQL的建议,到目前为

我们有数十亿条使用关系数据格式(例如事务id、用户名、用户id和其他一些字段)格式化的记录,我的要求是创建一个系统,用户可以从该数据存储中请求数据导出(用户将提供一些过滤器,如用户id、日期等),通常,根据选定的过滤器,导出的文件将有数千到100条数千到数百万条记录(输出文件将为CSV或类似格式)

除了原始数据之外,我还希望在数据导出期间在几个字段上进行一些动态聚合

用户提交请求和导出数据文件之间的典型时间应在2-3分钟内(最多4-5分钟)

我正在为这个用例寻求关于后端NoSQL的建议,到目前为止,我已经使用了Hadoop map reduce,但在我看来,使用典型HDFS data map reduce的Hadoop批处理作业执行可能不会给出预期的SLA

另一个选择是使用我从未使用过的Spark map reduce,但它应该比典型的Hadoop map reduce批处理作业快得多

我们已经尝试了生产级RDBMS/OLTP实例,但显然,由于我们导出的数据的大小和动态聚合,它似乎不是一个正确的选项

在这里使用Spark有什么建议吗?还是其他更好的noSQL


总之,SLA、动态聚合和原始数据(百万)是这里的需求考虑事项。

如果系统只需要在完成一些ETL聚合、过滤和转换后导出数据,那么答案非常简单。apachespark是最好的。您必须对系统进行微调,并决定是只使用内存还是内存+磁盘或序列化等。。然而,大多数时候,一个人也需要考虑其他方面;我也在考虑

这是一个广泛的讨论主题,它涉及到许多方面,如所涉及的聚合、搜索相关查询(如果有)、开发时间。根据描述,它似乎是一个交互式/近实时交互式系统。其他方面是否涉及任何分析?另一个要点是系统类型(OLTP/OLAP、仅报告等)

我知道其中涉及两个问题:

  • 使用哪种计算/数据处理引擎
  • 哪个数据存储/NoSQL
  • -数据处理-

    apachespark将是计算的最佳选择。我们使用的是同样的目的,除了过滤之外,我们还需要执行xml转换,这些转换也是在Spark中完成的。与Hadoop MapReduce相比,它的速度非常快。Spark可以独立运行,也可以在Hadoop上运行

    -存储-

    有许多noSQL解决方案可用。选择取决于许多因素,如数量、涉及的聚合、搜索相关查询等

    • Hadoop—您可以使用Hadoop和HDFS作为存储系统。当你拥有整个Hadoop生态系统时,它有很多好处。如果你有分析师/数据科学家需要了解数据/玩弄数据,那么这将是一个更好的选择,因为你将获得不同的工具,如Hive/Impala。此外,资源管理也很容易。但对于某些应用程序来说,这可能太多了

    • Cassendra—Cassandra作为一个存储引擎,在保持规模和性能的同时解决了分发和可用性问题。与Spark一起使用会带来奇迹。例如,执行复杂的聚合。顺便说一下,我们正在使用它。对于可视化(查看数据进行分析),选项有ApacheZeppelin、Tableau(很多选项)

    • 弹性搜索-如果您的存储容量在几TB到10 TB之间,弹性搜索也是一个合适的选择。它附带了Kibana(UI),它提供有限的分析功能,包括聚合。开发时间很短,实现起来很快

    <> P>所以,根据您的需求,我建议Apache Sink进行数据处理(转换/过滤/聚合),您还需要考虑其他技术来存储和数据可视化。