让我尝试一个答案,我知道最好的是使用Hadoop,Kafka和Spark。
我们应该如何存储大量数据: 这是实时数据。所以你可以通过Kafka直接将它流式传输到HDFS。更多见解(4)
我们应该如何让自己实时分析数据.- 学习Spark。正如您所说的TB大小,确保您拥有一个具有大量数据节点的群集。此外,如果可以,请单独设置火花簇。火花 Dstream 非常善于分析实时数据源。此外,它处理这些类型的json数据没有复杂性。
Dstream
查询系统应该如何工作 - 火花 SQLcontext 可以让您在半结构化数据的基础上为您的用例编写简单的SQL查询。它像SQL一样简单。
SQLcontext
如果我们正在考虑维持大约4 TB的数据,我们估计这些数据会累积超过3个月,那么保留这些数据的策略应该是什么。何时以及如何删除此内容? 我会建议您在累积和分析大约10天的数据后,将数据从HDFS移到更大的仓库,然后重复此备份过程。否则,如果你可以为你的hadoop购买硬件,那就好了。将其存储在HDFS中。
无论您在上面提到的指标是什么,都可以通过火花轻松处理。相信我,它像SQL一样简单。此外,对于仪表板,您可以将数据发送到qlikview前端。
使用其中一个云存储提供商( 链接 )根据日期和小时(日期= 2018-11-25 /小时= 16)对数据进行分区,这将减少每个查询读取的数据量。将数据存储为一种二进制格式,如镶木地板或ORC,将为您提供更好的性能和压缩比。
您可以运行多个应用程序来监听kakfa主题。首先使用带有连续模式应用的spark结构流2.3将事件存储到存储中( 链接 )。这将为您提供查询和分析历史数据以及根据需要重新处理事件的选项。你有两个选择:
存储在hdfs / s3 / gcp存储等中。在存储的数据上构建一个配置单目录,以获取事件的实时视图。可以使用spark / hive / presto来查询数据。注意:如果生成小文件,则需要压缩。
存放在像Cassandra或HBase这样的宽广列商店中。 链接 对于这个用例,我更喜欢这个选项。
并行运行另一个spark应用程序进行实时分析,如果您知道必须聚合数据的维度和指标,请使用带窗口的Spark结构化流。您可以每隔五分钟或五分钟按列和窗口进行分组,并存储在上述存储提供程序中的一个可以实时查询的存储提供程序中。 链接
如答案3中所述,在存储的数据上构建一个配置单目录,以获得事件的实时视图。出于报告目的,使用spark / hive / presto来查询数据。 如果查询实时数据,请使用Cassandra或HBase作为低延迟系统。
如果已正确分区数据,则可以根据定期归档规则将数据归档到冷备份。例如,可以维护从事件生成的维度和度量,并且可以在1个月后归档事件。