apache - Hadoop架构既可用于原始日志,又可用于单击和查看

标签 apache hadoop logging hbase hdfs

不确定用于以下数据的体系结构。

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

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

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

    然后是JSON数据,它描述了某些广告的点击次数和观看次数。应该将其存储在同一位置并进行查询。

    查询情况:
  • 特定用户在过去一天中访问了什么
  • 在过去X个小时内所有具有“param1”的用户

  • 有太多可用的工具,我不确定这可能会有帮助,也许您可​​以用外行的术语帮助描述一些工具。

    最佳答案

    尽管使用了存储,但以原始(或几乎原始)格式存储日志的一个显着优势是它提供了处理将来需求的能力。您不会被在特定上下文中确定的僵化模式所束缚。这种方法也称为读取策略上的模式。您可以找到有关此主题的许多文章。这是一个:

    [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")
    

    希望有帮助!

    关于apache - Hadoop架构既可用于原始日志,又可用于单击和查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46823973/

    相关文章:

    php - Yii2如何针对不同目的维护不同的日志文件

    PHP后台进程

    javascript - mod pagespeed - CSS/JavaScript 许可证

    Apache 为新文件获取 403

    php - UTF-8贯穿始终

    apache-spark - 设置 fs.defaultFS 属性时无法创建 Dataproc 集群?

    java - Log4j 无法读取配置文件 SELENIUM JAVA

    c# - 捕获来自 WebService 的传入参数

    hadoop - HadoopDb Java程序

    c++ - 从 c++ 使用 hadoop HDFS,未定义对 `hdfsConnect' 的引用