【问题标题】:Hadoop architecture for raw logs but also clicks and views原始日志的 Hadoop 架构,还有点击和查看
【发布时间】:2017-10-19 06:34:38
【问题描述】:

不确定要为以下数据使用什么架构。

我正在查看以下数据格式和数量:

  • 在查询字符串中保存信息的原始 API apache 日志(每天约 15G)
  • 广告的 JSON 点击和查看 - 每天大约 300 万条条目。

这让我开始研究设置 HDFS 集群并使用 fluentd 或 flume 加载 apache 日志的选项。这一切看起来都不错,但我不明白何时或如何解析 apache 日志以从查询字符串和路径中提取信息。例如:“/home/category1/?user=XXX&param1=YYY&param2=ZZZ”应该归一化为有关用户“XXX”的一些信息(他在拥有相应参数时访问了“category1”)。我如何看待它,我的选择是直接存储日志,然后在所有集群上运行 mapreduce 作业以解析每个日志行并......将其存储在 hdfs 上。每次操作都要跑遍整个集群,这不是浪费资源吗?将结果存储在 Hbase 中如何...?

然后是描述某些广告的点击和浏览的 JSON 数据。那应该存储在同一个地方并被查询。

查询情况:

  • 某个用户在过去一天访问了什么
  • 过去 X 小时内使用“param1”的所有用户

有这么多可用的工具,我不确定哪个可能会有所帮助,也许你可以帮助用外行术语描述一些。

【问题讨论】:

    标签: apache hadoop logging hbase hdfs


    【解决方案1】:

    尽管使用了存储空间,但以原始(或几乎原始)格式存储日志的一个显着优势是它能够处理未来的需求。您不会被在特定上下文中确定的严格模式所阻碍。这种方法也称为 Schema on Read 策略。你可以找到很多关于这个主题的文章。这是一个:

    [https://www.techopedia.com/definition/30153/schema-on-read]

    现在,关于 json 操作,我建议您看看 Spark,因为它为此提供了非常方便的机制。只需几行代码,您就可以轻松地将 json 文件加载到数据框中:将自动从数据中推断出架构。然后这个数据框可以注册为一个Spark SQL上下文中的表,直接使用SQL查询。比原始 json 操作容易得多。

    val df = spark.read.json(<your file>)
    df.printSchema() // inspect the schema
    df.registerTempTable ("mytable")
    val df2 = sqlContext.sql("SELECT * form mytable")
    

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 2011-12-15
      • 2015-07-15
      • 2022-01-23
      • 2021-11-04
      • 1970-01-01
      相关资源
      最近更新 更多