Apache Spark 是一個開源框架,适用于跨集群計算機并行處理大數據任務。它是在全球廣泛應用的分布式處理框架之一。
什麼是 APACHE SPARK?
伴随數據的巨量增長,APACHE SPARK 已成為分布式橫向擴展數據處理的熱門框架之一,可以在本地和雲端數以百萬計的服務器上運行。
Apache Spark 是應用于大型數據處理的快速通用分析引擎,可在 YARN、Apache Mesos、Kubernetes 上運行,也可獨立或在雲端運行。借助用于 SQL、流處理、機器學習和圖形處理的高級運算符及庫,Spark 使開發者能夠通過交互式 shell、筆記本或應用程序包來使用 Scala、Python、R 或 SQL 輕松構建并行應用程序。通過功能編程模型和相關查詢引擎 Catalyst,Spark 支持批量和交互式分析,可将作業轉換為查詢方案,并跨集群節點調度查詢方案中的操作。
Spark 核心數據處理引擎之上存在多個用于 SQL 和 DataFrame、機器學習、GraphX、圖形計算和流處理的庫。用戶可在來自各種數據源(例如 HDFS、Alluxio、Apache Cassandra、Apache HBase 或 Apache Hive)的海量數據集上結合使用這些庫。
Apache Spark 組件
為何選擇 APACHE SPARK?
Apache Spark 繼續了 Apache Hadoop 在 15 年前開始的大數據分析工作,并已成為大規模分布式數據處理的先進框架。
2010 年代初,大數據分析的流行促使 Hadoop 的使用量增長,而 Hadoop MapReduce 的性能限制成為了阻礙。MapReduce 的性能因其磁盤檢查點結果模型而遭遇瓶頸。同時,MapReduce 的低級别編程模型也限制了 Hadoop 的采用。
Apache Spark 最初是加利福尼亞大學伯克利分校 AMPLab 的一個研究項目,其目标是維持 MapReduce 可擴展、分布式、容錯處理框架的優勢,同時促使該框架變得更高效、更易于使用。Spark 能夠重複利用多線程輕量級任務(并非啟動和終止進程),還能跨疊代将數據緩存于内存中,無需在各階段間寫入磁盤,因此 Spark 在數據流程和疊代算法方面比 MapReduce 更高效。Spark 使用容錯分布式 DataFrame 來增強并行性能,并可實現 SQL 的易用性。
Spark 于 2014 年成為 Apache 軟件基金會的高級項目,如今,遍及 16000 多家企業和組織的成千上萬名數據工程師和科學家都在使用 Spark。Spark 在 Hadoop 的基礎上繼往開來的原因之一是,與 MapReduce 相比,其内存數據處理性能能夠以快達 100 倍的速度完成某些任務。這些功能由 250 多家公司的 1000 多位貢獻者在一個開放社區中創建。Databricks 的創始人率先進行了這項工作,僅僅是其平台每天就運行着 100 多萬個虛拟機來分析數據。
為何 SPARK 在應用 GPU 後表現更出色
Spark 的各個版本均有所改進,有助于更輕松地編程和執行。Apache Spark 3.0 通過創新來維持此趨勢,改善 Spark SQL 性能和 NVIDIA GPU 加速。
圖形處理器 (GPU) 因其超低浮點運算(性能)單價深受歡迎,其還可通過加快多核服務器的并行處理速度,解決當前的計算性能瓶頸問題。CPU 由專為按序串行處理優化的幾個核心組成。而 GPU 則擁有一個大規模并行架構,當中包含數千個更小、更高效的核心,專為同時處理多重任務而設計。與僅包含 CPU 的配置相比,GPU 的數據處理速度快得多。過去數年中,GPU 一直推動 DL 和機器學習 (ML) 模型訓練的發展。然而,數據科學家 80% 的時間都花費在了數據預處理上。
雖然 Spark 是以分割數據形式在節點分區中分發計算,但其向來是在 CPU 核心上執行計算操作。Spark 雖然通過添加内存數據處理緩解了 Hadoop 中存在的 I/O 問題,但現在瓶頸問題已從 I/O 轉變為日益增多的應用程序的計算問題。随着 GPU 加速計算的出現,此性能瓶頸問題迎刃而解。
為滿足并超越數據處理的現代需求,NVIDIA 一直與 Apache Spark 社區進行合作,通過推出 Spark 3.0 版本和用于 Spark 的開源 RAPIDS 加速器,将 GPU 應用于 Spark 的本機處理。在 Spark 中引入 GPU 加速具有諸多優勢:
用于 APACHE SPARK 的 RAPIDS 加速器
RAPIDS 是一套開源軟件庫和 API,可完全在 GPU 上執行端到端數據科學和分析流程,能夠實現大幅的速度提升,在大型數據集上尤是如此。用于 Apache Spark 的 RAPIDS 加速器基于 NVIDIA CUDA 和 UCX 構建,支持 GPU 加速的 SQL/DataFrame 操作和 Spark shuffle,且無需更改代碼。
Apache Spark 加速的端到端 AI 平台堆棧
加速 SQL/DataFrame
Spark 3.0 支持 SQL 優化器插件,使用列式批量(而非行式)處理數據。列式數據非常适合 GPU,并且 RAPIDS 加速器可插入此功能以加速 SQL 和 DataFrame 運算符。針對 RAPIDS 加速器,Catalyst 查詢優化器進行了修改,可識别通過 RAPIDS API 加速的查詢方案(主要是一對一映射)中的運算符,并可在執行查詢方案時在 Spark 集群中的 GPU 上調度這些運算符。
加速 Shuffle
在階段之間從現有 DataFrame 創建新 DataFrame 時,按值對數據進行排序、分組或合并的 Spark 操作必須移動分區之間的數據,此過程稱為 shuffle,其中涉及磁盤 I/O、數據序列化和網絡 I/O。新的 RAPIDS 加速器 shuffle 實施利用 UCX 優化 GPU 數據傳輸,盡可能在 GPU 上保留更多的數據,通過使用優質的可用硬件資源,找到在節點間移動數據的快速路徑(包括繞過 CPU 執行 GPU 到 GPU 顯存的節點内和節點間傳輸)。
加速器感知型調度
為推動旨在更好地統一深度學習和數據處理的重要 Spark 計劃,GPU 在 Apache Spark 3.0 中現已成為可調度資源。這使得 Spark 能夠使用特定數量的 GPU 來調度執行程序,并且用戶可以指定每個任務所需的 GPU 數量。Spark 将這些資源請求傳送至底層集群管理器、Kubernetes、YARN 或 Standalone。用戶還可以配置發現腳本,檢測集群管理器分配的 GPU。這大大簡化了需要 GPU 的 ML 應用程序的運行,因為之前用戶需要處理 Spark 應用程序中缺少 GPU 調度的問題。
加速 XGBoost
XGBoost 是一種可擴展的分布式梯度提升決策樹 (GBDT) ML 庫。
XGBoost 提供并行樹提升功能,是應用于回歸、分類和排序問題的出色 ML 庫。RAPIDS 團隊與 Distributed Machine Learning Common (DMLC) XGBoost 組織密切合作,而且 XGBoost 現已包含無縫嵌入式 GPU 加速。另外,Spark 3.0 XGBoost 現已與 Rapids 加速器集成,借助 Spark SQL/DataFrame 操作的 GPU 加速、XGBoost 訓練時間的 GPU 加速,以及内存優化存儲功能的高效 GPU 顯存利用率,可改善性能、準确性和成本。
在 Spark 3.0 中,您現在可以有單個流程,從數據提取到數據準備,再到在 GPU 驅動的集群上訓練模型,皆包含在内
SPARK 用例示例
欺詐檢測
對于需要快速決策并涉及多個數據源的情況而言,運行快速的 Spark 是不二之選。例如,金融機構檢測信用卡欺詐的方法之一是,分析單一帳戶上的交易量和交易地點。如果交易次數超出個人能力範圍,或者多個交易發生在不同地點,而交易地點相距不合情理,則表明一個帳戶已被洩露。
銀行可以使用 Apache Spark 來根據使用模式創建帳戶持有者的統一視圖。機器學習可用于根據先前觀察到的模式,檢測超出規範的模式。這還可以使機構更好地根據客戶個人需求來定制優惠。
醫療健康
在美國,藥物的不良相互作用是第四大緻死原因,排在肺癌、糖尿病和肺炎之前。确定多種藥物如何相互作用以對患者造成不良後果,這一問題的複雜程度呈指數級增加,随着新藥不斷推出,這一問題在每一年都更加複雜。
借助 Spark,數據科學家可以創建算法,掃描數百萬份病例記錄并查找提及的藥物類型。某些藥物的組合可以與治療結果相關聯,并按原先存在的狀況和病史等因素加權。然後可以将結果應用于個别患者的健康記錄,在開具處方或填寫處方之前提醒醫生和藥師注意出現不良反應的可能性。
為何 APACHE SPARK 如此重要
Spark 3.0 是數據科學家和數據工程師在分析和 AI 領域協作的一個重要裡程碑,其使 ETL 操作得到加速,同時 ML 和 DL 應用程序也能夠利用相同的 GPU 基礎設施。
數據科學團隊
将數據轉化為可用形式需要完成衆多普通任務,數據科學的“魔力”對此也無計可施。該過程涉及對數百萬或數十億條記錄中的非結構化數據(例如郵政編碼、日期和 SKU 編号)進行分類和排序。數據集越大,處理時間越長。據估計,數據準備會占用數據科學家 80% 的時間。
Hadoop 是一項大規模執行數據分析的突破性技術,使數據科學家能夠針對超大型數據存儲執行查詢。但是,處理時間通常很長,尤其是在需要對現有數據集執行重複掃描時,這在進行分類和數據發現時經常發生。
Spark 專為跨大型數據集的疊代查詢而構建。與 Hadoop/MapReduce 相比,其速度快達 100 倍,迅速獲得了數據科學家的青睐。Spark 還可輕松适應 Python、R 和 Scala 等面向數據科學的開發語言。由于大多數數據科學家都習慣于使用單個編程工具,因此 Spark 能夠輕松适應個人需求。
Spark SQL 還引入了名為 DataFrame 的數據抽象概念,該概念支持結構化和半結構化數據,并且支持多語言操作。通過這種概念,熟悉的 SQL 語言能夠以新方式應用于非結構化數據。Spark ML 提供了一套統一的高級别 API,這些 API 基于 DataFrame 構建,用于搭建 ML 流程或 ML 工作流程。基于 DataFrame 構建 ML 流程可實現分區數據處理的可擴展性,且便于通過 SQL 進行數據操作。
數據工程團隊
數據工程師彌補了數據科學家與開發者之間的差距。數據科學家選擇合适的數據類型和算法來解決問題,而數據工程師則與數據科學家和開發者開展合作,處理與數據流程創建相關的所有工作,用于數據提取轉換、存儲和分析,以構建大數據分析應用程序。
Spark 将複雜性從存儲方程中抽象出來。該框架可以處理幾乎任何底層存儲(包括 Hadoop 分布式文件系統),因此比 Hadoop 更靈活,更适用于雲和本地基礎設施的組合。Spark 還可以輕松整合流數據源,使其成為适用于新一代物聯網應用程序的引擎。
NVIDIA 大講堂往期精彩内容
NVIDIA 大講堂 | 什麼是人工智能(AI)?
NVIDIA 大講堂 | 什麼是深度學習(Deep Learning)?
NVIDIA 大講堂 | 什麼是機器學習?
更多精彩仍在繼續...
敬請關注
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!