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

时间:2016-12-21 07:55:00

标签: hadoop apache-spark nosql

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

除了原始数据之外,我还在数据导出期间在几个字段上寻找一些动态聚合。

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

我正在寻找关于此用例的后端noSQL的建议,到目前为止我已经使用了Hadoop map-reduce,但是在我看来,hadoop批处理作业执行与典型的HDFS数据map-reduce可能不会给出预期的SLA。

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

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

有关在此处使用Spark的任何建议吗?还是其他更好的noSQL?

总结SLA,动态聚合和原始数据(数百万)是此处的要求考虑因素。

1 个答案:

答案 0 :(得分:1)

如果系统只需要在执行一些ETL之后导出数据 - 聚合,过滤和转换,那么回答非常简单。 Apache Spark是最好的。您必须对系统进行微调并决定是否只使用内存或内存+磁盘或序列化等。但是,大多数情况下,您还需要考虑其他方面;我也在考虑他们。

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

我看到涉及两个问题 -

  1. 使用哪种计算/数据处理引擎?
  2. 哪个数据存储/ NoSQL?
  3. - 数据处理 -

    Apache Spark将是计算的最佳选择。我们正在使用相同的目的,除了过滤之外,我们还要执行xml转换,这些转换也在Spark中完成。与Hadoop MapReduce相比,它的超高速。 Spark可以独立运行,也可以在Hadoop的顶部运行。

    - 存储 -

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

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

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

    • 弹性搜索 - 如果您的存储容量低达10 TB,则弹性搜索也是一个合适的选择。它配备了Kibana(UI),它提供有限的分析功能,包括聚合。开发时间极短,实施起来非常快。

    因此,根据您的要求,我建议Apache Spark进行数据处理(转换/过滤/聚合),您可能还需要考虑其他技术进行存储和数据可视化。