目前公司使用HDFS儲存各個節點伺服器上傳的日誌。因為歷史遺留問題,所以日誌比較混雜。就是各種資料都會存入日誌中。一個日誌檔200mb左右。有時候要過濾一些內容,則需要根據時間戳,然後使用hdfs 的cat指令,之後再grep關鍵字。再透過stdin輸入到一個python腳本中,把相關的數據做一些處理。
現在我想把他做成輸入要查詢的時間、節點、關鍵字以及匹配模型,然後一條龍完成這個任務。這樣就可以把這個小工具推向所有需求資料的人,而不是每次讓維運來查詢。
於是開始研究python的相關模組,這個hdfs可以上傳下載,查詢目錄檔案內容。但是到讀這塊,就比較麻煩了。
with client.read(hdfs_path=.....,其他參數)as reader:
content = reader.read()
然后再对content处理
這種方式並不可行,因為一次要配對的內容實在太多,大概有幾gb的數據,根本不可能全部讀出來然後再做處理。肯定得在讀的過程就進行篩選處理
我嘗試了for line in content,也配不出內容。
應該如何解決這個問題呢?難道用python把符合條件的檔案路徑記錄下來,然後再執行HDFS指令,再把符合的資料傳入python?那樣也顯得太麻煩了,而且穩定性肯定不好
後來我看了一下,hdfs這個模組,創建客戶端的時候,連的是hadoop 50070這個web管理頁面,想了下是不是這個模組本身就不是為了做數據分析用的?希望各位能給點幫助
多執行緒呢,並行計算呢?你這樣一次性讀幾個Gb自然慢。既然是hadoop框架,用好mapreduce應該就行了吧。這玩意應該不是為了快速而設計的。