Hadoop架构用于原始日志,还包括点击和视图

时间:2017-10-19 06:34:39

标签: apache hadoop logging hbase hdfs

不确定用于以下数据的架构。

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

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

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

然后是JSON描述某些广告的点击次数和观看次数的数据。这应存储在同一个地方并进行查询。

查询情况:

  • 某位用户过去一天访问过的内容
  • 过去X小时内所有使用“param1”的用户

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

1 个答案:

答案 0 :(得分:0)

尽管存储使用,但以原始(或几乎原始)格式存储日志的一个显着优势是它提供了处理未来需求的能力。您不会被在特定上下文中决定的严格模式阻止。这种方法也称为 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")

希望这有帮助!