HDFS中的大數據和小文件問題


HDFS中的大數據和小文件問題

> Lost person looking for answers. Image by VisionPic .net

這些天,每個人都在談論"大數據",但每個人都知道什麼使大數據成為大數據嗎? 只需嘗試閱讀Wikipedia上"大數據"一詞的定義即可; "一個……處理的數據集太大或太複雜而無法處理的字段……",在任何地方都找不到使數據太大或太複雜的數字。

定義"大數據"

作為擁有一年曆史的大數據團隊的團隊負責人,我們不瞭解BIG的定義,而我們的組織則不瞭解!

該項目的目的是處理來自不同來源的日誌數據,以提高我們網絡的安全性。 日誌數據主要由事件組成,平均為500個字節。 有些甚至是200個字節。

之前,我們在Hadoop HDFS中存在穩定性問題,因為我們忽略了一個基本假設。 HDFS被編程用於大文件(1 GB及更大)。 當不穩定襲擊我們時,我們開始重新思考什麼使我們成為大數據! 畢竟,我們來自一個沒有大數據的世界(和組織),過去並且總是很難建立一個牢固的知識庫。

我們將Flume(我們的提取工具)配置為以5分鐘為一批來提取數據,並將其寫入HDFS,每個事件500字節; 輸入範圍是15個事件/秒到10,000個事件/秒,我們有許多文件,範圍從8kb到140kb。 考慮到所有輸入的數據,我們得出的輸入速率約為55GB /小時,這足以被認為是大數據。

在尋找任何絕對答案的困惑中,我遇到了這個博客,儘管它語言粗糙,但簡潔明瞭,在考慮使用BIG(數據)時將為您節省寶貴的時間和金錢。

該頁面專門討論了採用Hadoop生態系統作為您的大數據平臺。 即使本文提供了一些數字,可以使我們更清楚地瞭解這些數字,但從不同的角度來看,這些數字還是不準確的,因此應予以考慮。

首先,該頁面寫於2013年,當時Hadoop的版本為2.2.0。 只是為了弄清楚,今天我們的版本是3.2,所以情況已經改變。

其次,如果我們用Wikipedia中的定義替換頁面上的數字,則可以說作者認為5TB +是一個太大而複雜的數據集,無法處理。 5TB固然很大,但相對於數字世界中其他數據以及我們擁有的處理能力而言,龐大而複雜是相對形容詞。 以下預測將確定這些變化會迅速發生:

1.僅在一年內,累積的世界數據將增長到44兆字節(即44萬億千兆字節)! 為了進行比較,今天大約是4.4 ZB。 從hostingtribunal.com檢索。

2.摩爾定律說,計算能力將每兩年增加一倍(保持到3nm)。 從維基百科檢索。

總而言之,今天的5TB可能超過20TB(使用不考慮軟件限制的最新技術)。

另外,在大多數情況下,您可能會流式傳輸新數據(或每X次加載增量數據),因此數據將具有增長的因素。 這與考慮增長是否反映在您或客戶查詢的數據集中有關。

數據集中的增長可以來自多種來源。 它可以在您希望擴展查詢的時間範圍時形成,另一個增長源可以從相同的輸入(以發送的消息的速率)發展,最後通過添加您要處理的其他數據輸入

瞭解數據集的定義是至關重要的。

當我們更好地瞭解了客戶的數據集後,我們發現各種研究問題都需要基於天,月甚至幾年的數據。 這些數據集的處理數據從100MB到100TB不等。 所以這很大!

不幸的是,對於Hadoop來說,不足1GB的文件被濫用,因此,我們在存儲數據方面仍然存在問題。

儘管問題仍然存在,但回答BIG問題仍然很艱鉅,需要進行修訂以驗證我們的要求沒有在我們腳下改變。

解決HDFS的小文件

在項目的這一點上,已經有活動的客戶端正在使用存儲在Hadoop上的數據,我們根本無法轉移到Cassandra(這比處理帶有小文件的Hadoop更好-我認為選擇Cassandra而不是Hadoop是最合適的決定) 滿足我們的最初要求,但這全是事後所見)。 因此,我們需要基於與當前目錄結構向後兼容的相同架構,找到一個更簡單的解決方案。

從那時起,我們想到了每小時進行一次數據聚合以充分利用當前的索引約定(請查閱上一則故事),以獲取每小時可能最大的單個文件。

這是一個簡單的程序,它從特定的(過去)小時讀取Flume寫入的數據,並將它們寫入另一個並行目錄結構中的一個Parquet文件中。 這種優化為我們節省了HDFS中的大量空間和文件數量,這又由於降低了節點的RAM使用率而提高了HDFS的性能和穩定性。 您可以在不同格式之間查看這些基準,這是我們數據工程師必須知道的基本知識!

這種簡單的策略運行得很好,這就是為什麼我們擴展其功能以支持各種流應用程序輸出並通過輸入/輸出目錄結構變得更加靈活的原因。

我們評估了該解決方案僅能保留一兩年,但是事實證明,它的使用壽命超出了我們的預期。 此外,由於將原始數據和已發佈的數據格式分離,因此為我們提供了靈活性。 我們從純文本和JSON格式開始,然後,轉移到Parquet作為客戶的最終發佈數據格式,同時保持了原始數據格式的靈活性(我們在輸入數據類型中使用了更適合的格式), 該應用程序在兩者之間進行了轉換。 後來,當我們添加新格式時,很容易在聚合應用程序中實現轉換。

重新考慮項目的假設和基礎有利於增強您對所採取的行動和做出的決定的信念。 請記住,在做出這些決定時,請保持最簡單,最容易的一面,以保留未來的靈活性。

(本文翻譯自Eyal Yoli Abs的文章《Big data & small files problem in HDFS》,參考:https://medium.com/datadriveninvestor/big-data-small-files-problem-in-hdfs-ba8707ec46b)


分享到:


相關文章: