hadoop体系结构,用于原始日志,也用于单击和查看

6tqwzwtp  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(280)

不确定要对以下数据使用什么体系结构。
我正在查看以下数据格式和卷:
在查询字符串中保存信息的原始api apache日志(每天约15g)
json点击率和广告浏览量——每天约有300万条。
这使我考虑了设置hdfs集群和使用fluentd或flume加载apache日志的选项。这一切看起来不错,但我不明白的是,我什么时候或者如何解析apache日志,从查询字符串和路径中提取信息。例如:“/home/category1/?user=&param1=yyy&param2=zzz”应该规范化为关于用户“”的一些信息(他访问“category1”时有相应的参数)。在我看来,我的选择是直接存储日志,然后在所有集群上运行mapreduce作业来解析每个日志行,然后。。。将其存储在hdfs背面。这不是浪费资源吗?因为每次操作都会在整个集群中进行?把结果储存在hbase里怎么样。。。?
然后是json数据,它描述了一些广告的点击和视图,应该存储在同一个地方并进行查询。
查询情况:
某个用户在过去一天访问的内容
过去x小时内所有使用“param1”的用户
有这么多可用的工具,我不太确定哪种可能有帮助,也许你可以帮助描述一些外行的术语。

piztneat

piztneat1#

尽管存在存储使用情况,但以原始(或几乎原始)格式存储日志的一个显著优点是,它提供了处理未来需求的能力。您不会被一个在特定上下文中决定的僵化模式所阻塞。这种方法也被称为基于模式的阅读策略。你可以找到许多关于这个主题的文章。这里有一个:
[https://www.techopedia.com/definition/30153/schema-on-read]
现在,关于json操作,我建议您看看spark,因为它提供了非常方便的机制。只需几行代码,就可以轻松地将json文件加载到Dataframe中:模式将自动从数据中推断出来。然后可以在sparksql上下文中将此Dataframe注册为表,并直接使用sql查询。比原始的json操作简单得多。

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

希望这对你有帮助!

相关问题