大數據的定義與概念
- 2019 年 12 月 23 日
- 筆記
作者 | 子凡
來源 | https://www.leiue.com/big-data-definitions-and-concepts
大數據是收集,組織,處理和收集大型數據集洞察所需的非傳統策略和技術的總稱。雖然處理超過單個電腦的計算能力或存儲的數據的問題並不新鮮,但近年來這種類型的計算的普遍性,規模和價值已經大大擴展。
什麼是大數據?
「大數據」的確切定義很難確定,因為項目,供應商,從業者和商業專業人士使用它的方式完全不同。考慮到這一點,一般來說,大數據是:
- 大數據集
- 用於處理大型數據集的計算策略和技術的類別
在此上下文中,「大數據集」表示數據集太大而無法使用傳統工具或在單個電腦上合理地處理或存儲。這意味著大數據集的共同規模不斷變化,並且可能因組織而異。
為什麼大數據系統不同?
使用大數據的基本要求與使用任何大小的數據集的要求相同。然而,在設計解決方案時,大規模,攝取和處理的速度以及在過程的每個階段必須處理的數據的特徵提出了重大的新挑戰。大多數大數據系統的目標是從大量異構數據中獲得使用傳統方法無法實現的洞察力和連接。
2001 年,Gartner 的 Doug Laney 首次提出了所謂的「大數據的三個 V」來描述使大數據與其他數據處理不同的一些特徵:
- 體積
- 速度
- 品種
體積
處理的資訊規模很大,有助於定義大數據系統。這些數據集可以比傳統數據集大幾個數量級,這需要在處理和存儲生命周期的每個階段進行更多思考。
通常,由於工作要求超出了單台電腦的功能,因此這成為了從電腦組中彙集,分配和協調資源的挑戰。能夠將任務分解成更小部分的集群管理和演算法變得越來越重要。
速度
大數據與其他數據系統顯著不同的另一種方式是資訊在系統中移動的速度。數據經常從多個來源流入系統,並且通常需要實時處理以獲得見解並更新當前對系統的理解。
這種對近乎即時回饋的關注促使許多大數據從業者遠離面向批處理的方法,更接近實時流媒體系統。數據不斷被添加,按摩,處理和分析,以便跟上新資訊的湧入,並在最相關時及早發現有價值的資訊。這些想法需要具有高可用組件的強大系統,以防止數據管道中的故障。
品種
大數據問題通常是獨特的,因為處理的來源和它們的相對品質都很廣泛。
數據可以從內部系統(如應用程式和伺服器日誌),社交媒體源和其他外部 API,物理設備感測器以及其他提供商處獲取。大數據旨在通過將所有資訊整合到單個系統中來處理潛在有用的數據,而不管它來自何處。
媒體的格式和類型也可能有很大差異。影像,影片文件和錄音等富媒體與文本文件,結構化日誌等一起被攝取。雖然更傳統的數據處理系統可能希望數據進入已標記,格式化和組織的管道,但大數據系統通常接受和存儲數據更接近其原始狀態。理想情況下,原始數據的任何轉換或更改都將在處理時在記憶體中進行。
其他特點
不同的個人和組織建議擴大原有的三個 V,儘管這些提議傾向於描述挑戰而不是大數據的品質。一些常見的補充是:
- 準確性:各種來源和處理的複雜性可能會導致評估數據品質的挑戰(從而導致分析的品質)
- 可變性:數據的變化導致品質的廣泛變化。可能需要額外的資源來識別,處理或過濾低品質數據以使其更有用。
- 價值:大數據的最終挑戰是提供價值。有時,現有的系統和流程足夠複雜,使用數據和提取實際值可能變得困難。
大數據生命周期是什麼樣的?
那麼在處理大數據系統時如何實際處理數據呢?雖然實施方法不同,但我們可以談論的策略和軟體有一些共性。雖然下面列出的步驟可能並非在所有情況下都適用,但它們被廣泛使用。
涉及大數據處理的一般活動類別是:
- 將數據提取到系統中
- 將數據保存在存儲中
- 計算和分析數據
- 可視化結果
在詳細介紹這四個工作流程類別之前,我們將花點時間討論集群計算,這是大多數大數據解決方案採用的重要策略。建立計算集群通常是每個生命周期階段使用的技術的基礎。
集群計算
由於大數據的品質,個人電腦通常不足以在大多數階段處理數據。為了更好地滿足大數據的高存儲和計算需求,電腦集群更適合。
大數據集群軟體結合了許多小型機器的資源,力求提供許多好處:
- 資源池:結合可用的存儲空間來保存數據是一個明顯的好處,但 CPU 和記憶體池也非常重要。處理大型數據集需要大量所有這三種資源。
- 高可用性:群集可以提供不同級別的容錯和可用性保證,以防止硬體或軟體故障影響對數據和處理的訪問。隨著我們繼續強調實時分析的重要性,這變得越來越重要。
- 易於擴展:通過向組中添加其他電腦,集群可以輕鬆地進行水平擴展。這意味著系統可以對資源需求的變化做出反應,而無需擴展電腦上的物理資源。
使用群集需要一個解決方案來管理群集成員資格,協調資源共享以及在各個節點上安排實際工作。集群成員資格和資源分配可以由 Hadoop 的 YARN(代表 Yet Another Resource Negotiator)或 Apache Mesos 等軟體處理。
組裝的計算集群通常充當其他軟體與處理數據介面的基礎。計算集群中涉及的機器通常也涉及分散式存儲系統的管理,我們將在討論數據持久性時討論這些問題。
將數據提取到系統中
數據攝取是獲取原始數據並將其添加到系統的過程。此操作的複雜性在很大程度上取決於數據源的格式和品質以及數據在處理之前與期望狀態的距離。
可以將數據添加到大數據系統的一種方法是專用攝取工具。Apache Sqoop 等技術可以從關係資料庫中獲取現有數據,並將其添加到大數據系統中。同樣,Apache Flume 和 Apache Chukwa 是旨在聚合和導入應用程式和伺服器日誌的項目。像 Apache Kafka 這樣的排隊系統也可以用作各種數據生成器和大數據系統之間的介面。像 Gobblin 這樣的攝取框架可以幫助在攝取管道的末尾聚合和規範化這些工具的輸出。
在攝取過程中,通常會進行一定程度的分析,分類和標記。此過程有時稱為 ETL,表示提取,轉換和載入。雖然該術語通常是指遺留數據倉庫過程,但是一些相同的概念適用於進入大數據系統的數據。典型的操作可能包括修改傳入數據以對其進行格式化,對數據進行分類和標記,過濾掉不需要的或不良的數據,或者可能驗證它是否符合某些要求。
考慮到這些功能,理想情況下,捕獲的數據應儘可能保持原始狀態,以便在管道上進一步提高靈活性。
保持存儲中的數據
攝取過程通常將數據交給管理存儲的組件,以便可以可靠地持久保存到磁碟。雖然這似乎是一個簡單的操作,但是傳入數據量,可用性要求和分散式計算層使得更複雜的存儲系統成為必需。
這通常意味著利用分散式文件系統進行原始數據存儲。像 Apache Hadoop 的 HDFS 文件系統這樣的解決方案允許在群集中的多個節點上寫入大量數據。這確保了計算資源可以訪問數據,可以將數據載入到集群的 RAM 中以進行記憶體操作,並且可以優雅地處理組件故障。可以使用其他分散式文件系統代替 HDFS,包括 Ceph 和 GlusterFS。
還可以將數據導入其他分散式系統,以實現更加結構化的訪問。分散式資料庫,尤其是 NoSQL 資料庫,非常適合此角色,因為它們通常設計有相同的容錯考慮因素,並且可以處理異構數據。有許多不同類型的分散式資料庫可供選擇,具體取決於您希望如何組織和呈現數據。
計算和分析數據
一旦數據可用,系統就可以開始處理數據以顯示實際資訊。計算層可能是系統中最多樣化的部分,因為需求和最佳方法可能會根據所需的洞察類型而有很大差異。數據通常由一個工具迭代地重複處理,或者通過使用許多工具來表示不同類型的見解。
批處理是一種計算大型數據集的方法。該過程包括將工作分成更小的部分,在單個機器上安排每個部件,根據中間結果重新調整數據,然後計算和組裝最終結果。這些步驟通常分別稱為分裂,映射,改組,縮減和組裝,或統稱為分散式地圖縮減演算法。這是 Apache Hadoop 的 MapReduce 使用的策略。在處理需要大量計算的非常大的數據集時,批處理最有用。
雖然批處理非常適合某些類型的數據和計算,但其他工作負載需要更多的實時處理。實時處理要求立即處理和準備資訊,並要求系統在新資訊可用時作出反應。實現此目的的一種方式是流處理,其對由各個項組成的連續數據流進行操作。實時處理器的另一個共同特徵是記憶體計算,它與集群記憶體中數據的表示一起使用,以避免必須寫回磁碟。
Apache Storm,Apache Flink 和 Apache Spark 提供了實現實時或近實時處理的不同方法。這些技術中的每一種都存在權衡,這可能會影響哪種方法最適合任何個別問題。通常,實時處理最適合分析正在快速更改或添加到系統的較小數據塊。
以上示例表示計算框架。但是,在大數據系統中還有許多其他計算或分析數據的方法。這些工具經常插入上述框架,並提供額外的介面以與底層進行交互。例如,Apache Hive 為 Hadoop 提供了一個數據倉庫介面,Apache Pig 提供了一個高級查詢介面,而與數據類似的 SQL 交互可以通過 Apache Drill,Apache Impala,Apache Spark SQL 和 Presto 等項目實現。對於機器學習,Apache SystemML,Apache Mahout 和 Apache Spark 的 MLlib 非常有用。對於在大數據生態系統中得到廣泛支援的直接分析編程,R 和 Python 都是受歡迎的選擇。
可視化結果
由於在大數據系統中處理的資訊類型,隨著時間的推移識別數據的趨勢或變化通常比值本身更重要。可視化數據是發現趨勢和理解大量數據點的最有用方法之一。
實時處理經常用於可視化應用程式和伺服器度量標準。數據經常變化,指標中的大量增量通常表明對系統或組織的健康狀況產生重大影響。在這些情況下,像 Prometheus 這樣的項目可用於將數據流作為時間序列資料庫處理並可視化該資訊。
一種流行的數據可視化方法是使用 Elastic Stack,以前稱為 ELK 堆棧。由用於數據收集的 Logstash,用於索引數據的 Elasticsearch 和用於可視化的 Kibana 組成,Elastic 堆棧可以與大數據系統一起使用,以便與計算結果或原始指標進行可視化交互。使用 Apache Solr 進行索引並使用名為 Banana 的 Kibana fork 進行可視化,可以實現類似的堆棧。由這些創建的堆棧稱為 Silk。
通常用於互動式數據科學工作的另一種可視化技術是數據「筆記型電腦」。這些項目允許以有助於共享,呈現或協作的格式進行數據的互動式探索和可視化。這種可視化介面的流行示例是 Jupyter Notebook 和 Apache Zeppelin。
大數據辭彙表
雖然我們在整個指南中嘗試定義概念,但有時在一個地方提供專業術語是有幫助的:
- 大數據:大數據是數據集的總稱,由於其數量,速度和種類,傳統電腦或工具無法合理處理這些數據集。該術語通常也適用於使用此類數據的技術和策略。
- 批處理:批處理是一種涉及處理大型數據集的計算策略。這通常適用於對非常大的數據集進行操作的非時間敏感型工作。該過程開始,稍後,系統返回結果。
- 集群計算:集群計算是彙集多台電腦資源並管理其集合功能以完成任務的實踐。電腦集群需要一個集群管理層來處理各個節點之間的通訊並協調工作分配。
- 數據湖:數據湖是一個相對原始狀態的大型收集數據存儲庫的術語。這通常用於指在大數據系統中收集的數據,這些數據可能是非結構化的並且經常發生變化。這與數據倉庫(下面定義)的精神不同。
- 數據挖掘:數據挖掘是嘗試在大型數據集中查找模式的實踐的一個廣義術語。這是一個嘗試將大量數據細化為更易理解和更有凝聚力的資訊的過程。
- 數據倉庫:數據倉庫是大型有序的數據存儲庫,可用於分析和報告。與數據湖相比,數據倉庫由已清理,與其他來源集成的數據組成,並且通常是有序的。數據倉庫通常與大數據有關,但通常是更傳統系統的組件。
- ETL:ETL 代表提取,轉換和載入。它指的是獲取原始數據並為系統使用做好準備的過程。傳統上這是與數據倉庫相關的過程,但是這個過程的特徵也可以在大數據系統的攝取管道中找到。
- Hadoop:Hadoop 是一個 Apache 項目,是大數據的早期開源成功。它由一個名為 HDFS 的分散式文件系統組成,頂部有一個集群管理和資源調度程式,稱為 YARN(Yet Another Resource Negotiator)。批處理功能由 MapReduce 計算引擎提供。其他計算和分析系統可以與現代 Hadoop 部署中的 MapReduce 一起運行。
- 記憶體計算:記憶體計算是一種涉及將工作數據集完全移動到集群的集體記憶體中的策略。中間計算不會寫入磁碟,而是保存在記憶體中。這使像 Apache Spark 這樣的記憶體計算系統在速度上超過了 I / O 綁定系統(如 Hadoop 的 MapReduce)的巨大優勢。
- 機器學習:機器學習是設計系統的研究和實踐,可以根據提供給他們的數據來學習,調整和改進。這通常涉及預測和統計演算法的實現,當更多數據流過系統時,預測和統計演算法可以不斷地將「正確」行為和見解歸為零。
- Map reduce(大數據演算法):Map reduce(大數據演算法,而不是 Hadoop 的 MapReduce 計算引擎)是一種用於在計算集群上調度工作的演算法。該過程涉及拆分問題設置(將其映射到不同的節點)並對它們進行計算以產生中間結果,將結果混洗以對齊類似的集合,然後通過為每個集合輸出單個值來減少結果。
- NoSQL:NoSQL 是一個廣義術語,指的是在傳統關係模型之外設計的資料庫。與關係資料庫相比,NoSQL 資料庫具有不同的權衡,但由於其靈活性和頻繁的分散式優先架構,它們通常非常適合大數據系統。
- 流處理:流處理是在單個數據項在系統中移動時計算的實踐。這允許對饋送到系統的數據進行實時分析,並且對於使用高速度量的時間敏感操作是有用的。
結論
大數據是一個廣泛,快速發展的主題。雖然它並不適合所有類型的計算,但許多組織正在轉向某些類型的工作負載的大數據,並使用它來補充現有的分析和業務工具。大數據系統非常適合於表現難以檢測的模式,並提供對通過傳統方法無法找到的行為的洞察力。通過正確實施處理大數據的系統,組織可以從已有的數據中獲得令人難以置信的價值。
——END——