- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们有数十亿条使用关系数据格式(例如交易 ID、用户名、用户 ID 和其他一些字段)格式化的记录,我的要求是创建一个系统,用户可以请求从该数据存储中导出数据(用户将提供一些过滤器,如用户 ID、日期等),通常导出的文件将包含几千到几十万到数百万条基于所选过滤器的记录(输出文件将是 CSV 或类似格式)
除了原始数据,我还在数据导出过程中寻找一些字段的动态聚合。
从用户提交请求到导出数据文件可用之间的典型时间应在 2-3 分钟内(最多 4-5 分钟)。
我正在为这个用例寻求有关后端 noSQL 的建议,到目前为止,我一直在使用 Hadoop map-reduce,但在我看来,使用典型的 HDFS 数据 map-reduce 执行 hadoop 批处理作业可能无法提供预期的 SLA。
另一种选择是使用我从未使用过的 Spark map-reduce,但它应该比典型的 Hadoop map-reduce 批处理作业快得多。
我们已经尝试过生产级 RDBMS/OLTP 实例,但由于我们要导出的数据量和动态聚合,这显然不是一个正确的选择。
关于在这里使用 Spark 有什么建议吗?或者任何其他更好的 noSQL?
总而言之,SLA、动态聚合和原始数据(百万)是此处的需求考虑因素。
最佳答案
如果系统只需要在执行一些 ETL 之后导出数据 - 聚合、过滤和转换,那么答案就非常简单了。 Apache 星火是最好的。您将不得不微调系统并决定是只使用内存还是内存+磁盘或序列化等。但是,大多数时候还需要考虑其他方面;我也在考虑它们。
这是一个广泛的讨论话题,涉及许多方面,例如所涉及的聚合、搜索相关查询(如果有)、开发时间。根据描述,它似乎是一个交互式/近实时交互式系统。另外一个方面是有没有涉及分析?另一个重点是系统类型(OLTP/OLAP,仅报告等)。
我看到有两个问题 -
- 数据处理-
Apache Spark 将是计算的最佳选择。我们出于同样的目的使用它,除了过滤之外,我们还有要执行的 xml 转换,这些转换也在 Spark 中完成。与 Hadoop MapReduce 相比,它的速度超快。 Spark 可以独立运行,也可以运行在 Hadoop 之上。
- 存储 -
有许多可用的 noSQL 解决方案。选择取决于许多因素,例如数量、涉及的聚合、搜索相关查询等。
Hadoop - 您可以将 Hadoop 与 HDFS 作为存储系统一起使用。当您获得整个 Hadoop 生态系统时,它有很多好处。如果您有分析师/数据科学家需要深入了解数据/使用数据,那么这将是更好的选择,因为您将获得不同的工具,例如 Hive/Impala。此外,资源管理也很容易。但对于某些应用程序来说,它可能太多了。
Cassendra - Cassandra 作为一种存储引擎,在保持规模和性能的同时解决了分布和可用性问题。当与 Spark 一起使用时,它会带来奇迹。例如,执行复杂的聚合。顺便说一句,我们正在使用它。对于可视化(查看数据进行分析),选项有 Apache Zeppelin、Tableau(很多选项)
Elastic Search - 如果您的存储在几 TB 到 10 TB 之间,Elastic Search 也是一个合适的选择。它带有 Kibana (UI),提供有限的分析功能,包括聚合。开发时间最短,实现起来非常快。
因此,根据您的要求,我建议使用 Apache Spark 进行数据处理(转换/过滤/聚合),您可能还需要考虑其他存储和数据可视化技术。
关于hadoop - 海量数据导出noSQL选型建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41257747/
“大规模”的微型 ORM 是否有处理继承的方法? robconery / massive 为 Massive 编写提供程序很难吗? 我需要非常接近 SQL Server 的东西。作为第一步,最好拦截
我编写了一个服务器可以使用的应用程序。此应用程序收集信息,并将其发送到服务器。每 10 秒执行一次。数据量取决于玩游戏的玩家,但让我们将其保持在大约 50 个服务器,每个服务器发送 100 条数据(每
我有一个表,其中包含 3 个字段(用户名、目标值、分数),由用户名 (~400,000) 和目标值 (~4000) 的完整交叉在外部生成,并计算出分数,导致总行数约为 16 亿. 我在这个表上的所有查
我们包括了这个 AndroidPdfViewer library支持在应用程序中查看 PDF 报告。它导致 APK 大小从 4.7Mb 大幅增加到 20.1Mb。 有没有办法减小这个尺寸。让我知道在哪
我在脑海中争论是否应该在 MySQL 中使用大量的多维数组或数据库。我正在为一个业务有很多产品的客户开发。在这个多维数组中,我将包括每个产品的产品标题、描述、图片链接和类别。 我的客户可能有 1000
我是一名优秀的程序员,十分优秀!