【问题标题】:Analysis on real time streaming data [closed]实时流数据分析[关闭]
【发布时间】:2019-04-26 05:02:10
【问题描述】:

这是一个相对广泛的问题,我知道解决此类问题可能需要使用的工具(例如 Spark、Kafka 和 Hadoop),但我正在从经验丰富的专业人士的角度寻找具体的愿景

手头的问题如下所示:

我们正在使用类似谷歌分析的服务,它向我们发送事件流。事件是在页面上执行的操作。它可以是单击按钮、鼠标移动、页面滚动或我们定义的自定义事件。

{
"query_params":[

],
"device_type":"Desktop",
"browser_string":"Chrome 47.0.2526",
"ip":"62.82.34.0",
"screen_colors":"24",
"os":"Mac OS X",
"browser_version":"47.0.2526",
"session":1,
"country_code":"ES",
"document_encoding":"UTF-8",
"city":"Palma De Mallorca",
"tz":"Europe/Madrid",
"uuid":"A37F2D3A4B99FF003132D662EFEEAFCA",
"combination_goals_facet_term":"c2_g1",
"ts":1452015428,
"hour_of_day":17,
"os_version":"10.11.2",
"experiment":465,
"user_time":"2016-01-05T17:37:10.675000",
"direct_traffic":false,
"combination":"2",
"search_traffic":false,
"returning_visitor":false,
"hit_time":"2016-01-05T17:37:08",
"user_language":"es",
"device":"Other",
"active_goals":[
1
],
"account":196,
"url”:”http://someurl.com”,
“action”:”click”,
"country":"Spain",
"region":"Islas Baleares",
"day_of_week":"Tuesday",
"converted_goals":[

],
"social_traffic":false,
"converted_goals_info":[

],
"referrer”:”http://www.google.com”,
"browser":"Chrome",
"ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36",
"email_traffic":false
}

现在我们需要构建一个解决方案来分析这些数据。我们需要做一个可以聚合、过滤、切片和切块数据的报告平台。

我们需要构建的报告的一个例子是

显示所有来自美国并使用 chrome 浏览器并在 iPhone 上使用该浏览器的用户。

显示来自referrer =“http://www.google.com”且位于印度以外并使用桌面的所有用户对特定按钮的点击总和。 在一天之内,该服务每天发送数百万个此类事件,总计 GB 的数据。

这是我的具体疑问

  • 我们应该如何存储如此大量的数据
  • 我们应该如何让自己能够实时分析数据。
  • 这里的查询系统应该如何工作(我对这部分比较一窍不通)
  • 如果我们正在考虑维护大约 4 TB 的数据,我们估计会在 3 个月内累积,那么保留这些数据的策略应该是什么。我们应该何时以及如何删除它?

【问题讨论】:

    标签: hbase bigdata streaming spark-streaming apache-kafka-streams


    【解决方案1】:
    1. 我们应该如何存储如此大量的数据。

    使用云存储提供商之一 (link) 根据日期和小时 (date=2018-11-25/hour=16) 对数据进行分区,这将减少每次查询读取的数据量。将数据存储为一种二进制格式,如 parquet 或 ORC,将为您提供更好的性能和压缩比。

    1. 我们应该如何让自己能够实时分析数据。

    您可以运行多个应用程序来监听一个 kakfa 主题。首先使用带有连续模式应用程序 (link) 的 spark 结构化流 2.3 将事件存储到存储中。这将使您可以选择查询和分析历史数据并在需要时重新处理事件。您有两种选择:

    1. 存储在 hdfs/s3/gcp 存储等中。在存储的数据上构建一个配置单元目录以获得事件的实时视图。可以使用 spark/hive/presto 查询数据。注意:如果生成小文件,则需要压缩。

    2. 存储在宽列存储中,例如 Cassandra 或 HBase。 link 这个用例我更喜欢这个选项。

    并行运行另一个 spark 应用程序进行实时分析,如果您知道聚合数据所依据的维度和指标,请使用带有窗口的 spark 结构化流。您可以每分钟或 5 分钟按列和窗口分组,并存储在上述可以实时查询的存储提供程序之一中。 link

    1. 查询系统在这里应该如何工作

    如答案 3 中所述,根据存储的数据构建配置单元目录,以获取事件的实时视图。出于报告目的,使用 spark/hive/presto 查询数据。 如果查询实时数据,请使用 Cassandra 或 HBase 作为低延迟系统。

    1. 如果我们正在考虑维护大约 4 TB 的数据,我们估计会在 3 个月内累积,那么保留这些数据的策略应该是什么。我们应该何时以及如何删除它?

    如果您对数据进行了正确的分区,您可以根据定期归档规则将数据归档到冷备份。例如,可以维护从事件生成的维度和指标,并且可以在 1 个月后存档事件。

    【讨论】:

      【解决方案2】:

      让我尝试一个我最清楚的答案是使用 Hadoop、Kafka 和 Spark。

      1. 我们应该如何存储如此大量的数据:这是实时数据。因此,您可以直接通过 Kafka 将其流式传输到 HDFS。第 (4) 点中的更多见解

      2. 我们应该如何让自己能够实时分析数据。- 学习 Spark。正如您所说的以 TB 为单位的大小,请确保您拥有一个具有大量数据节点的集群。此外,如果可以,请单独设置 spark 集群。 Spark Dstream 非常擅长分析实时数据馈送。此外,它处理这些类型的 json 数据没有复杂性。

      3. 查询系统在这里应该如何工作 - spark SQLcontext 可以让您在半结构化数据之上为您的用例编写类似 SQL 的简单查询。就像 SQL 一样简单。

      4. 如果我们正在考虑维护大约 4 TB 的数据,我们估计会在 3 个月内累积,那么保留这些数据的策略应该是什么。我们应该何时以及如何删除它? 我会建议你在积累和分析大约 10 天的数据后将数据从 HDFS 移动到更大的仓库,然后重复此备份过程。否则,如果您可以为您的 hadoop 购买硬件,那就太好了。将其存储在 HDFS 本​​身中。

      您上面提到的任何指标都可以通过 spark 轻松处理几行。相信我,它就像一个 SQL 一样简单。此外,对于仪表板,您可以将数据发送到 qlikview 前端。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-05
        • 2012-03-28
        相关资源
        最近更新 更多