不确定用于以下数据的体系结构。
我正在查看以下数据格式和卷:
这使我开始研究设置HDFS群集的选项,并使用流利的或水槽来加载Apache日志。一切看起来不错,但我不了解的是何时或如何解析apache日志以从查询字符串和路径中提取信息。例如:应该将“/ home / category1 /?user = XXX&param1 = YYY&param2 = ZZZ”规范化为有关用户“XXX”的某些信息(他在拥有相应参数的同时访问了“category1”)。我如何看待它,我的选择是直接存储日志,然后在所有集群上运行mapreduce作业以解析每个日志行,然后将其存储在hdfs上。因为操作每次遍历整个集群,这不是浪费资源吗?如何将结果存储在Hbase中...?
然后是JSON数据,它描述了某些广告的点击次数和观看次数。应该将其存储在同一位置并进行查询。
查询情况:
有太多可用的工具,我不确定这可能会有帮助,也许您可以用外行的术语帮助描述一些工具。
最佳答案
尽管使用了存储,但以原始(或几乎原始)格式存储日志的一个显着优势是它提供了处理将来需求的能力。您不会被在特定上下文中确定的僵化模式所束缚。这种方法也称为读取策略上的模式。您可以找到有关此主题的许多文章。这是一个:
[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/