2017-10-19 201 views
0

不確定用於以下數據的體系結構。原始日誌的Hadoop體系結構,但也包含點擊和視圖

我在看下面的數據格式和容量:在查詢字符串持有信息

  • 生API Apache日誌(每天約15G)
  • JSON點擊和瀏覽的廣告 - 約每天3m條目。

這導致我尋找設置HDFS集羣並使用fluentd或flume加載apache日誌的選項。這一切看起來不錯,但我不明白的是何時或如何解析apache日誌以從查詢字符串和路徑中提取信息。例如:「/ home/category1 /?user = XXX & param1 = YYY & param2 = ZZZ」應該標準化爲關於用戶「XXX」的一些信息(他在訪問「category1」的同時具有相應的參數)。我如何看到我的選擇是直接存儲日誌,然後在所有羣集上運行mapreduce作業來解析每個日誌行,並將其存儲在hdfs上。這不是浪費資源,因爲操作每次都在整個集羣中進行?如何將結果存儲在Hbase中?

然後有數據是JSON描述某些廣告的點擊和視圖。應該存儲在同一個地方並被查詢。

查詢情況:

  • 什麼特定的用戶在過去的一天訪問
  • 所有用戶提供「參數1」在過去的X小時

有這麼多的工具可用,我不確定哪些可能會有幫助,也許你可以用外行人的話來描述一些。

回答

0

儘管存儲使用率很高,但以原始(或幾乎原始)格式存儲日誌的一個顯着優點是它能夠處理未來的需求。您不會被在特定上下文中決定的嚴格架構阻止。這種方法也被稱爲Schema on Read策略。你可以在這個主題上找到很多文章。這裏是一個:

[https://www.techopedia.com/definition/30153/schema-on-read]

現在,關於json的操作,我建議你看看星火,因爲它提供了非常方便的機制這一點。在幾行代碼中,您可以輕鬆地將您的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") 

希望得到這個幫助!

相關問題