我通常使用、Kafka、HBase等进行实时分析,我没有开发任何批处理分析作业/系统。我想学习批量分析设计和开发。为此,我试着理解lambda architecture,但我不知道一些事情。
让我们回顾一下这些假设。
我正在实时获取点击流数据。所有发送给卡夫卡的数据都被吃掉了。
速度层:我们可以使用clickstream / Flink等实时分析点击流数据中的会话。然后我们可以将分析结果发送到HBase、Cassandra等。这是我通常知道的lambda architecture.的速度层(我也在这层工作)。
批处理层:我们可以使用Apache、Kafka等将数据从发送到HDFS。
Question1:如何向HDFS发送数据?HDFS有write once read many的概念。我是否应该将数据作为批处理格式从Kafka发送到HDFS(例如每5或10分钟一次)?文件格式应该如何?JSON,Parquet,Text,CSV等等?
将数据发送到HDFS之后,假设使用Hive或Spark对其进行分析。我每隔30分钟配置一次作业。这份工作一般与流分析相同。但是它每30分钟运行一次,并分析用户会话(用户行为)。
Question2:如何才能从HDFS(上一批之后接收到的数据)获得新的数据?
Question3:假设我想在当前批处理分析中访问前一批分析的会话分析结果,如何将当前批处理分析结果和以前的会话分析结果合并?
Question4:应该将数据写入HDFS作为分区格式吗?例如,每个点击流数据都有时间戳。因此,我应该按年、日、时、分钟等来写吗?
现在非常感谢你!
发布于 2019-08-31 11:39:05
,
其中一些答案是主观的。YOu可以想到什么最适合你的需求。这些只是我过去使用过的观察或技巧。
Question1:我如何向HDFS发送数据?HDFS曾经写过一次读过很多概念。我是否应该将数据作为批处理格式从Kafka发送到HDFS(例如每5或10分钟一次)?文件格式应该如何?JSON,Parquet,Text,CSV等等?
根据您使用的源,您可以选择将数据流到HDFS或Hive,甚至是像HBase这样的层(取决于您可能共享在线+脱机存储的用例)。我有很大的卡夫卡管道,我把数据传输到蜂巢(ORC),我在过去使用过Storm,但是这个层由你来选择。您可以选择任何适合您的处理需要的柱状格式(ORC,Parquet,Avro是流行的选择)
将数据发送到HDFS之后,假设使用Hive或Spark对其进行分析。我每隔30分钟配置一次作业。这份工作一般与流分析相同。但是它每30分钟运行一次,并分析用户会话(用户行为)。
同样,根据存储方式的不同,可以使用HiveQL或Spark进行分析。我个人更喜欢星星之火,因为我发现编程操作符比HiveQL上的SQL操作符更方便。操作符的支持集也很大。
Question2:我如何才能从HDFS(上一批之后接收到的数据)获得新的数据?
如果您流数据,这个问题就解决了。如果您阅读也是一个批处理,您可能需要维护一些偏移管理(例如,在卡夫卡或Azure事件中心等)。最好是在故障安全或有冗余的系统上(例如,动物园管理员)。您可以从典型的数据仓库技术如何解决这个问题中得到启示,方法是在数据摄取上有一个时间维度,然后使用一行--一列表,直到您处理了什么时间戳。我更喜欢在你在跑步中处理的最大时间上有一个简单的时代。在下一次运行中,使用一个SQL操作符,您可以在其中指定IngestionTS >,这将检索增量
Question3:假设我想在当前批处理分析中访问上一批分析的会话分析结果,我如何将当前批处理分析结果和以前的会话分析结果合并?
你必须有一个数据策略。你们有可能延迟的有时间限制的数据吗?我将告诉您一个实际的场景,我们分析的事务可能会晚2天!基于规则,我们有时忽略它们,有时我们重新计算聚合并保存它们。如果您必须重新计算,一种方法是有一个时间版本记录。根据批处理的运行时间,我们过去有一个滑动窗口来容纳价值2天的数据(计算成本很高,无法帮助),甚至有用于这些延迟数据记录的特殊表&重新计算数据,然后向计算记录中添加一个版本。当批处理运行时,这可能是一个简单的时代。然后可以选择具有最大“版本”的聚合。
Question4:我应该将数据写入HDFS作为分区格式吗?例如,每个点击流数据都有时间戳。因此,我应该按年、日、时、分钟等来写吗?
是的你应该去。如何分割数据,您可以在此基础上选择分区策略。我们在某些情况下使用事务类型,在某些情况下使用日期时间。它们总是由您如何选择和操作数据来指导。例如,您可以有一个策略,可以按天计算聚合,然后删除原始数据的分区。
正如您所看到的,我上面的答案只是主观的,简单地基于我所做的用例。在这些方面有很多不同的地方,你可以把它们应用到你的数据上!快乐数据工程
https://stackoverflow.com/questions/57736861
复制相似问题