大數據是收集,組織,處理和收集大型數據集洞察所需的非傳統策略和技術的總稱。雖然處理超過單個計算機的計算能力或存儲的數據的問題并不新鮮,但近年來這種類型的計算的普遍性,規模和價值已經大大擴展。
什么是大數據?
“大數據”的確切定義很難確定,因為項目,供應商,從業者和商業專業人士使用它的方式完全不同。考慮到這一點,一般來說,大數據是:
大數據集
用于處理大型數據集的計算策略和技術的類別
在此上下文中,“大數據集”表示數據集太大而無法使用傳統工具或在單個計算機上合理地處理或存儲。這意味著大數據集的共同規模不斷變化,并且可能因組織而異。
為什么大數據系統不同?
使用大數據的基本要求與使用任何大小的數據集的要求相同。然而,在設計解決方案時,大規模,攝取和處理的速度以及在過程的每個階段必須處理的數據的特征提出了重大的新挑戰。大多數大數據系統的目標是從大量異構數據中獲得使用傳統方法無法實現的洞察力和連接。
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 數據庫具有不同的權衡,但由于其靈活性和頻繁的分布式優先架構,它們通常非常適合大數據系統。
流處理:流處理是在單個數據項在系統中移動時計算的實踐。這允許對饋送到系統的數據進行實時分析,并且對于使用高速度量的時間敏感操作是有用的。
結論
大數據是一個廣泛,快速發展的主題。雖然它并不適合所有類型的計算,但許多組織正在轉向某些類型的工作負載的大數據,并使用它來補充現有的分析和業務工具。大數據系統非常適合于表現難以檢測的模式,并提供對通過傳統方法無法找到的行為的洞察力。通過正確實施處理大數據的系統,組織可以從已有的數據中獲得令人難以置信的價值。