不确定用于以下数据的架构。
我正在查看以下数据格式和卷:
这使我开始研究设置HDFS集群的选项,并使用流利或水槽来加载apache日志。这一切看起来不错,但我不明白的是我何时或如何解析apache日志以从查询字符串和路径中提取信息。例如:“/ home / category1 /?user = XXX&amp; param1 = YYY&amp; param2 = ZZZ”应该归一化为关于用户“XXX”的一些信息(他访问“category1”同时拥有相应的参数)< / em>的。我如何看待它我的选择是直接存储日志,然后在所有集群上运行mapreduce作业来解析每个日志行并将其存储在hdfs上。这不是浪费资源,因为每次操作遍及整个集群吗?将结果存储在Hbase中怎么样??
然后是JSON描述某些广告的点击次数和观看次数的数据。这应存储在同一个地方并进行查询。
查询情况:
有很多可用的工具,我不确定哪些可能有所帮助,也许你可以帮助用外行的术语来描述一些。
答案 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")
希望这有帮助!