关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。
去年关门了。
改进这个问题
我通常使用spark structured streaming、kafka、hbase等进行实时分析。我没有开发任何批处理分析作业/系统。我想学习批量分析设计和开发。为此我努力去理解 lambda architecture
但我不知道什么。
让我们回顾一下假设。
我正在实时获取点击流数据。所有数据都发送到Kafka去接收。
速度层:我们可以使用spark streaming/flink等实时分析clickstream数据中的会话,然后将分析结果发送给hbase、cassandra等。这是系统的速度层 lambda architecture.
我一般都知道这一层(我也在这一层工作)。
批处理层:我们可以使用apachenifi、kafka connect等将数据从kafka发送到hdfs;
问题1:如何向hdfs发送数据?hdfs具有 write once read many
概念。我是否应该将数据以批处理格式从kafka发送到hdfs(例如每5或10分钟一次)?文件格式应该是什么?json、Parquet、文本、csv等?
将数据发送到hdfs之后,假设使用hive或sparksql对其进行分析。我每30分钟配置一次。这项工作通常与流分析相同。但它每30分钟运行一次,并分析用户会话(用户行为)。
问题2:如何仅从hdfs获取新数据(在上一批之后接收到的数据)?
问题3:假设我想访问当前批分析中上一批的会话分析结果,如何合并当前批分析和上一批会话分析结果?
问题4:我应该将数据作为分区格式写入hdfs吗?例如,每个clickstream数据都有时间戳。因此,我应该按年、日、时、分等写吗?
现在非常感谢你!
1条答案
按热度按时间6uxekuva1#
,
有些答案是主观的。你可以想什么最适合你的需要。这些只是我过去所用的观察或技巧
问题1:如何向hdfs发送数据?hdfs有写一读多的概念。我是否应该将数据以批处理格式从kafka发送到hdfs(例如每5或10分钟一次)?文件格式应该是什么?json、Parquet、文本、csv等?
根据您使用的源,您可以选择将数据流传输到hdfs或hive,甚至像hbase这样的层(取决于您可以在线+离线共享存储的用例)。我有大型Kafka管道,我流数据到Hive(兽人),我用风暴在过去,但层是由你来选择。您可以选择任何列格式,可能适合您的处理需要(orc,Parquet,avro是流行的选择)
将数据发送到hdfs之后,假设使用hive或sparksql对其进行分析。我每30分钟配置一次。这项工作通常与流分析相同。但它每30分钟运行一次,并分析用户会话(用户行为)。
同样,根据存储方式,可以使用hiveql或sparksql进行分析。我个人更喜欢spark,因为我发现编程操作符比hiveql上类似sql的操作符更方便。操作符的支持集也很大。
问题2:如何仅从hdfs获取新数据(在上一批之后接收到的数据)?
如果您对数据进行流处理,这个问题就迎刃而解了。如果read也是一个批处理,那么您可能希望在故障安全或具有冗余(例如zookeeper)的系统上更好地维护一些偏移管理(例如kafka或azure event hub等)。您可以从典型的数据仓库技术如何解决问题中得到一个线索:在数据摄取上有一个时间维度,然后使用一个一行一列的表,该表说明您处理了什么时间戳。我更喜欢在运行中处理的最大时间上有一个简单的epoch。在下一次运行中,使用一个sql操作符,您可以在其中说出where insectionts>,这将检索delta
问题3:假设我想访问当前批分析中上一批的会话分析结果,如何合并当前批分析和上一批会话分析结果?
你必须有一个数据策略。您是否有可能延迟的限时数据。我将告诉你一个实际的情况,我们有交易,我们分析,可能会在2天晚来!。根据规则,我们有时会忽略它们,有时会重新计算聚合并保存它们。如果你必须重新计算的话,一种方法就是有一个时间版本记录。根据批处理运行的时间,我们曾经有一个滑动窗口来容纳2天的数据(计算成本很高,帮不上忙),甚至有专门的表来处理这些延迟的数据记录&重新计算数据,然后向计算的记录添加一个版本。当批处理运行时,这可以是一个简单的epoch时间。然后可以选择具有最大“版本”的聚合
问题4:我应该将数据作为分区格式写入hdfs吗?例如,每个clickstream数据都有时间戳。因此,我应该按年、日、时、分等写吗?
是的,你应该。您计划如何对数据进行分段,您可以在此基础上选择一种分区策略。我们在某些情况下使用事务类型,在某些情况下使用日期时间。它们总是由您如何选择和操作数据来引导。例如,您可以有一个策略,按天计算聚合,然后删除原始数据的分区。
正如你所看到的,我上面的回答只是主观的,基于我所做的用例的简单的。有很多变化,你可以应用到你的数据!。快乐数据工程